Disallow persisting any documents when datafeed is isolated (#46485) (#46490)

This commit is contained in:
Przemysław Witek 2019-09-09 21:01:27 +02:00 committed by GitHub
parent b59ecde041
commit e21deae535
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 1 deletions

View File

@ -97,6 +97,7 @@ class DatafeedJob {
void isolate() { void isolate() {
isIsolated = true; isIsolated = true;
timingStatsReporter.disallowPersisting();
} }
boolean isIsolated() { boolean isIsolated() {

View File

@ -33,12 +33,15 @@ public class DatafeedTimingStatsReporter {
private volatile DatafeedTimingStats currentTimingStats; private volatile DatafeedTimingStats currentTimingStats;
/** Object used to persist current timing stats. */ /** Object used to persist current timing stats. */
private final DatafeedTimingStatsPersister persister; 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) { public DatafeedTimingStatsReporter(DatafeedTimingStats timingStats, DatafeedTimingStatsPersister persister) {
Objects.requireNonNull(timingStats); Objects.requireNonNull(timingStats);
this.persistedTimingStats = new DatafeedTimingStats(timingStats); this.persistedTimingStats = new DatafeedTimingStats(timingStats);
this.currentTimingStats = new DatafeedTimingStats(timingStats); this.currentTimingStats = new DatafeedTimingStats(timingStats);
this.persister = Objects.requireNonNull(persister); this.persister = Objects.requireNonNull(persister);
this.allowedPersisting = true;
} }
/** Gets current timing stats. */ /** 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() { private void flushIfDifferSignificantly() {
if (differSignificantly(currentTimingStats, persistedTimingStats)) { if (differSignificantly(currentTimingStats, persistedTimingStats)) {
flush(WriteRequest.RefreshPolicy.NONE); flush(WriteRequest.RefreshPolicy.NONE);
@ -87,7 +95,9 @@ public class DatafeedTimingStatsReporter {
private void flush(WriteRequest.RefreshPolicy refreshPolicy) { private void flush(WriteRequest.RefreshPolicy refreshPolicy) {
persistedTimingStats = new DatafeedTimingStats(currentTimingStats); persistedTimingStats = new DatafeedTimingStats(currentTimingStats);
persister.persistDatafeedTimingStats(persistedTimingStats, refreshPolicy); if (allowedPersisting) {
persister.persistDatafeedTimingStats(persistedTimingStats, refreshPolicy);
}
} }
/** /**

View File

@ -132,6 +132,15 @@ public class DatafeedTimingStatsReporterTests extends ESTestCase {
verifyNoMoreInteractions(timingStatsPersister); 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() { public void testTimingStatsDifferSignificantly() {
assertThat( assertThat(
DatafeedTimingStatsReporter.differSignificantly( DatafeedTimingStatsReporter.differSignificantly(