@@ -1350,4 +1350,33 @@ public void close() {
13501350 }
13511351 }
13521352 }
1353+
1354+ public void testLazyResolveTransportAddress () throws Exception {
1355+ List <DiscoveryNode > knownNodes = new CopyOnWriteArrayList <>();
1356+ try (MockTransportService seedTransport = startTransport ("seed_node" , knownNodes , Version .CURRENT );
1357+ MockTransportService discoverableTransport = startTransport ("discoverable_node" , knownNodes , Version .CURRENT )) {
1358+ DiscoveryNode seedNode = seedTransport .getLocalDiscoNode ();
1359+ knownNodes .add (seedTransport .getLocalDiscoNode ());
1360+ knownNodes .add (discoverableTransport .getLocalDiscoNode ());
1361+ Collections .shuffle (knownNodes , random ());
1362+
1363+ try (MockTransportService service = MockTransportService .createNewService (Settings .EMPTY , Version .CURRENT , threadPool , null )) {
1364+ service .start ();
1365+ service .acceptIncomingRequests ();
1366+ AtomicInteger resolveCount = new AtomicInteger (0 );
1367+ Supplier <DiscoveryNode > seedSupplier = () -> {
1368+ resolveCount .incrementAndGet ();
1369+ return seedNode ;
1370+ };
1371+ try (RemoteClusterConnection connection = new RemoteClusterConnection (Settings .EMPTY , "test-cluster" ,
1372+ Arrays .asList (seedSupplier ), service , Integer .MAX_VALUE , n -> true )) {
1373+ updateSeedNodes (connection , Arrays .asList (seedSupplier ));
1374+ // Closing connection leads to RemoteClusterConnection.ConnectHandler.collectRemoteNodes
1375+ // being called again so we try to resolve the same seed node's host twice
1376+ discoverableTransport .close ();
1377+ }
1378+ assertEquals (2 , resolveCount .get ());
1379+ }
1380+ }
1381+ }
13531382}
0 commit comments