2222import com .carrotsearch .hppc .cursors .ObjectCursor ;
2323import org .apache .lucene .index .CorruptIndexException ;
2424import org .elasticsearch .Version ;
25- import org .elasticsearch .cluster .action .shard .ShardStateAction .FailedShardEntry ;
2625import org .elasticsearch .cluster .ClusterName ;
2726import org .elasticsearch .cluster .ClusterState ;
2827import org .elasticsearch .cluster .ClusterStateTaskExecutor ;
2928import org .elasticsearch .cluster .ESAllocationTestCase ;
29+ import org .elasticsearch .cluster .action .shard .ShardStateAction .FailedShardEntry ;
3030import org .elasticsearch .cluster .metadata .IndexMetaData ;
3131import org .elasticsearch .cluster .metadata .MetaData ;
3232import org .elasticsearch .cluster .node .DiscoveryNodes ;
4343import org .elasticsearch .cluster .routing .allocation .StaleShard ;
4444import org .elasticsearch .cluster .routing .allocation .decider .ClusterRebalanceAllocationDecider ;
4545import org .elasticsearch .common .UUIDs ;
46+ import org .elasticsearch .common .collect .Tuple ;
4647import org .elasticsearch .common .settings .Settings ;
4748import org .elasticsearch .common .util .set .Sets ;
4849import org .elasticsearch .index .Index ;
5354import java .util .Arrays ;
5455import java .util .Collections ;
5556import java .util .List ;
56- import java .util .Map ;
5757import java .util .Set ;
58- import java .util .function .Function ;
5958import java .util .stream .Collectors ;
6059import java .util .stream .IntStream ;
6160
@@ -131,10 +130,15 @@ ClusterState applyFailedShards(ClusterState currentState, List<FailedShard> fail
131130 tasks .addAll (failingTasks );
132131 tasks .addAll (nonExistentTasks );
133132 ClusterStateTaskExecutor .ClusterTasksResult <FailedShardEntry > result = failingExecutor .execute (currentState , tasks );
134- Map <FailedShardEntry , ClusterStateTaskExecutor .TaskResult > taskResultMap =
135- failingTasks .stream ().collect (Collectors .toMap (Function .identity (), task -> ClusterStateTaskExecutor .TaskResult .failure (new RuntimeException ("simulated applyFailedShards failure" ))));
136- taskResultMap .putAll (nonExistentTasks .stream ().collect (Collectors .toMap (Function .identity (), task -> ClusterStateTaskExecutor .TaskResult .success ())));
137- assertTaskResults (taskResultMap , result , currentState , false );
133+ List <Tuple <FailedShardEntry , ClusterStateTaskExecutor .TaskResult >> taskResultList = new ArrayList <>();
134+ for (FailedShardEntry failingTask : failingTasks ) {
135+ taskResultList .add (Tuple .tuple (failingTask ,
136+ ClusterStateTaskExecutor .TaskResult .failure (new RuntimeException ("simulated applyFailedShards failure" ))));
137+ }
138+ for (FailedShardEntry nonExistentTask : nonExistentTasks ) {
139+ taskResultList .add (Tuple .tuple (nonExistentTask , ClusterStateTaskExecutor .TaskResult .success ()));
140+ }
141+ assertTaskResults (taskResultList , result , currentState , false );
138142 }
139143
140144 public void testIllegalShardFailureRequests () throws Exception {
@@ -147,14 +151,14 @@ public void testIllegalShardFailureRequests() throws Exception {
147151 tasks .add (new FailedShardEntry (failingTask .shardId , failingTask .allocationId ,
148152 randomIntBetween (1 , (int ) primaryTerm - 1 ), failingTask .message , failingTask .failure , randomBoolean ()));
149153 }
150- Map < FailedShardEntry , ClusterStateTaskExecutor .TaskResult > taskResultMap =
151- tasks . stream (). collect ( Collectors . toMap (
152- Function . identity (),
153- task -> ClusterStateTaskExecutor . TaskResult . failure ( new ShardStateAction . NoLongerPrimaryShardException ( task .shardId ,
154- "primary term [" + task .primaryTerm + "] did not match current primary term [" +
155- currentState . metaData (). index ( task . shardId . getIndex ()). primaryTerm ( task . shardId . id ()) + "]" )) ));
154+ List < Tuple < FailedShardEntry , ClusterStateTaskExecutor .TaskResult >> taskResultList = tasks . stream ()
155+ . map ( task -> Tuple . tuple ( task , ClusterStateTaskExecutor . TaskResult . failure (
156+ new ShardStateAction . NoLongerPrimaryShardException ( task . shardId , "primary term ["
157+ + task .primaryTerm + "] did not match current primary term ["
158+ + currentState . metaData (). index ( task .shardId . getIndex ()). primaryTerm ( task . shardId . id ()) + "]" ))))
159+ . collect ( Collectors . toList ( ));
156160 ClusterStateTaskExecutor .ClusterTasksResult <FailedShardEntry > result = executor .execute (currentState , tasks );
157- assertTaskResults (taskResultMap , result , currentState , false );
161+ assertTaskResults (taskResultList , result , currentState , false );
158162 }
159163
160164 public void testMarkAsStaleWhenFailingShard () throws Exception {
@@ -251,44 +255,44 @@ private static void assertTasksSuccessful(
251255 ClusterState clusterState ,
252256 boolean clusterStateChanged
253257 ) {
254- Map < ShardStateAction . FailedShardEntry , ClusterStateTaskExecutor .TaskResult > taskResultMap =
255- tasks . stream (). collect ( Collectors . toMap ( Function . identity (), task -> ClusterStateTaskExecutor .TaskResult .success ()));
256- assertTaskResults (taskResultMap , result , clusterState , clusterStateChanged );
258+ List < Tuple < FailedShardEntry , ClusterStateTaskExecutor .TaskResult >> taskResultList = tasks . stream ()
259+ . map ( t -> Tuple . tuple ( t , ClusterStateTaskExecutor .TaskResult .success ())). collect ( Collectors . toList ( ));
260+ assertTaskResults (taskResultList , result , clusterState , clusterStateChanged );
257261 }
258262
259263 private static void assertTaskResults (
260- Map < ShardStateAction .FailedShardEntry , ClusterStateTaskExecutor .TaskResult > taskResultMap ,
264+ List < Tuple < ShardStateAction .FailedShardEntry , ClusterStateTaskExecutor .TaskResult >> taskResultList ,
261265 ClusterStateTaskExecutor .ClusterTasksResult <ShardStateAction .FailedShardEntry > result ,
262266 ClusterState clusterState ,
263267 boolean clusterStateChanged
264268 ) {
265269 // there should be as many task results as tasks
266- assertEquals (taskResultMap .size (), result .executionResults .size ());
270+ assertEquals (taskResultList .size (), result .executionResults .size ());
267271
268- for (Map . Entry < ShardStateAction . FailedShardEntry , ClusterStateTaskExecutor .TaskResult > entry : taskResultMap . entrySet () ) {
272+ for (Tuple < FailedShardEntry , ClusterStateTaskExecutor .TaskResult > entry : taskResultList ) {
269273 // every task should have a corresponding task result
270- assertTrue (result .executionResults .containsKey (entry .getKey ()));
274+ assertTrue (result .executionResults .containsKey (entry .v1 ()));
271275
272276 // the task results are as expected
273- assertEquals (entry .getKey ().toString (), entry .getValue ().isSuccess (), result .executionResults .get (entry .getKey ()).isSuccess ());
277+ assertEquals (entry .v1 ().toString (), entry .v2 ().isSuccess (), result .executionResults .get (entry .v1 ()).isSuccess ());
274278 }
275279
276280 List <ShardRouting > shards = clusterState .getRoutingTable ().allShards ();
277- for (Map . Entry < ShardStateAction . FailedShardEntry , ClusterStateTaskExecutor .TaskResult > entry : taskResultMap . entrySet () ) {
278- if (entry .getValue ().isSuccess ()) {
281+ for (Tuple < FailedShardEntry , ClusterStateTaskExecutor .TaskResult > entry : taskResultList ) {
282+ if (entry .v2 ().isSuccess ()) {
279283 // the shard was successfully failed and so should not be in the routing table
280284 for (ShardRouting shard : shards ) {
281285 if (shard .assignedToNode ()) {
282- assertFalse ("entry key " + entry .getKey () + ", shard routing " + shard ,
283- entry .getKey ().getShardId ().equals (shard .shardId ()) &&
284- entry .getKey ().getAllocationId ().equals (shard .allocationId ().getId ()));
286+ assertFalse ("entry key " + entry .v1 () + ", shard routing " + shard ,
287+ entry .v1 ().getShardId ().equals (shard .shardId ()) &&
288+ entry .v1 ().getAllocationId ().equals (shard .allocationId ().getId ()));
285289 }
286290 }
287291 } else {
288292 // check we saw the expected failure
289- ClusterStateTaskExecutor .TaskResult actualResult = result .executionResults .get (entry .getKey ());
290- assertThat (actualResult .getFailure (), instanceOf (entry .getValue ().getFailure ().getClass ()));
291- assertThat (actualResult .getFailure ().getMessage (), equalTo (entry .getValue ().getFailure ().getMessage ()));
293+ ClusterStateTaskExecutor .TaskResult actualResult = result .executionResults .get (entry .v1 ());
294+ assertThat (actualResult .getFailure (), instanceOf (entry .v2 ().getFailure ().getClass ()));
295+ assertThat (actualResult .getFailure ().getMessage (), equalTo (entry .v2 ().getFailure ().getMessage ()));
292296 }
293297 }
294298
0 commit comments