|
@@ -49,6 +49,7 @@ import org.elasticsearch.xpack.core.watcher.watch.Payload;
|
|
|
import org.elasticsearch.xpack.ml.dataframe.stats.ProgressTracker;
|
|
|
import org.elasticsearch.xpack.ml.dataframe.stats.StatsHolder;
|
|
|
import org.elasticsearch.xpack.ml.notifications.DataFrameAnalyticsAuditor;
|
|
|
+import org.elasticsearch.xpack.ml.utils.persistence.MlParserUtils;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -309,17 +310,31 @@ public class DataFrameAnalyticsTask extends AllocatedPersistentTask implements S
|
|
|
ActionListener<SearchResponse> searchFormerProgressDocListener = ActionListener.wrap(
|
|
|
searchResponse -> {
|
|
|
String indexOrAlias = AnomalyDetectorsIndex.jobStateIndexWriteAlias();
|
|
|
+ StoredProgress previous = null;
|
|
|
if (searchResponse.getHits().getHits().length > 0) {
|
|
|
indexOrAlias = searchResponse.getHits().getHits()[0].getIndex();
|
|
|
+ try {
|
|
|
+ previous = MlParserUtils.parse(searchResponse.getHits().getHits()[0], StoredProgress.PARSER);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ LOGGER.warn(new ParameterizedMessage("[{}] failed to parse previously stored progress", jobId), ex);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ List<PhaseProgress> progress = statsHolder.getProgressTracker().report();
|
|
|
+ final StoredProgress progressToStore = new StoredProgress(progress);
|
|
|
+ if (progressToStore.equals(previous)) {
|
|
|
+ LOGGER.debug("[{}] new progress is the same as previously persisted progress. Skipping storage.", jobId);
|
|
|
+ runnable.run();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
IndexRequest indexRequest = new IndexRequest(indexOrAlias)
|
|
|
.id(progressDocId)
|
|
|
.setRequireAlias(AnomalyDetectorsIndex.jobStateIndexWriteAlias().equals(indexOrAlias))
|
|
|
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
|
|
|
- List<PhaseProgress> progress = statsHolder.getProgressTracker().report();
|
|
|
try (XContentBuilder jsonBuilder = JsonXContent.contentBuilder()) {
|
|
|
LOGGER.debug("[{}] Persisting progress is: {}", jobId, progress);
|
|
|
- new StoredProgress(progress).toXContent(jsonBuilder, Payload.XContent.EMPTY_PARAMS);
|
|
|
+ progressToStore.toXContent(jsonBuilder, Payload.XContent.EMPTY_PARAMS);
|
|
|
indexRequest.source(jsonBuilder);
|
|
|
}
|
|
|
executeAsyncWithOrigin(client, ML_ORIGIN, IndexAction.INSTANCE, indexRequest, indexProgressDocListener);
|