@@ -429,15 +429,11 @@ public void testQueryHotShardsFirstWhenIlmMovesShard() {
429429 public void testRetryMovedShard () {
430430 var attempt = new AtomicInteger (0 );
431431 var response = safeGet (
432- sendRequests (
433- randomBoolean (),
434- -1 ,
435- List .of (targetShard (shard1 , node1 )),
436- (shardIds , listener ) -> runWithDelay (() -> listener .onResponse (switch (attempt .incrementAndGet ()) {
437- case 1 -> Map .of (shard1 , List .of (node2 ));
438- case 2 -> Map .of (shard1 , List .of (node3 ));
439- default -> Map .of (shard1 , List .of (node4 ));
440- })),
432+ sendRequests (randomBoolean (), -1 , List .of (targetShard (shard1 , node1 )), shardIds -> switch (attempt .incrementAndGet ()) {
433+ case 1 -> Map .of (shard1 , List .of (node2 ));
434+ case 2 -> Map .of (shard1 , List .of (node3 ));
435+ default -> Map .of (shard1 , List .of (node4 ));
436+ },
441437 (node , shardIds , aliasFilters , listener ) -> runWithDelay (
442438 () -> listener .onResponse (
443439 Objects .equals (node , node4 )
@@ -456,10 +452,10 @@ public void testRetryMovedShard() {
456452
457453 public void testDoesNotRetryMovedShardIndefinitely () {
458454 var attempt = new AtomicInteger (0 );
459- var response = safeGet (sendRequests (true , -1 , List .of (targetShard (shard1 , node1 )), ( shardIds , listener ) -> runWithDelay (() -> {
460- logger . info ( "Attempt {}" , attempt .incrementAndGet () );
461- listener . onResponse ( Map .of (shard1 , List .of (node2 ) ));
462- }) ,
455+ var response = safeGet (sendRequests (true , -1 , List .of (targetShard (shard1 , node1 )), shardIds -> {
456+ attempt .incrementAndGet ();
457+ return Map .of (shard1 , List .of (node2 ));
458+ },
463459 (node , shardIds , aliasFilters , listener ) -> runWithDelay (
464460 () -> listener .onResponse (
465461 new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of (shard1 , new ShardNotFoundException (shard1 )))
@@ -477,31 +473,25 @@ public void testRetryOnlyMovedShards() {
477473 var attempt = new AtomicInteger (0 );
478474 var resolvedShards = Collections .synchronizedSet (new HashSet <>());
479475 var response = safeGet (
480- sendRequests (
481- randomBoolean (),
482- -1 ,
483- List .of (targetShard (shard1 , node1 , node3 ), targetShard (shard2 , node2 )),
484- (shardIds , listener ) -> runWithDelay (() -> {
485- attempt .incrementAndGet ();
486- resolvedShards .addAll (shardIds );
487- listener .onResponse (Map .of (shard2 , List .of (node4 )));
488- }),
489- (node , shardIds , aliasFilters , listener ) -> runWithDelay (() -> {
490- if (Objects .equals (node , node1 )) {
491- // search is going to be retried from replica on node3 without shard resolution
492- listener .onResponse (
493- new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of (shard1 , new ShardNotFoundException (shard1 )))
494- );
495- } else if (Objects .equals (node , node2 )) {
496- // search is going to be retried after resolving new shard node since there are no replicas
497- listener .onResponse (
498- new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of (shard2 , new ShardNotFoundException (shard2 )))
499- );
500- } else {
501- listener .onResponse (new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of ()));
502- }
503- })
504- )
476+ sendRequests (randomBoolean (), -1 , List .of (targetShard (shard1 , node1 , node3 ), targetShard (shard2 , node2 )), shardIds -> {
477+ attempt .incrementAndGet ();
478+ resolvedShards .addAll (shardIds );
479+ return Map .of (shard2 , List .of (node4 ));
480+ }, (node , shardIds , aliasFilters , listener ) -> runWithDelay (() -> {
481+ if (Objects .equals (node , node1 )) {
482+ // search is going to be retried from replica on node3 without shard resolution
483+ listener .onResponse (
484+ new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of (shard1 , new ShardNotFoundException (shard1 )))
485+ );
486+ } else if (Objects .equals (node , node2 )) {
487+ // search is going to be retried after resolving new shard node since there are no replicas
488+ listener .onResponse (
489+ new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of (shard2 , new ShardNotFoundException (shard2 )))
490+ );
491+ } else {
492+ listener .onResponse (new DataNodeComputeResponse (DriverCompletionInfo .EMPTY , Map .of ()));
493+ }
494+ }))
505495 );
506496 assertThat (response .totalShards , equalTo (2 ));
507497 assertThat (response .successfulShards , equalTo (2 ));
@@ -547,7 +537,7 @@ PlainActionFuture<ComputeResponse> sendRequests(
547537 List <DataNodeRequestSender .TargetShard > shards ,
548538 Sender sender
549539 ) {
550- return sendRequests (allowPartialResults , concurrentRequests , shards , ( shardIds , listener ) -> {
540+ return sendRequests (allowPartialResults , concurrentRequests , shards , shardIds -> {
551541 throw new AssertionError ("No shard resolution is expected here" );
552542 }, sender );
553543 }
@@ -600,8 +590,8 @@ void searchShards(Set<String> concreteIndices, ActionListener<TargetShards> list
600590 }
601591
602592 @ Override
603- void resolveShards ( Set < ShardId > shardIds , ActionListener < Map <ShardId , List <DiscoveryNode >>> listener ) {
604- resolver .resolve (shardIds , listener );
593+ Map <ShardId , List <DiscoveryNode >> resolveShards ( Set < ShardId > shardIds ) {
594+ return resolver .resolve (shardIds );
605595 }
606596
607597 @ Override
@@ -618,7 +608,7 @@ protected void sendRequest(
618608 }
619609
620610 interface Resolver {
621- void resolve ( Set < ShardId > shardIds , ActionListener < Map <ShardId , List <DiscoveryNode >>> listener );
611+ Map <ShardId , List <DiscoveryNode >> resolve ( Set < ShardId > shardIds );
622612 }
623613
624614 interface Sender {
0 commit comments