@@ -255,95 +255,86 @@ public void testNewReplicaShardAllocationIfPrimaryShardOnRemoteNodeForRemoteStor
255
255
logger .info ("Initialize cluster" );
256
256
internalCluster ().startClusterManagerOnlyNode ();
257
257
258
- logger .info ("Add non-remote data node" );
259
- String nonRemoteNodeName = internalCluster ().startDataOnlyNode ();
258
+ logger .info ("Add non-remote data nodes" );
259
+ String nonRemoteNodeName1 = internalCluster ().startDataOnlyNode ();
260
+ String nonRemoteNodeName2 = internalCluster ().startDataOnlyNode ();
260
261
internalCluster ().validateClusterFormed ();
261
- DiscoveryNode nonRemoteNode = assertNodeInCluster (nonRemoteNodeName );
262
+ DiscoveryNode nonRemoteNode1 = assertNodeInCluster (nonRemoteNodeName1 );
263
+ DiscoveryNode nonRemoteNode2 = assertNodeInCluster (nonRemoteNodeName2 );
262
264
263
- logger .info ("Allocate primary shard on non-remote node " );
264
- createIndex (TEST_INDEX , 0 );
265
+ logger .info ("Allocate primary and replica shard on non-remote nodes " );
266
+ createIndex (TEST_INDEX , 1 );
265
267
ensureGreen (TEST_INDEX );
266
- assertAllocation (true , nonRemoteNode );
267
268
268
269
logger .info ("Set mixed mode" );
269
270
setClusterMode (MIXED .mode );
270
271
271
- logger .info ("Add remote data node " );
272
+ logger .info ("Add remote data nodes " );
272
273
setAddRemote (true );
273
274
String remoteNodeName1 = internalCluster ().startDataOnlyNode ();
275
+ String remoteNodeName2 = internalCluster ().startDataOnlyNode ();
274
276
internalCluster ().validateClusterFormed ();
275
277
DiscoveryNode remoteNode1 = assertNodeInCluster (remoteNodeName1 );
278
+ DiscoveryNode remoteNode2 = assertNodeInCluster (remoteNodeName2 );
276
279
277
280
logger .info ("Set remote_store direction" );
278
281
setDirection (REMOTE_STORE .direction );
279
282
280
283
logger .info ("Relocate primary shard to remote node" );
281
- includeAllNodes ();
284
+ DiscoveryNode initialPrimaryNode = primaryNodeName (TEST_INDEX ).equals (nonRemoteNodeName1 ) ? nonRemoteNode1 : nonRemoteNode2 ;
285
+ DiscoveryNode initialReplicaNode = initialPrimaryNode .equals (nonRemoteNode1 ) ? nonRemoteNode2 : nonRemoteNode1 ;
282
286
assertAcked (
283
287
internalCluster ().client ()
284
288
.admin ()
285
289
.cluster ()
286
290
.prepareReroute ()
287
- .add (new MoveAllocationCommand (TEST_INDEX , 0 , nonRemoteNodeName , remoteNodeName1 ))
291
+ .add (new MoveAllocationCommand (TEST_INDEX , 0 , initialPrimaryNode . getName () , remoteNodeName1 ))
288
292
.get ()
289
293
);
290
294
ensureGreen (TEST_INDEX );
291
295
assertAllocation (true , remoteNode1 );
292
296
293
- logger .info ("Verify expected decision for allocating a replica shard on non-remote node" );
294
- excludeAllNodes ();
295
- assertAcked (
296
- internalCluster ().client ()
297
- .admin ()
298
- .indices ()
299
- .prepareUpdateSettings ()
300
- .setIndices (TEST_INDEX )
301
- .setSettings (Settings .builder ().put (IndexMetadata .SETTING_NUMBER_OF_REPLICAS , 1 ).build ())
302
- .get ()
303
- );
304
- ensureYellowAndNoInitializingShards (TEST_INDEX );
305
- Decision decision = getDecisionForTargetNode (nonRemoteNode , false , true , false );
297
+ logger .info ("Verify expected decision for relocating a replica shard on non-remote node" );
298
+ Decision decision = getDecisionForTargetNode (initialPrimaryNode , false , true , true );
306
299
assertEquals (Decision .Type .YES , decision .type ());
307
300
assertEquals (
308
- "[remote_store migration_direction]: replica shard copy can be allocated to a non-remote node" ,
301
+ "[remote_store migration_direction]: replica shard copy can be relocated to a non-remote node" ,
309
302
decision .getExplanation ().toLowerCase (Locale .ROOT )
310
303
);
311
304
312
- logger .info ("Attempt free allocation of replica shard" );
313
- attemptAllocation (null );
314
-
315
- logger .info ("Verify allocation of replica shard on non-remote node" );
316
- ensureGreen (TEST_INDEX );
317
- assertAllocation (false , nonRemoteNode );
318
-
319
- logger .info ("Add another remote data node" );
320
- String remoteNodeName2 = internalCluster ().startDataOnlyNode ();
321
- internalCluster ().validateClusterFormed ();
322
- DiscoveryNode remoteNode2 = assertNodeInCluster (remoteNodeName2 );
323
-
324
- logger .info ("Verify expected decision for allocating a replica shard on remote node" );
325
- excludeAllNodes ();
305
+ logger .info ("Attempt relocation of replica shard to non-remote node" );
326
306
assertAcked (
327
307
internalCluster ().client ()
328
308
.admin ()
329
- .indices ()
330
- .prepareUpdateSettings ()
331
- .setIndices (TEST_INDEX )
332
- .setSettings (Settings .builder ().put (IndexMetadata .SETTING_NUMBER_OF_REPLICAS , 2 ).build ())
309
+ .cluster ()
310
+ .prepareReroute ()
311
+ .add (new MoveAllocationCommand (TEST_INDEX , 0 , initialReplicaNode .getName (), initialPrimaryNode .getName ()))
333
312
.get ()
334
313
);
335
- ensureYellowAndNoInitializingShards (TEST_INDEX );
336
- decision = getDecisionForTargetNode (remoteNode2 , false , true , false );
314
+
315
+ logger .info ("Verify relocation of replica shard to non-remote node" );
316
+ ensureGreen (TEST_INDEX );
317
+ assertAllocation (false , initialPrimaryNode );
318
+
319
+ logger .info ("Verify expected decision for relocating a replica shard on remote node" );
320
+ decision = getDecisionForTargetNode (remoteNode2 , false , true , true );
337
321
assertEquals (Decision .Type .YES , decision .type ());
338
322
assertEquals (
339
- "[remote_store migration_direction]: replica shard copy can be allocated to a remote node since primary shard copy has been migrated to remote" ,
323
+ "[remote_store migration_direction]: replica shard copy can be relocated to a remote node since primary shard copy has been migrated to remote" ,
340
324
decision .getExplanation ().toLowerCase (Locale .ROOT )
341
325
);
342
326
343
- logger .info ("Attempt free allocation of replica shard" );
344
- attemptAllocation (null );
327
+ logger .info ("Attempt relocation of replica shard to remote node" );
328
+ assertAcked (
329
+ internalCluster ().client ()
330
+ .admin ()
331
+ .cluster ()
332
+ .prepareReroute ()
333
+ .add (new MoveAllocationCommand (TEST_INDEX , 0 , initialPrimaryNode .getName (), remoteNodeName2 ))
334
+ .get ()
335
+ );
345
336
346
- logger .info ("Verify allocation of replica shard on remote node" );
337
+ logger .info ("Verify relocation of replica shard to non- remote node" );
347
338
ensureGreen (TEST_INDEX );
348
339
assertAllocation (false , remoteNode2 );
349
340
}
0 commit comments