Skip to content

Commit 018e77c

Browse files
authored
Core: Move helper date formatters over to java time (#32504)
Some classes use internal date formatters, which now can be moved over to java time using the DateFormatters class. The same applies for a few test cases.
1 parent 21f660d commit 018e77c

File tree

8 files changed

+53
-30
lines changed

8 files changed

+53
-30
lines changed

server/src/main/java/org/elasticsearch/action/admin/cluster/allocation/ClusterAllocationExplanation.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.elasticsearch.index.shard.ShardId;
3636

3737
import java.io.IOException;
38+
import java.time.Instant;
3839
import java.util.Locale;
3940

4041
import static org.elasticsearch.cluster.routing.allocation.AbstractAllocationDecision.discoveryNodeToXContent;
@@ -189,7 +190,8 @@ private XContentBuilder unassignedInfoToXContent(UnassignedInfo unassignedInfo,
189190

190191
builder.startObject("unassigned_info");
191192
builder.field("reason", unassignedInfo.getReason());
192-
builder.field("at", UnassignedInfo.DATE_TIME_FORMATTER.printer().print(unassignedInfo.getUnassignedTimeInMillis()));
193+
builder.field("at",
194+
UnassignedInfo.DATE_TIME_FORMATTER.format(Instant.ofEpochMilli(unassignedInfo.getUnassignedTimeInMillis())));
193195
if (unassignedInfo.getNumFailedAllocations() > 0) {
194196
builder.field("failed_allocation_attempts", unassignedInfo.getNumFailedAllocations());
195197
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@
2626
import org.elasticsearch.common.io.stream.StreamInput;
2727
import org.elasticsearch.common.io.stream.StreamOutput;
2828
import org.elasticsearch.common.io.stream.Writeable;
29-
import org.elasticsearch.common.joda.Joda;
3029
import org.elasticsearch.common.settings.Setting;
3130
import org.elasticsearch.common.settings.Settings;
31+
import org.elasticsearch.common.time.CompoundDateTimeFormatter;
32+
import org.elasticsearch.common.time.DateFormatters;
3233
import org.elasticsearch.common.xcontent.ContextParser;
3334
import org.elasticsearch.common.xcontent.ObjectParser;
3435
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -37,6 +38,8 @@
3738
import org.elasticsearch.index.Index;
3839

3940
import java.io.IOException;
41+
import java.time.Instant;
42+
import java.time.ZoneOffset;
4043
import java.util.ArrayList;
4144
import java.util.Collection;
4245
import java.util.Collections;
@@ -365,6 +368,9 @@ public static final class Tombstone implements ToXContentObject, Writeable {
365368
TOMBSTONE_PARSER.declareString((b, s) -> {}, new ParseField(DELETE_DATE_KEY));
366369
}
367370

371+
static final CompoundDateTimeFormatter FORMATTER =
372+
DateFormatters.forPattern("strict_date_optional_time").withZone(ZoneOffset.UTC);
373+
368374
static ContextParser<Void, Tombstone> getParser() {
369375
return (parser, context) -> TOMBSTONE_PARSER.apply(parser, null).build();
370376
}
@@ -428,7 +434,8 @@ public int hashCode() {
428434

429435
@Override
430436
public String toString() {
431-
return "[index=" + index + ", deleteDate=" + Joda.getStrictStandardDateFormatter().printer().print(deleteDateInMillis) + "]";
437+
String date = FORMATTER.format(Instant.ofEpochMilli(deleteDateInMillis));
438+
return "[index=" + index + ", deleteDate=" + date + "]";
432439
}
433440

434441
@Override

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,18 @@
2828
import org.elasticsearch.common.io.stream.StreamInput;
2929
import org.elasticsearch.common.io.stream.StreamOutput;
3030
import org.elasticsearch.common.io.stream.Writeable;
31-
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
32-
import org.elasticsearch.common.joda.Joda;
3331
import org.elasticsearch.common.settings.Setting;
3432
import org.elasticsearch.common.settings.Setting.Property;
3533
import org.elasticsearch.common.settings.Settings;
34+
import org.elasticsearch.common.time.CompoundDateTimeFormatter;
35+
import org.elasticsearch.common.time.DateFormatters;
3636
import org.elasticsearch.common.unit.TimeValue;
37-
import org.elasticsearch.common.xcontent.ToXContent.Params;
3837
import org.elasticsearch.common.xcontent.ToXContentFragment;
3938
import org.elasticsearch.common.xcontent.XContentBuilder;
4039

4140
import java.io.IOException;
41+
import java.time.Instant;
42+
import java.time.ZoneOffset;
4243
import java.util.Locale;
4344
import java.util.Objects;
4445

@@ -47,7 +48,8 @@
4748
*/
4849
public final class UnassignedInfo implements ToXContentFragment, Writeable {
4950

50-
public static final FormatDateTimeFormatter DATE_TIME_FORMATTER = Joda.forPattern("dateOptionalTime");
51+
public static final CompoundDateTimeFormatter DATE_TIME_FORMATTER =
52+
DateFormatters.forPattern("dateOptionalTime").withZone(ZoneOffset.UTC);
5153

5254
public static final Setting<TimeValue> INDEX_DELAYED_NODE_LEFT_TIMEOUT_SETTING =
5355
Setting.positiveTimeSetting("index.unassigned.node_left.delayed_timeout", TimeValue.timeValueMinutes(1), Property.Dynamic,
@@ -409,7 +411,7 @@ public static long findNextDelayedAllocation(long currentNanoTime, ClusterState
409411
public String shortSummary() {
410412
StringBuilder sb = new StringBuilder();
411413
sb.append("[reason=").append(reason).append("]");
412-
sb.append(", at[").append(DATE_TIME_FORMATTER.printer().print(unassignedTimeMillis)).append("]");
414+
sb.append(", at[").append(DATE_TIME_FORMATTER.format(Instant.ofEpochMilli(unassignedTimeMillis))).append("]");
413415
if (failedAllocations > 0) {
414416
sb.append(", failed_attempts[").append(failedAllocations).append("]");
415417
}
@@ -432,7 +434,7 @@ public String toString() {
432434
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
433435
builder.startObject("unassigned_info");
434436
builder.field("reason", reason);
435-
builder.field("at", DATE_TIME_FORMATTER.printer().print(unassignedTimeMillis));
437+
builder.field("at", DATE_TIME_FORMATTER.format(Instant.ofEpochMilli(unassignedTimeMillis)));
436438
if (failedAllocations > 0) {
437439
builder.field("failed_attempts", failedAllocations);
438440
}

server/src/main/java/org/elasticsearch/common/Table.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919

2020
package org.elasticsearch.common;
2121

22-
import org.joda.time.format.DateTimeFormat;
23-
import org.joda.time.format.DateTimeFormatter;
22+
import org.elasticsearch.common.time.CompoundDateTimeFormatter;
23+
import org.elasticsearch.common.time.DateFormatters;
2424

25+
import java.time.Instant;
26+
import java.time.ZoneOffset;
2527
import java.util.ArrayList;
2628
import java.util.HashMap;
2729
import java.util.List;
@@ -83,7 +85,7 @@ public Table endHeaders() {
8385
return this;
8486
}
8587

86-
private DateTimeFormatter dateFormat = DateTimeFormat.forPattern("HH:mm:ss");
88+
private static final CompoundDateTimeFormatter FORMATTER = DateFormatters.forPattern("HH:mm:ss").withZone(ZoneOffset.UTC);
8789

8890
public Table startRow() {
8991
if (headers.isEmpty()) {
@@ -93,7 +95,7 @@ public Table startRow() {
9395
if (withTime) {
9496
long time = System.currentTimeMillis();
9597
addCell(TimeUnit.SECONDS.convert(time, TimeUnit.MILLISECONDS));
96-
addCell(dateFormat.print(time));
98+
addCell(FORMATTER.format(Instant.ofEpochMilli(time)));
9799
}
98100
return this;
99101
}

server/src/main/java/org/elasticsearch/rest/action/cat/RestShardsAction.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.elasticsearch.rest.action.RestActionListener;
4141
import org.elasticsearch.rest.action.RestResponseListener;
4242

43+
import java.time.Instant;
4344
import java.util.Locale;
4445

4546
import static org.elasticsearch.rest.RestRequest.Method.GET;
@@ -230,7 +231,8 @@ private Table buildTable(RestRequest request, ClusterStateResponse state, Indice
230231

231232
if (shard.unassignedInfo() != null) {
232233
table.addCell(shard.unassignedInfo().getReason());
233-
table.addCell(UnassignedInfo.DATE_TIME_FORMATTER.printer().print(shard.unassignedInfo().getUnassignedTimeInMillis()));
234+
Instant unassignedTime = Instant.ofEpochMilli(shard.unassignedInfo().getUnassignedTimeInMillis());
235+
table.addCell(UnassignedInfo.DATE_TIME_FORMATTER.format(unassignedTime));
234236
table.addCell(TimeValue.timeValueMillis(System.currentTimeMillis() - shard.unassignedInfo().getUnassignedTimeInMillis()));
235237
table.addCell(shard.unassignedInfo().getDetails());
236238
} else {

server/src/main/java/org/elasticsearch/rest/action/cat/RestSnapshotAction.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,18 @@
2525
import org.elasticsearch.client.node.NodeClient;
2626
import org.elasticsearch.common.Table;
2727
import org.elasticsearch.common.settings.Settings;
28+
import org.elasticsearch.common.time.CompoundDateTimeFormatter;
29+
import org.elasticsearch.common.time.DateFormatters;
2830
import org.elasticsearch.common.unit.TimeValue;
2931
import org.elasticsearch.rest.RestController;
3032
import org.elasticsearch.rest.RestRequest;
3133
import org.elasticsearch.rest.RestResponse;
3234
import org.elasticsearch.rest.action.RestResponseListener;
3335
import org.elasticsearch.snapshots.SnapshotInfo;
3436
import org.elasticsearch.snapshots.SnapshotState;
35-
import org.joda.time.format.DateTimeFormat;
36-
import org.joda.time.format.DateTimeFormatter;
3737

38+
import java.time.Instant;
39+
import java.time.ZoneOffset;
3840
import java.util.concurrent.TimeUnit;
3941

4042
import static org.elasticsearch.rest.RestRequest.Method.GET;
@@ -97,7 +99,7 @@ protected Table getTableWithHeader(RestRequest request) {
9799
.endHeaders();
98100
}
99101

100-
private DateTimeFormatter dateFormat = DateTimeFormat.forPattern("HH:mm:ss");
102+
private static final CompoundDateTimeFormatter FORMATTER = DateFormatters.forPattern("HH:mm:ss").withZone(ZoneOffset.UTC);
101103

102104
private Table buildTable(RestRequest req, GetSnapshotsResponse getSnapshotsResponse) {
103105
Table table = getTableWithHeader(req);
@@ -107,9 +109,9 @@ private Table buildTable(RestRequest req, GetSnapshotsResponse getSnapshotsRespo
107109
table.addCell(snapshotStatus.snapshotId().getName());
108110
table.addCell(snapshotStatus.state());
109111
table.addCell(TimeUnit.SECONDS.convert(snapshotStatus.startTime(), TimeUnit.MILLISECONDS));
110-
table.addCell(dateFormat.print(snapshotStatus.startTime()));
112+
table.addCell(FORMATTER.format(Instant.ofEpochMilli(snapshotStatus.startTime())));
111113
table.addCell(TimeUnit.SECONDS.convert(snapshotStatus.endTime(), TimeUnit.MILLISECONDS));
112-
table.addCell(dateFormat.print(snapshotStatus.endTime()));
114+
table.addCell(FORMATTER.format(Instant.ofEpochMilli(snapshotStatus.endTime())));
113115
final long durationMillis;
114116
if (snapshotStatus.state() == SnapshotState.IN_PROGRESS) {
115117
durationMillis = System.currentTimeMillis() - snapshotStatus.startTime();

server/src/main/java/org/elasticsearch/rest/action/cat/RestTasksAction.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,20 @@
2727
import org.elasticsearch.common.Strings;
2828
import org.elasticsearch.common.Table;
2929
import org.elasticsearch.common.settings.Settings;
30+
import org.elasticsearch.common.time.CompoundDateTimeFormatter;
31+
import org.elasticsearch.common.time.DateFormatters;
3032
import org.elasticsearch.common.unit.TimeValue;
3133
import org.elasticsearch.rest.RestController;
3234
import org.elasticsearch.rest.RestRequest;
3335
import org.elasticsearch.rest.RestResponse;
3436
import org.elasticsearch.rest.action.RestResponseListener;
3537
import org.elasticsearch.tasks.TaskInfo;
36-
import org.joda.time.format.DateTimeFormat;
37-
import org.joda.time.format.DateTimeFormatter;
3838

39+
import java.time.Instant;
40+
import java.time.ZoneOffset;
3941
import java.util.ArrayList;
4042
import java.util.Collections;
43+
import java.util.Comparator;
4144
import java.util.HashSet;
4245
import java.util.List;
4346
import java.util.Set;
@@ -122,7 +125,7 @@ protected Table getTableWithHeader(final RestRequest request) {
122125
return table;
123126
}
124127

125-
private DateTimeFormatter dateFormat = DateTimeFormat.forPattern("HH:mm:ss");
128+
private static final CompoundDateTimeFormatter FORMATTER = DateFormatters.forPattern("HH:mm:ss").withZone(ZoneOffset.UTC);
126129

127130
private void buildRow(Table table, boolean fullId, boolean detailed, DiscoveryNodes discoveryNodes, TaskInfo taskInfo) {
128131
table.startRow();
@@ -139,7 +142,7 @@ private void buildRow(Table table, boolean fullId, boolean detailed, DiscoveryNo
139142
}
140143
table.addCell(taskInfo.getType());
141144
table.addCell(taskInfo.getStartTime());
142-
table.addCell(dateFormat.print(taskInfo.getStartTime()));
145+
table.addCell(FORMATTER.format(Instant.ofEpochMilli(taskInfo.getStartTime())));
143146
table.addCell(taskInfo.getRunningTimeNanos());
144147
table.addCell(TimeValue.timeValueNanos(taskInfo.getRunningTimeNanos()).toString());
145148

@@ -159,7 +162,7 @@ private void buildRow(Table table, boolean fullId, boolean detailed, DiscoveryNo
159162
private void buildGroups(Table table, boolean fullId, boolean detailed, List<TaskGroup> taskGroups) {
160163
DiscoveryNodes discoveryNodes = nodesInCluster.get();
161164
List<TaskGroup> sortedGroups = new ArrayList<>(taskGroups);
162-
sortedGroups.sort((o1, o2) -> Long.compare(o1.getTaskInfo().getStartTime(), o2.getTaskInfo().getStartTime()));
165+
sortedGroups.sort(Comparator.comparingLong(o -> o.getTaskInfo().getStartTime()));
163166
for (TaskGroup taskGroup : sortedGroups) {
164167
buildRow(table, fullId, detailed, discoveryNodes, taskGroup.getTaskInfo());
165168
buildGroups(table, fullId, detailed, taskGroup.getChildTasks());

server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramTests.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
import org.apache.lucene.index.IndexReader;
2727
import org.apache.lucene.index.IndexWriter;
2828
import org.apache.lucene.store.Directory;
29-
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
30-
import org.elasticsearch.common.joda.Joda;
29+
import org.elasticsearch.common.time.CompoundDateTimeFormatter;
30+
import org.elasticsearch.common.time.DateFormatters;
3131
import org.elasticsearch.index.query.QueryShardContext;
3232
import org.elasticsearch.search.aggregations.BaseAggregationTestCase;
3333
import org.elasticsearch.search.aggregations.BucketOrder;
@@ -137,17 +137,20 @@ private static Document documentForDate(String field, long millis) {
137137
}
138138

139139
public void testRewriteTimeZone() throws IOException {
140-
FormatDateTimeFormatter format = Joda.forPattern("strict_date_optional_time");
140+
CompoundDateTimeFormatter format = DateFormatters.forPattern("strict_date_optional_time");
141141

142142
try (Directory dir = newDirectory();
143143
IndexWriter w = new IndexWriter(dir, newIndexWriterConfig())) {
144144

145-
w.addDocument(documentForDate(DATE_FIELD_NAME, format.parser().parseDateTime("2018-03-11T11:55:00").getMillis()));
146-
w.addDocument(documentForDate(DATE_FIELD_NAME, format.parser().parseDateTime("2017-10-30T18:13:00").getMillis()));
145+
long millis1 = DateFormatters.toZonedDateTime(format.parse("2018-03-11T11:55:00")).toInstant().toEpochMilli();
146+
w.addDocument(documentForDate(DATE_FIELD_NAME, millis1));
147+
long millis2 = DateFormatters.toZonedDateTime(format.parse("2017-10-30T18:13:00")).toInstant().toEpochMilli();
148+
w.addDocument(documentForDate(DATE_FIELD_NAME, millis2));
147149

148150
try (IndexReader readerThatDoesntCross = DirectoryReader.open(w)) {
149151

150-
w.addDocument(documentForDate(DATE_FIELD_NAME, format.parser().parseDateTime("2018-03-25T02:44:00").getMillis()));
152+
long millis3 = DateFormatters.toZonedDateTime(format.parse("2018-03-25T02:44:00")).toInstant().toEpochMilli();
153+
w.addDocument(documentForDate(DATE_FIELD_NAME, millis3));
151154

152155
try (IndexReader readerThatCrosses = DirectoryReader.open(w)) {
153156

0 commit comments

Comments
 (0)