Skip to content

Commit daa2ec8

Browse files
authored
Switch mapping/aggregations over to java time (#36363)
This commit moves the aggregation and mapping code from joda time to java time. This includes field mappers, root object mappers, aggregations with date histograms, query builders and a lot of changes within tests. The cut-over to java time is a requirement so that we can support nanoseconds properly in a future field mapper. Relates #27330
1 parent 7b3dd30 commit daa2ec8

File tree

157 files changed

+1823
-2249
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+1823
-2249
lines changed

benchmarks/src/main/java/org/elasticsearch/benchmark/time/DateFormatterBenchmark.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,3 @@ public TemporalAccessor parseJodaDate() {
5555
return jodaFormatter.parse("1234567890");
5656
}
5757
}
58-

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/DenseVectorFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import org.elasticsearch.index.fielddata.IndexFieldData;
3232
import org.elasticsearch.index.query.QueryShardContext;
3333
import org.elasticsearch.search.DocValueFormat;
34-
import org.joda.time.DateTimeZone;
3534

3635
import java.io.IOException;
36+
import java.time.ZoneId;
3737
import java.util.List;
3838
import java.util.Map;
3939

@@ -107,7 +107,7 @@ public String typeName() {
107107
}
108108

109109
@Override
110-
public DocValueFormat docValueFormat(String format, DateTimeZone timeZone) {
110+
public DocValueFormat docValueFormat(String format, ZoneId timeZone) {
111111
throw new UnsupportedOperationException(
112112
"Field [" + name() + "] of type [" + typeName() + "] doesn't support docvalue_fields or aggregations");
113113
}

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@
5959
import org.elasticsearch.indices.breaker.CircuitBreakerService;
6060
import org.elasticsearch.search.DocValueFormat;
6161
import org.elasticsearch.search.MultiValueMode;
62-
import org.joda.time.DateTimeZone;
6362

6463
import java.io.IOException;
6564
import java.math.BigDecimal;
65+
import java.time.ZoneId;
6666
import java.util.ArrayList;
6767
import java.util.Collections;
6868
import java.util.Iterator;
@@ -301,7 +301,7 @@ public Object valueForDisplay(Object value) {
301301
}
302302

303303
@Override
304-
public DocValueFormat docValueFormat(String format, DateTimeZone timeZone) {
304+
public DocValueFormat docValueFormat(String format, ZoneId timeZone) {
305305
if (timeZone != null) {
306306
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName()
307307
+ "] does not support custom time zones");

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/SparseVectorFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import org.elasticsearch.index.fielddata.IndexFieldData;
3232
import org.elasticsearch.index.query.QueryShardContext;
3333
import org.elasticsearch.search.DocValueFormat;
34-
import org.joda.time.DateTimeZone;
3534

3635
import java.io.IOException;
36+
import java.time.ZoneId;
3737
import java.util.List;
3838
import java.util.Map;
3939

@@ -107,7 +107,7 @@ public String typeName() {
107107
}
108108

109109
@Override
110-
public DocValueFormat docValueFormat(String format, DateTimeZone timeZone) {
110+
public DocValueFormat docValueFormat(String format, ZoneId timeZone) {
111111
throw new UnsupportedOperationException(
112112
"Field [" + name() + "] of type [" + typeName() + "] doesn't support docvalue_fields or aggregations");
113113
}

plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4747
import org.elasticsearch.index.query.QueryShardContext;
4848
import org.elasticsearch.search.DocValueFormat;
49-
import org.joda.time.DateTimeZone;
5049

5150
import java.io.IOException;
51+
import java.time.ZoneId;
5252
import java.util.ArrayList;
5353
import java.util.Iterator;
5454
import java.util.List;
@@ -208,7 +208,7 @@ public BytesRef parseBytesRef(String value) {
208208
};
209209

210210
@Override
211-
public DocValueFormat docValueFormat(final String format, final DateTimeZone timeZone) {
211+
public DocValueFormat docValueFormat(final String format, final ZoneId timeZone) {
212212
return COLLATE_FORMAT;
213213
}
214214
}

qa/smoke-test-ingest-with-all-dependencies/src/test/resources/rest-api-spec/test/ingest/60_pipeline_timestamp_date_mapping.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
index: timetest
1010
body:
1111
mappings:
12-
test: { "properties": { "my_time": {"type": "date"}}}
12+
test: { "properties": { "my_time": {"type": "date", "format": "strict_date_optional_time_nanos"}}}
1313

1414
- do:
1515
ingest.put_pipeline:

server/src/main/java/org/elasticsearch/cluster/metadata/IndexGraveyard.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.elasticsearch.common.settings.Setting;
3030
import org.elasticsearch.common.settings.Settings;
3131
import org.elasticsearch.common.time.DateFormatter;
32-
import org.elasticsearch.common.time.DateFormatters;
3332
import org.elasticsearch.common.xcontent.ContextParser;
3433
import org.elasticsearch.common.xcontent.ObjectParser;
3534
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -368,7 +367,7 @@ public static final class Tombstone implements ToXContentObject, Writeable {
368367
TOMBSTONE_PARSER.declareString((b, s) -> {}, new ParseField(DELETE_DATE_KEY));
369368
}
370369

371-
static final DateFormatter FORMATTER = DateFormatters.forPattern("strict_date_optional_time").withZone(ZoneOffset.UTC);
370+
static final DateFormatter FORMATTER = DateFormatter.forPattern("strict_date_optional_time").withZone(ZoneOffset.UTC);
372371

373372
static ContextParser<Void, Tombstone> getParser() {
374373
return (parser, context) -> TOMBSTONE_PARSER.apply(parser, null).build();

server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
import org.elasticsearch.common.collect.Tuple;
2929
import org.elasticsearch.common.regex.Regex;
3030
import org.elasticsearch.common.time.DateFormatter;
31-
import org.elasticsearch.common.time.DateFormatters;
3231
import org.elasticsearch.common.time.DateMathParser;
32+
import org.elasticsearch.common.time.DateUtils;
3333
import org.elasticsearch.common.util.set.Sets;
3434
import org.elasticsearch.index.Index;
3535
import org.elasticsearch.index.IndexNotFoundException;
@@ -819,7 +819,7 @@ private static List<String> resolveEmptyOrTrivialWildcard(IndicesOptions options
819819

820820
static final class DateMathExpressionResolver implements ExpressionResolver {
821821

822-
private static final DateFormatter DEFAULT_DATE_FORMATTER = DateFormatters.forPattern("uuuu.MM.dd");
822+
private static final DateFormatter DEFAULT_DATE_FORMATTER = DateFormatter.forPattern("uuuu.MM.dd");
823823
private static final String EXPRESSION_LEFT_BOUND = "<";
824824
private static final String EXPRESSION_RIGHT_BOUND = ">";
825825
private static final char LEFT_BOUND = '{';
@@ -912,18 +912,19 @@ String resolveExpression(String expression, final Context context) {
912912
int formatPatternTimeZoneSeparatorIndex = patternAndTZid.indexOf(TIME_ZONE_BOUND);
913913
if (formatPatternTimeZoneSeparatorIndex != -1) {
914914
dateFormatterPattern = patternAndTZid.substring(0, formatPatternTimeZoneSeparatorIndex);
915-
timeZone = ZoneId.of(patternAndTZid.substring(formatPatternTimeZoneSeparatorIndex + 1));
915+
timeZone = DateUtils.of(patternAndTZid.substring(formatPatternTimeZoneSeparatorIndex + 1));
916916
} else {
917917
dateFormatterPattern = patternAndTZid;
918918
timeZone = ZoneOffset.UTC;
919919
}
920-
dateFormatter = DateFormatters.forPattern(dateFormatterPattern);
920+
dateFormatter = DateFormatter.forPattern(dateFormatterPattern);
921921
}
922+
922923
DateFormatter formatter = dateFormatter.withZone(timeZone);
923924
DateMathParser dateMathParser = formatter.toDateMathParser();
924-
long millis = dateMathParser.parse(mathExpression, context::getStartTime, false, timeZone);
925+
Instant instant = dateMathParser.parse(mathExpression, context::getStartTime, false, timeZone);
925926

926-
String time = formatter.format(Instant.ofEpochMilli(millis));
927+
String time = formatter.format(instant);
927928
beforePlaceHolderSb.append(time);
928929
inPlaceHolderSb = new StringBuilder();
929930
inPlaceHolder = false;

server/src/main/java/org/elasticsearch/cluster/routing/UnassignedInfo.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.elasticsearch.common.settings.Setting.Property;
3333
import org.elasticsearch.common.settings.Settings;
3434
import org.elasticsearch.common.time.DateFormatter;
35-
import org.elasticsearch.common.time.DateFormatters;
3635
import org.elasticsearch.common.unit.TimeValue;
3736
import org.elasticsearch.common.xcontent.ToXContentFragment;
3837
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -48,7 +47,7 @@
4847
*/
4948
public final class UnassignedInfo implements ToXContentFragment, Writeable {
5049

51-
public static final DateFormatter DATE_TIME_FORMATTER = DateFormatters.forPattern("dateOptionalTime").withZone(ZoneOffset.UTC);
50+
public static final DateFormatter DATE_TIME_FORMATTER = DateFormatter.forPattern("dateOptionalTime").withZone(ZoneOffset.UTC);
5251

5352
public static final Setting<TimeValue> INDEX_DELAYED_NODE_LEFT_TIMEOUT_SETTING =
5453
Setting.positiveTimeSetting("index.unassigned.node_left.delayed_timeout", TimeValue.timeValueMinutes(1), Property.Dynamic,

0 commit comments

Comments
 (0)