Skip to content

Commit fa82df0

Browse files
authored
Rollup ignores time_zone on date histogram (#40844)
When translating the original aggregation for the rollup indices, the timezone of the date histogram is validated against the rollup job but the value is not copied in the newly created date_histogram.
1 parent 629d2ea commit fa82df0

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ private static List<AggregationBuilder> translateDateHistogram(DateHistogramAggr
224224
filterConditions.add(new TermQueryBuilder(RollupField.formatFieldName(source,
225225
DateHistogramGroupConfig.TIME_ZONE), timezone));
226226

227+
if (source.timeZone() != null) {
228+
rolledDateHisto.timeZone(source.timeZone());
229+
}
227230
rolledDateHisto.offset(source.offset());
228231
if (source.extendedBounds() != null) {
229232
rolledDateHisto.extendedBounds(source.extendedBounds());

x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.junit.Before;
3232

3333
import java.io.IOException;
34+
import java.time.ZoneId;
3435
import java.util.ArrayList;
3536
import java.util.Collections;
3637
import java.util.List;
@@ -271,6 +272,37 @@ public void testDateHistoLongIntervalWithMinMax() {
271272
}
272273
}
273274

275+
public void testDateHistoWithTimezone() {
276+
ZoneId timeZone = ZoneId.of(randomFrom(ZoneId.getAvailableZoneIds()));
277+
DateHistogramAggregationBuilder histo = new DateHistogramAggregationBuilder("test_histo");
278+
histo.interval(86400000)
279+
.field("foo")
280+
.timeZone(timeZone);
281+
List<QueryBuilder> filterConditions = new ArrayList<>();
282+
283+
List<AggregationBuilder> translated = translateAggregation(histo, filterConditions, namedWriteableRegistry);
284+
assertThat(translated.size(), equalTo(1));
285+
assertThat(translated.get(0), instanceOf(DateHistogramAggregationBuilder.class));
286+
DateHistogramAggregationBuilder translatedHisto = (DateHistogramAggregationBuilder)translated.get(0);
287+
288+
assertThat(translatedHisto.interval(), equalTo(86400000L));
289+
assertThat(translatedHisto.field(), equalTo("foo.date_histogram.timestamp"));
290+
assertThat(translatedHisto.timeZone(), equalTo(timeZone));
291+
assertThat(filterConditions.size(), equalTo(1));
292+
293+
for (QueryBuilder q : filterConditions) {
294+
if (q instanceof TermQueryBuilder) {
295+
if (((TermQueryBuilder) q).fieldName().equals("foo.date_histogram.time_zone")) {
296+
assertThat(((TermQueryBuilder) q).value(), equalTo(timeZone.toString()));
297+
} else {
298+
fail("Unexpected Term Query in filter conditions: [" + ((TermQueryBuilder) q).fieldName() + "]");
299+
}
300+
} else {
301+
fail("Unexpected query builder in filter conditions");
302+
}
303+
}
304+
}
305+
274306
public void testAvgMetric() {
275307
List<QueryBuilder> filterConditions = new ArrayList<>();
276308
List<AggregationBuilder> translated = translateAggregation(new AvgAggregationBuilder("test_metric")

0 commit comments

Comments
 (0)