mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-14 08:55:19 +00:00
[ML] Warn when lookback only datafeed retrieved no data (elastic/x-pack-elasticsearch#651)
When the datafeed indexes are concrete indexes, the search will throw IndexNotFoundException, thus a notification is being generated. However, when the indexes are patterns, the search does not fail. This commit adds a warning when a lookback-only datafeed retrieves no data as it is certain that the user misconfigured something and it's useful to make him aware of it. Original commit: elastic/x-pack-elasticsearch@e3490ea978
This commit is contained in:
parent
adc9808eff
commit
2d27e8ad81
@ -130,6 +130,11 @@ public class DatafeedJobRunner extends AbstractComponent {
|
||||
if (endTime == null) {
|
||||
holder.problemTracker.reportEmptyDataCount();
|
||||
next = e.nextDelayInMsSinceEpoch;
|
||||
} else {
|
||||
// Notify that a lookback-only run found no data
|
||||
String lookbackNoDataMsg = Messages.getMessage(Messages.JOB_AUDIT_DATAFEED_LOOKBACK_NO_DATA);
|
||||
logger.warn("[{}] {}", holder.datafeed.getJobId(), lookbackNoDataMsg);
|
||||
auditor.warning(holder.datafeed.getJobId(), lookbackNoDataMsg);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("Failed lookback import for job [" + holder.datafeed.getJobId() + "]", e);
|
||||
|
@ -47,6 +47,7 @@ public final class Messages {
|
||||
public static final String JOB_AUDIT_DATAFEED_CONTINUED_REALTIME = "job.audit.datafeed.continued.realtime";
|
||||
public static final String JOB_AUDIT_DATAFEED_STARTED_REALTIME = "job.audit.datafeed.started.realtime";
|
||||
public static final String JOB_AUDIT_DATAFEED_LOOKBACK_COMPLETED = "job.audit.datafeed.lookback.completed";
|
||||
public static final String JOB_AUDIT_DATAFEED_LOOKBACK_NO_DATA = "job.audit.datafeed.lookback.no.data";
|
||||
public static final String JOB_AUDIT_DATAFEED_STOPPED = "job.audit.datafeed.stopped";
|
||||
public static final String JOB_AUDIT_DATAFEED_NO_DATA = "job.audit.datafeed.no.data";
|
||||
public static final String JOB_AUDIR_DATAFEED_DATA_SEEN_AGAIN = "job.audit.datafeed.data.seen.again";
|
||||
|
@ -30,6 +30,7 @@ job.audit.datafeed.started.from.to = Datafeed started (from: {0} to: {1})
|
||||
job.audit.datafeed.started.realtime = Datafeed started in real-time
|
||||
job.audit.datafeed.continued.realtime = Datafeed continued in real-time
|
||||
job.audit.datafeed.lookback.completed = Datafeed lookback completed
|
||||
job.audit.datafeed.lookback.no.data = Datafeed lookback retrieved no data
|
||||
job.audit.datafeed.stopped = Datafeed stopped
|
||||
job.audit.datafeed.no.data = Datafeed has been retrieving no data for a while
|
||||
job.audit.datafeed.data.seen.again = Datafeed has started retrieving data again
|
||||
|
@ -161,6 +161,22 @@ public class DatafeedJobRunnerTests extends ESTestCase {
|
||||
}).when(client).execute(same(UpdatePersistentTaskStatusAction.INSTANCE), any(), any());
|
||||
}
|
||||
|
||||
public void testLookbackOnly_WarnsWhenNoDataIsRetrieved() throws Exception {
|
||||
DataExtractor dataExtractor = mock(DataExtractor.class);
|
||||
when(dataExtractorFactory.newExtractor(0L, 60000L)).thenReturn(dataExtractor);
|
||||
when(dataExtractor.hasNext()).thenReturn(true).thenReturn(false);
|
||||
when(dataExtractor.next()).thenReturn(Optional.empty());
|
||||
Consumer<Exception> handler = mockConsumer();
|
||||
StartDatafeedAction.DatafeedTask task = createDatafeedTask("datafeed_id", 0L, 60000L);
|
||||
datafeedJobRunner.run(task, handler);
|
||||
|
||||
verify(threadPool, times(1)).executor(MachineLearning.DATAFEED_RUNNER_THREAD_POOL_NAME);
|
||||
verify(threadPool, never()).schedule(any(), any(), any());
|
||||
verify(client, never()).execute(same(PostDataAction.INSTANCE), eq(new PostDataAction.Request("foo")));
|
||||
verify(client, never()).execute(same(FlushJobAction.INSTANCE), any());
|
||||
verify(auditor).warning("job_id", "Datafeed lookback retrieved no data");
|
||||
}
|
||||
|
||||
public void testStart_GivenNewlyCreatedJobLoopBack() throws Exception {
|
||||
DataExtractor dataExtractor = mock(DataExtractor.class);
|
||||
when(dataExtractorFactory.newExtractor(0L, 60000L)).thenReturn(dataExtractor);
|
||||
|
Loading…
x
Reference in New Issue
Block a user