22
22
import com .carrotsearch .hppc .cursors .ObjectCursor ;
23
23
import org .apache .lucene .index .CorruptIndexException ;
24
24
import org .elasticsearch .Version ;
25
- import org .elasticsearch .cluster .action .shard .ShardStateAction .FailedShardEntry ;
26
25
import org .elasticsearch .cluster .ClusterName ;
27
26
import org .elasticsearch .cluster .ClusterState ;
28
27
import org .elasticsearch .cluster .ClusterStateTaskExecutor ;
29
28
import org .elasticsearch .cluster .ESAllocationTestCase ;
29
+ import org .elasticsearch .cluster .action .shard .ShardStateAction .FailedShardEntry ;
30
30
import org .elasticsearch .cluster .metadata .IndexMetaData ;
31
31
import org .elasticsearch .cluster .metadata .MetaData ;
32
32
import org .elasticsearch .cluster .node .DiscoveryNodes ;
43
43
import org .elasticsearch .cluster .routing .allocation .StaleShard ;
44
44
import org .elasticsearch .cluster .routing .allocation .decider .ClusterRebalanceAllocationDecider ;
45
45
import org .elasticsearch .common .UUIDs ;
46
+ import org .elasticsearch .common .collect .Tuple ;
46
47
import org .elasticsearch .common .settings .Settings ;
47
48
import org .elasticsearch .common .util .set .Sets ;
48
49
import org .elasticsearch .index .Index ;
53
54
import java .util .Arrays ;
54
55
import java .util .Collections ;
55
56
import java .util .List ;
56
- import java .util .Map ;
57
57
import java .util .Set ;
58
- import java .util .function .Function ;
59
58
import java .util .stream .Collectors ;
60
59
import java .util .stream .IntStream ;
61
60
@@ -131,10 +130,15 @@ ClusterState applyFailedShards(ClusterState currentState, List<FailedShard> fail
131
130
tasks .addAll (failingTasks );
132
131
tasks .addAll (nonExistentTasks );
133
132
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 );
138
142
}
139
143
140
144
public void testIllegalShardFailureRequests () throws Exception {
@@ -147,14 +151,14 @@ public void testIllegalShardFailureRequests() throws Exception {
147
151
tasks .add (new FailedShardEntry (failingTask .shardId , failingTask .allocationId ,
148
152
randomIntBetween (1 , (int ) primaryTerm - 1 ), failingTask .message , failingTask .failure , randomBoolean ()));
149
153
}
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 ( ));
156
160
ClusterStateTaskExecutor .ClusterTasksResult <FailedShardEntry > result = executor .execute (currentState , tasks );
157
- assertTaskResults (taskResultMap , result , currentState , false );
161
+ assertTaskResults (taskResultList , result , currentState , false );
158
162
}
159
163
160
164
public void testMarkAsStaleWhenFailingShard () throws Exception {
@@ -251,44 +255,44 @@ private static void assertTasksSuccessful(
251
255
ClusterState clusterState ,
252
256
boolean clusterStateChanged
253
257
) {
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 );
257
261
}
258
262
259
263
private static void assertTaskResults (
260
- Map < ShardStateAction .FailedShardEntry , ClusterStateTaskExecutor .TaskResult > taskResultMap ,
264
+ List < Tuple < ShardStateAction .FailedShardEntry , ClusterStateTaskExecutor .TaskResult >> taskResultList ,
261
265
ClusterStateTaskExecutor .ClusterTasksResult <ShardStateAction .FailedShardEntry > result ,
262
266
ClusterState clusterState ,
263
267
boolean clusterStateChanged
264
268
) {
265
269
// there should be as many task results as tasks
266
- assertEquals (taskResultMap .size (), result .executionResults .size ());
270
+ assertEquals (taskResultList .size (), result .executionResults .size ());
267
271
268
- for (Map . Entry < ShardStateAction . FailedShardEntry , ClusterStateTaskExecutor .TaskResult > entry : taskResultMap . entrySet () ) {
272
+ for (Tuple < FailedShardEntry , ClusterStateTaskExecutor .TaskResult > entry : taskResultList ) {
269
273
// every task should have a corresponding task result
270
- assertTrue (result .executionResults .containsKey (entry .getKey ()));
274
+ assertTrue (result .executionResults .containsKey (entry .v1 ()));
271
275
272
276
// 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 ());
274
278
}
275
279
276
280
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 ()) {
279
283
// the shard was successfully failed and so should not be in the routing table
280
284
for (ShardRouting shard : shards ) {
281
285
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 ()));
285
289
}
286
290
}
287
291
} else {
288
292
// 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 ()));
292
296
}
293
297
}
294
298
0 commit comments