1919package org .neo4j .driver .v1 .util .cc ;
2020
2121import java .net .URI ;
22+ import java .net .UnknownHostException ;
2223import java .nio .file .Path ;
2324import java .util .Collections ;
2425import java .util .HashSet ;
2728import java .util .concurrent .ThreadLocalRandom ;
2829import java .util .concurrent .TimeUnit ;
2930
31+ import org .neo4j .driver .internal .net .BoltServerAddress ;
3032import org .neo4j .driver .internal .util .Consumer ;
3133import org .neo4j .driver .v1 .AccessMode ;
3234import org .neo4j .driver .v1 .AuthTokens ;
@@ -203,11 +205,11 @@ private Set<ClusterMember> membersWithRole( ClusterMemberRole role )
203205 {
204206 if ( role == extractRole ( record ) )
205207 {
206- URI boltUri = extractBoltUri ( record );
207- ClusterMember member = findByBoltUri ( boltUri , members );
208+ BoltServerAddress boltAddress = extractBoltAddress ( record );
209+ ClusterMember member = findByBoltAddress ( boltAddress , members );
208210 if ( member == null )
209211 {
210- throw new IllegalStateException ( "Unknown cluster member: '" + boltUri + "'\n " + this );
212+ throw new IllegalStateException ( "Unknown cluster member: '" + boltAddress + "'\n " + this );
211213 }
212214 membersWithRole .add ( member );
213215 }
@@ -242,22 +244,22 @@ private static void waitForMembersToBeOnline( Set<ClusterMember> members, String
242244 throw new IllegalArgumentException ( "No members to wait for" );
243245 }
244246
245- Set <URI > expectedOnlineUris = extractBoltUris ( members );
246- Set <URI > actualOnlineUris = Collections .emptySet ();
247+ Set <BoltServerAddress > expectedOnlineAddresses = extractBoltAddresses ( members );
248+ Set <BoltServerAddress > actualOnlineAddresses = Collections .emptySet ();
247249
248250 long deadline = System .currentTimeMillis () + TimeUnit .SECONDS .toMillis ( STARTUP_TIMEOUT_SECONDS );
249251 Throwable error = null ;
250252
251- while ( !expectedOnlineUris .equals ( actualOnlineUris ) )
253+ while ( !expectedOnlineAddresses .equals ( actualOnlineAddresses ) )
252254 {
253255 sleep ( ONLINE_MEMBERS_CHECK_SLEEP_MS );
254- assertDeadlineNotReached ( deadline , expectedOnlineUris , actualOnlineUris , error );
256+ assertDeadlineNotReached ( deadline , expectedOnlineAddresses , actualOnlineAddresses , error );
255257
256258 try ( Driver driver = createDriver ( members , password );
257259 Session session = driver .session ( AccessMode .READ ) )
258260 {
259261 List <Record > records = findClusterOverview ( session );
260- actualOnlineUris = extractBoltUris ( records );
262+ actualOnlineAddresses = extractBoltAddresses ( records );
261263 }
262264 catch ( Throwable t )
263265 {
@@ -315,16 +317,16 @@ private static boolean isCoreMember( Session session )
315317 return role != ClusterMemberRole .READ_REPLICA ;
316318 }
317319
318- private static void assertDeadlineNotReached ( long deadline , Set <URI > expectedUris , Set <URI > actualUris ,
320+ private static void assertDeadlineNotReached ( long deadline , Set <?> expectedAddresses , Set <?> actualAddresses ,
319321 Throwable error ) throws ClusterUnavailableException
320322 {
321323 if ( System .currentTimeMillis () > deadline )
322324 {
323325 String baseMessage = "Cluster did not become available in " + STARTUP_TIMEOUT_SECONDS + " seconds.\n " ;
324326 String errorMessage = error == null ? "" : "There were errors checking cluster members.\n " ;
325- String expectedUrisMessage = "Expected online URIs : " + expectedUris + "\n " ;
326- String actualUrisMessage = "Actual last seen online URIs : " + actualUris + "\n " ;
327- String message = baseMessage + errorMessage + expectedUrisMessage + actualUrisMessage ;
327+ String expectedAddressesMessage = "Expected online addresses : " + expectedAddresses + "\n " ;
328+ String actualAddressesMessage = "Actual last seen online addresses : " + actualAddresses + "\n " ;
329+ String message = baseMessage + errorMessage + expectedAddressesMessage + actualAddressesMessage ;
328330
329331 ClusterUnavailableException clusterUnavailable = new ClusterUnavailableException ( message );
330332
@@ -337,31 +339,45 @@ private static void assertDeadlineNotReached( long deadline, Set<URI> expectedUr
337339 }
338340 }
339341
340- private static Set <URI > extractBoltUris ( Set <ClusterMember > members )
342+ private static Set <BoltServerAddress > extractBoltAddresses ( Set <ClusterMember > members )
341343 {
342- Set <URI > uris = new HashSet <>();
344+ Set <BoltServerAddress > addresses = new HashSet <>();
343345 for ( ClusterMember member : members )
344346 {
345- uris .add ( member .getBoltUri () );
347+ addresses .add ( member .getBoltAddress () );
346348 }
347- return uris ;
349+ return addresses ;
348350 }
349351
350- private static Set <URI > extractBoltUris ( List <Record > records )
352+ private static Set <BoltServerAddress > extractBoltAddresses ( List <Record > records )
351353 {
352- Set <URI > uris = new HashSet <>();
354+ Set <BoltServerAddress > addresses = new HashSet <>();
353355 for ( Record record : records )
354356 {
355- uris .add ( extractBoltUri ( record ) );
357+ BoltServerAddress boltAddress = extractBoltAddress ( record );
358+ addresses .add ( boltAddress );
356359 }
357- return uris ;
360+ return addresses ;
358361 }
359362
360- private static URI extractBoltUri ( Record record )
363+ private static BoltServerAddress extractBoltAddress ( Record record )
361364 {
362365 List <Object > addresses = record .get ( "addresses" ).asList ();
363366 String boltUriString = (String ) addresses .get ( 0 );
364- return URI .create ( boltUriString );
367+ URI boltUri = URI .create ( boltUriString );
368+ return newBoltServerAddress ( boltUri );
369+ }
370+
371+ private static BoltServerAddress newBoltServerAddress ( URI uri )
372+ {
373+ try
374+ {
375+ return BoltServerAddress .from ( uri ).resolve ();
376+ }
377+ catch ( UnknownHostException e )
378+ {
379+ throw new RuntimeException ( "Unable to resolve host to IP in URI: '" + uri + "'" );
380+ }
365381 }
366382
367383 private static ClusterMemberRole extractRole ( Record record )
@@ -370,11 +386,11 @@ private static ClusterMemberRole extractRole( Record record )
370386 return ClusterMemberRole .valueOf ( roleString .toUpperCase () );
371387 }
372388
373- private static ClusterMember findByBoltUri ( URI boltUri , Set <ClusterMember > members )
389+ private static ClusterMember findByBoltAddress ( BoltServerAddress boltAddress , Set <ClusterMember > members )
374390 {
375391 for ( ClusterMember member : members )
376392 {
377- if ( member .getBoltUri ().equals ( boltUri ) )
393+ if ( member .getBoltAddress ().equals ( boltAddress ) )
378394 {
379395 return member ;
380396 }
0 commit comments