Skip to content

Commit 45de453

Browse files
authored
Group field producers once when performing shard level downsampling (#96795) (#96845)
Group field producers once when creating RollupBucketBuilder, instead of everytime a rollup document needs to be built.
1 parent 7aaf683 commit 45de453

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/downsample/RollupShardIndexer.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,28 @@ private class RollupBucketBuilder {
384384
private long timestamp;
385385
private int docCount;
386386
private final List<AbstractDownsampleFieldProducer> rollupFieldProducers;
387+
private final List<DownsampleFieldSerializer> groupedProducers;
387388

388389
RollupBucketBuilder(List<AbstractDownsampleFieldProducer> rollupFieldProducers) {
389390
this.rollupFieldProducers = rollupFieldProducers;
391+
/*
392+
* The rollup field producers for aggregate_metric_double all share the same name (this is
393+
* the name they will be serialized in the target index). We group all field producers by
394+
* name. If grouping yields multiple rollup field producers, we delegate serialization to
395+
* the AggregateMetricFieldSerializer class.
396+
*/
397+
groupedProducers = rollupFieldProducers.stream()
398+
.collect(groupingBy(AbstractDownsampleFieldProducer::name))
399+
.entrySet()
400+
.stream()
401+
.map(e -> {
402+
if (e.getValue().size() == 1) {
403+
return e.getValue().get(0);
404+
} else {
405+
return new AggregateMetricFieldSerializer(e.getKey(), e.getValue());
406+
}
407+
})
408+
.toList();
390409
}
391410

392411
/**
@@ -435,25 +454,6 @@ public XContentBuilder buildRollupDocument() throws IOException {
435454
builder.field((String) e.getKey(), e.getValue());
436455
}
437456

438-
/*
439-
* The rollup field producers for aggregate_metric_double all share the same name (this is
440-
* the name they will be serialized in the target index). We group all field producers by
441-
* name. If grouping yields multiple rollup field producers, we delegate serialization to
442-
* the AggregateMetricFieldSerializer class.
443-
*/
444-
List<DownsampleFieldSerializer> groupedProducers = rollupFieldProducers.stream()
445-
.collect(groupingBy(AbstractDownsampleFieldProducer::name))
446-
.entrySet()
447-
.stream()
448-
.map(e -> {
449-
if (e.getValue().size() == 1) {
450-
return e.getValue().get(0);
451-
} else {
452-
return new AggregateMetricFieldSerializer(e.getKey(), e.getValue());
453-
}
454-
})
455-
.toList();
456-
457457
// Serialize fields
458458
for (DownsampleFieldSerializer fieldProducer : groupedProducers) {
459459
fieldProducer.write(builder);

0 commit comments

Comments
 (0)