@@ -222,7 +222,7 @@ public void testRealTime_GivenNonStoppingAnalysisProblem() throws Exception {
222
222
assertThat (datafeedManager .isRunning (task .getAllocationId ()), is (true ));
223
223
}
224
224
225
- public void testStart_GivenNewlyCreatedJobLoopBackAndRealtime () throws Exception {
225
+ public void testStart_GivenNewlyCreatedJobLookBackAndRealtime () throws Exception {
226
226
when (datafeedJob .runLookBack (anyLong (), anyLong ())).thenReturn (1L );
227
227
when (datafeedJob .runRealtime ()).thenReturn (1L );
228
228
@@ -282,8 +282,45 @@ public void testDatafeedTaskWaitsUntilJobIsOpened() {
282
282
verify (threadPool , times (1 )).executor (MachineLearning .DATAFEED_THREAD_POOL_NAME );
283
283
}
284
284
285
+ public void testDatafeedTaskWaitsUntilJobIsNotStale () {
286
+ PersistentTasksCustomMetaData .Builder tasksBuilder = PersistentTasksCustomMetaData .builder ();
287
+ addJobTask ("job_id" , "node_id" , JobState .OPENED , tasksBuilder , true );
288
+ ClusterState .Builder cs = ClusterState .builder (clusterService .state ())
289
+ .metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
290
+ when (clusterService .state ()).thenReturn (cs .build ());
291
+
292
+ Consumer <Exception > handler = mockConsumer ();
293
+ DatafeedTask task = createDatafeedTask ("datafeed_id" , 0L , 60000L );
294
+ datafeedManager .run (task , handler );
295
+
296
+ // Verify datafeed has not started running yet as job is stale (i.e. even though opened it is part way through relocating)
297
+ verify (threadPool , never ()).executor (MachineLearning .DATAFEED_THREAD_POOL_NAME );
298
+
299
+ tasksBuilder = PersistentTasksCustomMetaData .builder ();
300
+ addJobTask ("job_id" , "node_id" , JobState .OPENED , tasksBuilder , true );
301
+ addJobTask ("another_job" , "node_id" , JobState .OPENED , tasksBuilder );
302
+ ClusterState .Builder anotherJobCs = ClusterState .builder (clusterService .state ())
303
+ .metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
304
+
305
+ capturedClusterStateListener .getValue ().clusterChanged (new ClusterChangedEvent ("_source" , anotherJobCs .build (), cs .build ()));
306
+
307
+ // Still no run
308
+ verify (threadPool , never ()).executor (MachineLearning .DATAFEED_THREAD_POOL_NAME );
309
+
310
+ tasksBuilder = PersistentTasksCustomMetaData .builder ();
311
+ addJobTask ("job_id" , "node_id" , JobState .OPENED , tasksBuilder );
312
+ ClusterState .Builder jobOpenedCs = ClusterState .builder (clusterService .state ())
313
+ .metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
314
+
315
+ capturedClusterStateListener .getValue ().clusterChanged (
316
+ new ClusterChangedEvent ("_source" , jobOpenedCs .build (), anotherJobCs .build ()));
317
+
318
+ // Now it should run as the job state chanded to OPENED
319
+ verify (threadPool , times (1 )).executor (MachineLearning .DATAFEED_THREAD_POOL_NAME );
320
+ }
321
+
285
322
public void testDatafeedTaskStopsBecauseJobFailedWhileOpening () {
286
- PersistentTasksCustomMetaData .Builder tasksBuilder = PersistentTasksCustomMetaData .builder ();
323
+ PersistentTasksCustomMetaData .Builder tasksBuilder = PersistentTasksCustomMetaData .builder ();
287
324
addJobTask ("job_id" , "node_id" , JobState .OPENING , tasksBuilder );
288
325
ClusterState .Builder cs = ClusterState .builder (clusterService .state ())
289
326
.metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
@@ -296,7 +333,7 @@ public void testDatafeedTaskStopsBecauseJobFailedWhileOpening() {
296
333
// Verify datafeed has not started running yet as job is still opening
297
334
verify (threadPool , never ()).executor (MachineLearning .DATAFEED_THREAD_POOL_NAME );
298
335
299
- tasksBuilder = PersistentTasksCustomMetaData .builder ();
336
+ tasksBuilder = PersistentTasksCustomMetaData .builder ();
300
337
addJobTask ("job_id" , "node_id" , JobState .FAILED , tasksBuilder );
301
338
ClusterState .Builder updatedCs = ClusterState .builder (clusterService .state ())
302
339
.metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
@@ -309,7 +346,7 @@ public void testDatafeedTaskStopsBecauseJobFailedWhileOpening() {
309
346
}
310
347
311
348
public void testDatafeedGetsStoppedWhileWaitingForJobToOpen () {
312
- PersistentTasksCustomMetaData .Builder tasksBuilder = PersistentTasksCustomMetaData .builder ();
349
+ PersistentTasksCustomMetaData .Builder tasksBuilder = PersistentTasksCustomMetaData .builder ();
313
350
addJobTask ("job_id" , "node_id" , JobState .OPENING , tasksBuilder );
314
351
ClusterState .Builder cs = ClusterState .builder (clusterService .state ())
315
352
.metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
@@ -326,7 +363,7 @@ public void testDatafeedGetsStoppedWhileWaitingForJobToOpen() {
326
363
datafeedManager .stopDatafeed (task , "test" , StopDatafeedAction .DEFAULT_TIMEOUT );
327
364
328
365
// Update job state to opened
329
- tasksBuilder = PersistentTasksCustomMetaData .builder ();
366
+ tasksBuilder = PersistentTasksCustomMetaData .builder ();
330
367
addJobTask ("job_id" , "node_id" , JobState .OPENED , tasksBuilder );
331
368
ClusterState .Builder updatedCs = ClusterState .builder (clusterService .state ())
332
369
.metaData (new MetaData .Builder ().putCustom (PersistentTasksCustomMetaData .TYPE , tasksBuilder .build ()));
0 commit comments