44
44
import org .elasticsearch .index .mapper .DataStreamTimestampFieldMapper ;
45
45
import org .elasticsearch .index .mapper .DateFieldMapper ;
46
46
import org .elasticsearch .index .mapper .KeywordFieldMapper ;
47
+ import org .elasticsearch .index .mapper .MappedFieldType ;
47
48
import org .elasticsearch .index .mapper .NumberFieldMapper ;
48
49
import org .elasticsearch .index .mapper .RoutingPathFields ;
49
50
import org .elasticsearch .index .mapper .TimeSeriesIdFieldMapper ;
@@ -81,7 +82,7 @@ public void testSimple() {
81
82
int numSamplesPerTS = 10 ;
82
83
long timestampStart = DateFieldMapper .DEFAULT_DATE_TIME_FORMATTER .parseMillis ("2024-01-01T00:00:00Z" );
83
84
int maxPageSize = between (1 , 1024 );
84
- List <Page > results = runDriver (1024 , maxPageSize , randomBoolean () , numTimeSeries , numSamplesPerTS , timestampStart );
85
+ List <Page > results = runDriver (1024 , maxPageSize , true , numTimeSeries , numSamplesPerTS , timestampStart );
85
86
// for now we emit at most one time series each page
86
87
int offset = 0 ;
87
88
for (Page page : results ) {
@@ -155,9 +156,12 @@ record Doc(int host, long timestamp, long metric) {}
155
156
}
156
157
int maxPageSize = between (1 , 1024 );
157
158
int limit = randomBoolean () ? between (1 , 100000 ) : Integer .MAX_VALUE ;
159
+ var metricField = new NumberFieldMapper .NumberFieldType ("metric" , NumberFieldMapper .NumberType .LONG );
158
160
var timeSeriesFactory = createTimeSeriesSourceOperator (
159
161
directory ,
160
162
r -> this .reader = r ,
163
+ true ,
164
+ List .of (new ExtractField (metricField , ElementType .LONG )),
161
165
limit ,
162
166
maxPageSize ,
163
167
randomBoolean (),
@@ -171,12 +175,11 @@ record Doc(int host, long timestamp, long metric) {}
171
175
);
172
176
DriverContext driverContext = driverContext ();
173
177
List <Page > results = new ArrayList <>();
174
- var metricField = new NumberFieldMapper .NumberFieldType ("metric" , NumberFieldMapper .NumberType .LONG );
175
178
OperatorTestCase .runDriver (
176
179
TestDriverFactory .create (
177
180
driverContext ,
178
181
timeSeriesFactory .get (driverContext ),
179
- List .of (ValuesSourceReaderOperatorTests . factory ( reader , metricField , ElementType . LONG ). get ( driverContext ) ),
182
+ List .of (),
180
183
new TestResultPageSinkOperator (results ::add )
181
184
)
182
185
);
@@ -240,7 +243,9 @@ public void testMatchNone() throws Exception {
240
243
Integer .MAX_VALUE ,
241
244
randomIntBetween (1 , 1024 ),
242
245
1 ,
246
+ randomBoolean (),
243
247
List .of (ctx ),
248
+ List .of (),
244
249
unused -> query
245
250
);
246
251
var driverContext = driverContext ();
@@ -260,7 +265,7 @@ public void testMatchNone() throws Exception {
260
265
261
266
@ Override
262
267
protected Operator .OperatorFactory simple () {
263
- return createTimeSeriesSourceOperator (directory , r -> this .reader = r , 1 , 1 , false , writer -> {
268
+ return createTimeSeriesSourceOperator (directory , r -> this .reader = r , randomBoolean (), List . of (), 1 , 1 , false , writer -> {
264
269
long timestamp = DateFieldMapper .DEFAULT_DATE_TIME_FORMATTER .parseMillis ("2024-01-01T00:00:00Z" );
265
270
writeTS (writer , timestamp , new Object [] { "hostname" , "host-01" }, new Object [] { "voltage" , 2 });
266
271
return 1 ;
@@ -279,9 +284,13 @@ protected Matcher<String> expectedToStringOfSimple() {
279
284
280
285
List <Page > runDriver (int limit , int maxPageSize , boolean forceMerge , int numTimeSeries , int numSamplesPerTS , long timestampStart ) {
281
286
var ctx = driverContext ();
287
+ var voltageField = new NumberFieldMapper .NumberFieldType ("voltage" , NumberFieldMapper .NumberType .LONG );
288
+ var hostnameField = new KeywordFieldMapper .KeywordFieldType ("hostname" );
282
289
var timeSeriesFactory = createTimeSeriesSourceOperator (
283
290
directory ,
284
291
indexReader -> this .reader = indexReader ,
292
+ true ,
293
+ List .of (new ExtractField (voltageField , ElementType .LONG ), new ExtractField (hostnameField , ElementType .BYTES_REF )),
285
294
limit ,
286
295
maxPageSize ,
287
296
forceMerge ,
@@ -300,18 +309,8 @@ List<Page> runDriver(int limit, int maxPageSize, boolean forceMerge, int numTime
300
309
);
301
310
302
311
List <Page > results = new ArrayList <>();
303
- var voltageField = new NumberFieldMapper .NumberFieldType ("voltage" , NumberFieldMapper .NumberType .LONG );
304
- var hostnameField = new KeywordFieldMapper .KeywordFieldType ("hostname" );
305
312
OperatorTestCase .runDriver (
306
- TestDriverFactory .create (
307
- ctx ,
308
- timeSeriesFactory .get (ctx ),
309
- List .of (
310
- ValuesSourceReaderOperatorTests .factory (reader , voltageField , ElementType .LONG ).get (ctx ),
311
- ValuesSourceReaderOperatorTests .factory (reader , hostnameField , ElementType .BYTES_REF ).get (ctx )
312
- ),
313
- new TestResultPageSinkOperator (results ::add )
314
- )
313
+ TestDriverFactory .create (ctx , timeSeriesFactory .get (ctx ), List .of (), new TestResultPageSinkOperator (results ::add ))
315
314
);
316
315
OperatorTestCase .assertDriverContext (ctx );
317
316
for (Page result : results ) {
@@ -321,9 +320,15 @@ List<Page> runDriver(int limit, int maxPageSize, boolean forceMerge, int numTime
321
320
return results ;
322
321
}
323
322
323
+ public record ExtractField (MappedFieldType ft , ElementType elementType ) {
324
+
325
+ }
326
+
324
327
public static TimeSeriesSortedSourceOperatorFactory createTimeSeriesSourceOperator (
325
328
Directory directory ,
326
329
Consumer <IndexReader > readerConsumer ,
330
+ boolean emitDocIds ,
331
+ List <ExtractField > extractFields ,
327
332
int limit ,
328
333
int maxPageSize ,
329
334
boolean forceMerge ,
@@ -354,7 +359,18 @@ public static TimeSeriesSortedSourceOperatorFactory createTimeSeriesSourceOperat
354
359
}
355
360
var ctx = new LuceneSourceOperatorTests .MockShardContext (reader , 0 );
356
361
Function <ShardContext , Query > queryFunction = c -> new MatchAllDocsQuery ();
357
- return TimeSeriesSortedSourceOperatorFactory .create (limit , maxPageSize , 1 , List .of (ctx ), queryFunction );
362
+
363
+ var fieldInfos = extractFields .stream ()
364
+ .map (
365
+ f -> new ValuesSourceReaderOperator .FieldInfo (
366
+ f .ft .name (),
367
+ f .elementType ,
368
+ n -> f .ft .blockLoader (ValuesSourceReaderOperatorTests .blContext ())
369
+ )
370
+ )
371
+ .toList ();
372
+
373
+ return TimeSeriesSortedSourceOperatorFactory .create (limit , maxPageSize , 1 , emitDocIds , List .of (ctx ), fieldInfos , queryFunction );
358
374
}
359
375
360
376
public static void writeTS (RandomIndexWriter iw , long timestamp , Object [] dimensions , Object [] metrics ) throws IOException {
0 commit comments