@@ -245,20 +245,27 @@ public void testCloseUnassignedFailedJobAndStopUnassignedStoppingDatafeed() thro
245
245
// stopping.
246
246
PersistentTasksCustomMetaData tasks = clusterService ().state ().getMetaData ().custom (PersistentTasksCustomMetaData .TYPE );
247
247
PersistentTasksCustomMetaData .PersistentTask <?> task = MlTasks .getDatafeedTask (datafeedId , tasks );
248
+
249
+ // It is possible that the datafeed has already detected the job failure and
250
+ // terminated itself. In this happens there is no persistent task to stop
251
+ assumeFalse ("The datafeed task is null most likely because the datafeed detected the job had failed. " +
252
+ "This is expected to happen extremely rarely but the test cannot continue in these circumstances." , task == null );
253
+
248
254
UpdatePersistentTaskStatusAction .Request updatePersistentTaskStatusRequest =
249
- new UpdatePersistentTaskStatusAction .Request (task .getId (), task .getAllocationId (), DatafeedState .STOPPING );
255
+ new UpdatePersistentTaskStatusAction .Request (task .getId (), task .getAllocationId (), DatafeedState .STOPPING );
250
256
PersistentTaskResponse updatePersistentTaskStatusResponse =
251
- client ().execute (UpdatePersistentTaskStatusAction .INSTANCE , updatePersistentTaskStatusRequest ).actionGet ();
257
+ client ().execute (UpdatePersistentTaskStatusAction .INSTANCE , updatePersistentTaskStatusRequest ).actionGet ();
252
258
assertNotNull (updatePersistentTaskStatusResponse .getTask ());
253
259
254
260
// Confirm the datafeed state is now stopping - this may take a while to update in cluster state
255
261
assertBusy (() -> {
256
262
GetDatafeedsStatsAction .Request datafeedStatsRequest = new GetDatafeedsStatsAction .Request (datafeedId );
257
263
GetDatafeedsStatsAction .Response datafeedStatsResponse =
258
- client ().execute (GetDatafeedsStatsAction .INSTANCE , datafeedStatsRequest ).actionGet ();
264
+ client ().execute (GetDatafeedsStatsAction .INSTANCE , datafeedStatsRequest ).actionGet ();
259
265
assertEquals (DatafeedState .STOPPING , datafeedStatsResponse .getResponse ().results ().get (0 ).getDatafeedState ());
260
266
});
261
267
268
+
262
269
// Stop the node running the failed job/stopping datafeed
263
270
ensureGreen (); // replicas must be assigned, otherwise we could lose a whole index
264
271
internalCluster ().stopRandomNode (settings -> jobNode .getName ().equals (settings .get ("node.name" )));
0 commit comments