Skip to content

Commit 197d5e7

Browse files
authored
[ML] Stop timing stats failure propagation (#49495)
1 parent e9941c2 commit 197d5e7

File tree

4 files changed

+28
-19
lines changed

4 files changed

+28
-19
lines changed

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedJob.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,7 @@ public Integer getMaxEmptySearches() {
117117
}
118118

119119
public void finishReportingTimingStats() {
120-
try {
121-
timingStatsReporter.finishReporting();
122-
} catch (Exception e) {
123-
// We don't want the exception to propagate out of this method as it can leave the datafeed in the "stopping" state forever.
124-
// Since persisting datafeed timing stats is not critical, we just log a warning here.
125-
LOGGER.warn("[{}] Datafeed timing stats could not be reported due to: {}", jobId, e);
126-
}
120+
timingStatsReporter.finishReporting();
127121
}
128122

129123
Long runLookBack(long startTime, Long endTime) throws Exception {

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporter.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
package org.elasticsearch.xpack.ml.datafeed;
77

8+
import org.apache.logging.log4j.LogManager;
9+
import org.apache.logging.log4j.Logger;
10+
import org.apache.logging.log4j.message.ParameterizedMessage;
811
import org.elasticsearch.action.support.WriteRequest;
912
import org.elasticsearch.common.unit.TimeValue;
1013
import org.elasticsearch.xpack.core.ml.datafeed.DatafeedTimingStats;
@@ -20,6 +23,7 @@
2023
*/
2124
public class DatafeedTimingStatsReporter {
2225

26+
private static final Logger LOGGER = LogManager.getLogger(DatafeedTimingStatsReporter.class);
2327
/** Interface used for persisting current timing stats to the results index. */
2428
@FunctionalInterface
2529
public interface DatafeedTimingStatsPersister {
@@ -96,7 +100,14 @@ private void flushIfDifferSignificantly() {
96100
private void flush(WriteRequest.RefreshPolicy refreshPolicy) {
97101
persistedTimingStats = new DatafeedTimingStats(currentTimingStats);
98102
if (allowedPersisting) {
99-
persister.persistDatafeedTimingStats(persistedTimingStats, refreshPolicy);
103+
try {
104+
persister.persistDatafeedTimingStats(persistedTimingStats, refreshPolicy);
105+
} catch (Exception ex) {
106+
// Since persisting datafeed timing stats is not critical, we just log a warning here.
107+
LOGGER.warn(
108+
() -> new ParameterizedMessage("[{}] failed to report datafeed timing stats", currentTimingStats.getJobId()),
109+
ex);
110+
}
100111
}
101112
}
102113

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/DatafeedJobTests.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.elasticsearch.client.Client;
1313
import org.elasticsearch.common.bytes.BytesArray;
1414
import org.elasticsearch.common.settings.Settings;
15-
import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException;
1615
import org.elasticsearch.common.util.concurrent.ThreadContext;
1716
import org.elasticsearch.common.xcontent.ToXContent;
1817
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -61,7 +60,6 @@
6160
import static org.mockito.Matchers.eq;
6261
import static org.mockito.Matchers.same;
6362
import static org.mockito.Mockito.atMost;
64-
import static org.mockito.Mockito.doThrow;
6563
import static org.mockito.Mockito.mock;
6664
import static org.mockito.Mockito.never;
6765
import static org.mockito.Mockito.times;
@@ -456,15 +454,6 @@ public void testFlushAnalysisProblemIsConflict() {
456454
assertThat(analysisProblemException.shouldStop, is(true));
457455
}
458456

459-
public void testFinishReportingTimingStats() {
460-
doThrow(new EsRejectedExecutionException()).when(timingStatsReporter).finishReporting();
461-
462-
long frequencyMs = 100;
463-
long queryDelayMs = 1000;
464-
DatafeedJob datafeedJob = createDatafeedJob(frequencyMs, queryDelayMs, 1000, -1, randomBoolean());
465-
datafeedJob.finishReportingTimingStats();
466-
}
467-
468457
private DatafeedJob createDatafeedJob(long frequencyMs, long queryDelayMs, long latestFinalBucketEndTimeMs,
469458
long latestRecordTimeMs, boolean haveSeenDataPreviously) {
470459
Supplier<Long> currentTimeSupplier = () -> currentTime;

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/DatafeedTimingStatsReporterTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
package org.elasticsearch.xpack.ml.datafeed;
77

8+
import org.elasticsearch.ElasticsearchException;
89
import org.elasticsearch.action.support.WriteRequest.RefreshPolicy;
910
import org.elasticsearch.common.unit.TimeValue;
1011
import org.elasticsearch.test.ESTestCase;
@@ -18,8 +19,10 @@
1819
import java.sql.Date;
1920
import java.time.Instant;
2021

22+
import static org.elasticsearch.mock.orig.Mockito.doThrow;
2123
import static org.hamcrest.Matchers.equalTo;
2224
import static org.hamcrest.Matchers.is;
25+
import static org.mockito.Matchers.any;
2326
import static org.mockito.Mockito.inOrder;
2427
import static org.mockito.Mockito.mock;
2528
import static org.mockito.Mockito.verify;
@@ -176,6 +179,18 @@ public void testTimingStatsDifferSignificantly() {
176179
is(true));
177180
}
178181

182+
public void testFinishReportingTimingStatsException() {
183+
doThrow(new ElasticsearchException("BOOM")).when(timingStatsPersister).persistDatafeedTimingStats(any(), any());
184+
DatafeedTimingStatsReporter reporter = createReporter(new DatafeedTimingStats(JOB_ID));
185+
186+
try {
187+
reporter.reportDataCounts(createDataCounts(0, TIMESTAMP));
188+
reporter.finishReporting();
189+
} catch (ElasticsearchException ex) {
190+
fail("Should not have failed with: " + ex.getDetailedMessage());
191+
}
192+
}
193+
179194
private DatafeedTimingStatsReporter createReporter(DatafeedTimingStats timingStats) {
180195
return new DatafeedTimingStatsReporter(timingStats, timingStatsPersister);
181196
}

0 commit comments

Comments
 (0)