Skip to content

Commit

Permalink
Core: Migrating from joda to java.time. ML package
Browse files Browse the repository at this point in the history
part of the migrating joda time work. The goal is to find usages of joda
time and refactor to use java.time.

closes: #35490

confirmed histograms are returning zoneddatedate
 remove unused imports
 missing space
typos
removing the DateTime usage as it won't be hit
removing tests no longer valid as code has been removed
  • Loading branch information
pgomulka committed Nov 27, 2018
1 parent cb250c4 commit 1dddced
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.rest.ESRestTestCase;
import org.elasticsearch.xpack.ml.MachineLearning;
import org.joda.time.DateTime;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -266,7 +267,7 @@ public void testHRDSplit() throws Exception {
"\"time\": { \"type\": \"date\" } } }");

// Index some data
DateTime baseTime = new DateTime().minusYears(1);
ZonedDateTime baseTime = ZonedDateTime.now().minusYears(1);
TestConfiguration test = tests.get(randomInt(tests.size()-1));

// domainSplit() tests had subdomain, testHighestRegisteredDomainCases() did not, so we need a special case for sub
Expand All @@ -276,18 +277,24 @@ public void testHRDSplit() throws Exception {

for (int i = 0; i < 100; i++) {

DateTime time = baseTime.plusHours(i);
ZonedDateTime time = baseTime.plusHours(i);
if (i == 64) {
// Anomaly has 100 docs, but we don't care about the value
for (int j = 0; j < 100; j++) {
Request createDocRequest = new Request("PUT", "/painless/test/" + time.toDateTimeISO() + "_" + j);
createDocRequest.setJsonEntity("{\"domain\": \"" + "bar.bar.com\", \"time\": \"" + time.toDateTimeISO() + "\"}");
String endpoint = "/painless/test/" + time.format(DateTimeFormatter.ISO_DATE_TIME) + "_" + j;
Request createDocRequest = new Request("PUT", endpoint);
String entity = "{\"domain\": \"" + "bar.bar.com\", \"time\": \"" + time.format(DateTimeFormatter.ISO_DATE_TIME) +
"\"}";
createDocRequest.setJsonEntity(entity);
client().performRequest(createDocRequest);
}
} else {
// Non-anomalous values will be what's seen when the anomaly is reported
Request createDocRequest = new Request("PUT", "/painless/test/" + time.toDateTimeISO());
createDocRequest.setJsonEntity("{\"domain\": \"" + test.hostName + "\", \"time\": \"" + time.toDateTimeISO() + "\"}");
String endpoint = "/painless/test/" + time.format(DateTimeFormatter.ISO_DATE_TIME);
Request createDocRequest = new Request("PUT", endpoint);
String entity =
"{\"domain\": \"" + test.hostName + "\", \"time\": \"" + time.format(DateTimeFormatter.ISO_DATE_TIME) + "\"}";
createDocRequest.setJsonEntity(entity);
client().performRequest(createDocRequest);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
import org.elasticsearch.common.util.concurrent.FutureUtils;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.xpack.core.ml.action.DeleteExpiredDataAction;
import org.joda.time.DateTime;
import org.joda.time.chrono.ISOChronology;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.IsoChronology;
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.ScheduledFuture;
Expand Down Expand Up @@ -70,9 +72,11 @@ public MlDailyMaintenanceService(ClusterName clusterName, ThreadPool threadPool,
private static TimeValue delayToNextTime(ClusterName clusterName) {
Random random = new Random(clusterName.hashCode());
int minutesOffset = random.ints(0, MAX_TIME_OFFSET_MINUTES).findFirst().getAsInt();
DateTime now = DateTime.now(ISOChronology.getInstance());
DateTime next = now.plusDays(1).withTimeAtStartOfDay().plusMinutes(30).plusMinutes(minutesOffset);
return TimeValue.timeValueMillis(next.getMillis() - now.getMillis());

Instant instant = ZonedDateTime.now().toInstant();
ZonedDateTime now = IsoChronology.INSTANCE.zonedDateTime(instant, ZoneId.systemDefault());
ZonedDateTime next = now.plusDays(1).toLocalDate().atStartOfDay(now.getZone()).plusMinutes(30).plusMinutes(minutesOffset);
return TimeValue.timeValueMillis(next.toInstant().toEpochMilli() - now.toInstant().toEpochMilli());
}

public void start() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.elasticsearch.xpack.ml.datafeed.delayeddatacheck.DelayedDataDetectorFactory.BucketWithMissingData;
import org.elasticsearch.xpack.core.ml.job.results.Bucket;
import org.elasticsearch.xpack.core.ml.utils.Intervals;
import org.joda.time.DateTime;

import java.time.ZonedDateTime;
import java.util.Collections;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.elasticsearch.search.aggregations.metrics.Percentiles;
import org.elasticsearch.xpack.core.ml.datafeed.DatafeedConfig;
import org.elasticsearch.xpack.core.ml.job.messages.Messages;
import org.joda.time.DateTime;

import java.io.IOException;
import java.io.OutputStream;
Expand Down Expand Up @@ -176,17 +175,15 @@ private void processDateHistogram(Histogram agg) throws IOException {
}

/*
* Date Histograms have a {@link DateTime} object as the key,
* Date Histograms have a {@link ZonedDateTime} object as the key,
* Histograms have either a Double or Long.
*/
private long toHistogramKeyToEpoch(Object key) {
if (key instanceof DateTime) {
return ((DateTime)key).getMillis();
} else if (key instanceof ZonedDateTime) {
if (key instanceof ZonedDateTime) {
return ((ZonedDateTime)key).toInstant().toEpochMilli();
} else if (key instanceof Double) {
return ((Double)key).longValue();
} else if (key instanceof Long){
} else if (key instanceof Long) {
return (Long)key;
} else {
throw new IllegalStateException("Histogram key [" + key + "] cannot be converted to a timestamp");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.elasticsearch.common.document.DocumentField;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.DocValueFieldsContext;
import org.joda.time.base.BaseDateTime;

import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -112,8 +111,6 @@ public Object[] value(SearchHit hit) {
}
if (value[0] instanceof String) { // doc_value field with the epoch_millis format
value[0] = Long.parseLong((String) value[0]);
} else if (value[0] instanceof BaseDateTime) { // script field
value[0] = ((BaseDateTime) value[0]).getMillis();
} else if (value[0] instanceof Long == false) { // pre-6.0 field
throw new IllegalStateException("Unexpected value for a time field: " + value[0].getClass());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
import org.elasticsearch.xpack.core.ml.job.config.Job;
import org.elasticsearch.xpack.core.ml.job.results.Result;
import org.elasticsearch.xpack.ml.utils.VolatileCursorIterator;
import org.joda.time.DateTime;
import org.joda.time.chrono.ISOChronology;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.IsoChronology;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
Expand Down Expand Up @@ -70,7 +72,9 @@ protected static <T> Iterator<T> createVolatileCursorIterator(List<T> items) {
}

private long calcCutoffEpochMs(long retentionDays) {
long nowEpochMs = DateTime.now(ISOChronology.getInstance()).getMillis();
Instant instant = ZonedDateTime.now().toInstant();
long nowEpochMs = IsoChronology.INSTANCE.zonedDateTime(instant, ZoneId.systemDefault())
.toInstant().toEpochMilli();
return nowEpochMs - new TimeValue(retentionDays, TimeUnit.DAYS).getMillis();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@
import org.elasticsearch.xpack.core.ml.job.results.ForecastRequestStats;
import org.elasticsearch.xpack.core.ml.job.results.Result;
import org.elasticsearch.xpack.ml.MachineLearning;
import org.joda.time.DateTime;
import org.joda.time.chrono.ISOChronology;

import java.io.IOException;
import java.io.InputStream;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.IsoChronology;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
Expand All @@ -66,7 +68,13 @@ public class ExpiredForecastsRemover implements MlDataRemover {
public ExpiredForecastsRemover(Client client, ThreadPool threadPool) {
this.client = Objects.requireNonNull(client);
this.threadPool = Objects.requireNonNull(threadPool);
this.cutoffEpochMs = DateTime.now(ISOChronology.getInstance()).getMillis();
this.cutoffEpochMs = getNowEpochMs();
}

private long getNowEpochMs() {
Instant instant = ZonedDateTime.now().toInstant();
return IsoChronology.INSTANCE.zonedDateTime(instant, ZoneId.systemDefault())
.toInstant().toEpochMilli();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.DocValueFieldsContext;
import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.ml.datafeed.extractor.fields.ExtractedField;
import org.elasticsearch.xpack.ml.test.SearchHitBuilder;
import org.joda.time.DateTime;

import java.util.Arrays;

Expand Down Expand Up @@ -98,13 +96,6 @@ public void testNewTimeFieldGivenSource() {
expectThrows(IllegalArgumentException.class, () -> ExtractedField.newTimeField("time", ExtractedField.ExtractionMethod.SOURCE));
}

public void testValueGivenTimeField() {
final long millis = randomLong();
final SearchHit hit = new SearchHitBuilder(randomInt()).addField("time", new DateTime(millis)).build();
final ExtractedField timeField = ExtractedField.newTimeField("time", ExtractedField.ExtractionMethod.DOC_VALUE);
assertThat(timeField.value(hit), equalTo(new Object[] { millis }));
}

public void testValueGivenStringTimeField() {
final long millis = randomLong();
final SearchHit hit = new SearchHitBuilder(randomInt()).addField("time", Long.toString(millis)).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import org.elasticsearch.xpack.core.ml.job.config.Detector;
import org.elasticsearch.xpack.core.ml.job.config.Job;
import org.elasticsearch.xpack.ml.test.SearchHitBuilder;
import org.joda.time.DateTime;

import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -64,13 +63,6 @@ public void testAllTypesOfFields() {
assertThat(extractedFields.getSourceFields(), equalTo(new String[] {"src1", "src2"}));
}

public void testTimeFieldValue() {
long millis = randomLong();
SearchHit hit = new SearchHitBuilder(randomInt()).addField("time", new DateTime(millis)).build();
TimeBasedExtractedFields extractedFields = new TimeBasedExtractedFields(timeField, Collections.singletonList(timeField));
assertThat(extractedFields.timeFieldValue(hit), equalTo(millis));
}

public void testStringTimeFieldValue() {
long millis = randomLong();
SearchHit hit = new SearchHitBuilder(randomInt()).addField("time", Long.toString(millis)).build();
Expand Down

0 comments on commit 1dddced

Please sign in to comment.