49
49
import java .util .concurrent .atomic .AtomicReference ;
50
50
51
51
import static org .hamcrest .Matchers .empty ;
52
+ import static org .hamcrest .Matchers .sameInstance ;
52
53
import static org .hamcrest .core .IsEqual .equalTo ;
53
54
import static org .mockito .Matchers .any ;
54
55
import static org .mockito .Matchers .anyLong ;
55
56
import static org .mockito .Matchers .anyString ;
56
57
import static org .mockito .Matchers .eq ;
57
58
import static org .mockito .Mockito .mock ;
59
+ import static org .mockito .Mockito .verify ;
58
60
import static org .mockito .Mockito .when ;
59
61
60
62
public class PersistentTasksNodeServiceTests extends ESTestCase {
@@ -167,6 +169,41 @@ public void testStartTask() throws Exception {
167
169
168
170
}
169
171
172
+ public void testParamsStatusAndNodeTaskAreDelegated () throws Exception {
173
+ PersistentTasksService persistentTasksService = mock (PersistentTasksService .class );
174
+ @ SuppressWarnings ("unchecked" ) PersistentTasksExecutor <TestParams > action = mock (PersistentTasksExecutor .class );
175
+ when (action .getExecutor ()).thenReturn (ThreadPool .Names .SAME );
176
+ when (action .getTaskName ()).thenReturn (TestPersistentTasksExecutor .NAME );
177
+ TaskId parentId = new TaskId ("cluster" , 1 );
178
+ AllocatedPersistentTask nodeTask = new TestPersistentTasksPlugin .TestTask (0 , "persistent" , "test" , "" , parentId );
179
+ when (action .createTask (anyLong (), anyString (), anyString (), eq (parentId ), any ())).thenReturn (nodeTask );
180
+ PersistentTasksExecutorRegistry registry = new PersistentTasksExecutorRegistry (Settings .EMPTY , Collections .singletonList (action ));
181
+
182
+ MockExecutor executor = new MockExecutor ();
183
+ PersistentTasksNodeService coordinator = new PersistentTasksNodeService (Settings .EMPTY , persistentTasksService ,
184
+ registry , new TaskManager (Settings .EMPTY ), executor );
185
+
186
+ ClusterState state = createInitialClusterState (1 , Settings .EMPTY );
187
+
188
+ Task .Status status = new TestPersistentTasksPlugin .Status ("_test_phase" );
189
+ PersistentTasksCustomMetaData .Builder tasks = PersistentTasksCustomMetaData .builder ();
190
+ String taskId = UUIDs .base64UUID ();
191
+ TestParams taskParams = new TestParams ("other_0" );
192
+ tasks .addTask (taskId , TestPersistentTasksExecutor .NAME , taskParams ,
193
+ new Assignment ("this_node" , "test assignment on other node" ));
194
+ tasks .updateTaskStatus (taskId , status );
195
+ MetaData .Builder metaData = MetaData .builder (state .metaData ());
196
+ metaData .putCustom (PersistentTasksCustomMetaData .TYPE , tasks .build ());
197
+ ClusterState newClusterState = ClusterState .builder (state ).metaData (metaData ).build ();
198
+
199
+ coordinator .clusterChanged (new ClusterChangedEvent ("test" , newClusterState , state ));
200
+
201
+ assertThat (executor .size (), equalTo (1 ));
202
+ assertThat (executor .get (0 ).params , sameInstance (taskParams ));
203
+ assertThat (executor .get (0 ).status , sameInstance (status ));
204
+ assertThat (executor .get (0 ).task , sameInstance (nodeTask ));
205
+ }
206
+
170
207
public void testTaskCancellation () {
171
208
AtomicLong capturedTaskId = new AtomicLong ();
172
209
AtomicReference <ActionListener <CancelTasksResponse >> capturedListener = new AtomicReference <>();
@@ -271,11 +308,13 @@ private ClusterState removeTask(ClusterState state, String taskId) {
271
308
private class Execution {
272
309
private final PersistentTaskParams params ;
273
310
private final AllocatedPersistentTask task ;
311
+ private final Task .Status status ;
274
312
private final PersistentTasksExecutor <?> holder ;
275
313
276
- Execution (PersistentTaskParams params , AllocatedPersistentTask task , PersistentTasksExecutor <?> holder ) {
314
+ Execution (PersistentTaskParams params , AllocatedPersistentTask task , Task . Status status , PersistentTasksExecutor <?> holder ) {
277
315
this .params = params ;
278
316
this .task = task ;
317
+ this .status = status ;
279
318
this .holder = holder ;
280
319
}
281
320
}
@@ -288,9 +327,11 @@ private class MockExecutor extends NodePersistentTasksExecutor {
288
327
}
289
328
290
329
@ Override
291
- public <Params extends PersistentTaskParams > void executeTask (Params params , AllocatedPersistentTask task ,
330
+ public <Params extends PersistentTaskParams > void executeTask (Params params ,
331
+ Task .Status status ,
332
+ AllocatedPersistentTask task ,
292
333
PersistentTasksExecutor <Params > executor ) {
293
- executions .add (new Execution (params , task , executor ));
334
+ executions .add (new Execution (params , task , status , executor ));
294
335
}
295
336
296
337
public Execution get (int i ) {
0 commit comments