From e21deae535033361d7c23cd4596a3e38ddeffefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Witek?= Date: Mon, 9 Sep 2019 21:01:27 +0200 Subject: [PATCH] Disallow persisting any documents when datafeed is isolated (#46485) (#46490) --- .../elasticsearch/xpack/ml/datafeed/DatafeedJob.java | 1 + .../ml/datafeed/DatafeedTimingStatsReporter.java | 12 +++++++++++- .../datafeed/DatafeedTimingStatsReporterTests.java | 9 +++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedJob.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedJob.java index 85ed2f531f8..257a1947528 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedJob.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedJob.java @@ -97,6 +97,7 @@ class DatafeedJob { void isolate() { isIsolated = true; + timingStatsReporter.disallowPersisting(); } boolean isIsolated() { diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporter.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporter.java index 283b667f7b8..b11761541df 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporter.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporter.java @@ -33,12 +33,15 @@ public class DatafeedTimingStatsReporter { private volatile DatafeedTimingStats currentTimingStats; /** Object used to persist current timing stats. */ private final DatafeedTimingStatsPersister persister; + /** Whether or not timing stats will be persisted by the persister object. */ + private volatile boolean allowedPersisting; public DatafeedTimingStatsReporter(DatafeedTimingStats timingStats, DatafeedTimingStatsPersister persister) { Objects.requireNonNull(timingStats); this.persistedTimingStats = new DatafeedTimingStats(timingStats); this.currentTimingStats = new DatafeedTimingStats(timingStats); this.persister = Objects.requireNonNull(persister); + this.allowedPersisting = true; } /** Gets current timing stats. */ @@ -79,6 +82,11 @@ public class DatafeedTimingStatsReporter { } } + /** Disallows persisting timing stats. After this call finishes, no document will be persisted. */ + public void disallowPersisting() { + allowedPersisting = false; + } + private void flushIfDifferSignificantly() { if (differSignificantly(currentTimingStats, persistedTimingStats)) { flush(WriteRequest.RefreshPolicy.NONE); @@ -87,7 +95,9 @@ public class DatafeedTimingStatsReporter { private void flush(WriteRequest.RefreshPolicy refreshPolicy) { persistedTimingStats = new DatafeedTimingStats(currentTimingStats); - persister.persistDatafeedTimingStats(persistedTimingStats, refreshPolicy); + if (allowedPersisting) { + persister.persistDatafeedTimingStats(persistedTimingStats, refreshPolicy); + } } /** diff --git a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporterTests.java b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporterTests.java index fff735418be..62a4b4ef4d4 100644 --- a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporterTests.java +++ b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporterTests.java @@ -132,6 +132,15 @@ public class DatafeedTimingStatsReporterTests extends ESTestCase { verifyNoMoreInteractions(timingStatsPersister); } + public void testDisallowPersisting() { + DatafeedTimingStatsReporter reporter = createReporter(createDatafeedTimingStats(JOB_ID, 0, 0, 0.0)); + reporter.disallowPersisting(); + // This call would normally trigger persisting but because of the "disallowPersisting" call above it will not. + reporter.reportSearchDuration(ONE_SECOND); + + verifyZeroInteractions(timingStatsPersister); + } + public void testTimingStatsDifferSignificantly() { assertThat( DatafeedTimingStatsReporter.differSignificantly(