19
19
package org .neo4j .driver .v1 .util .cc ;
20
20
21
21
import java .net .URI ;
22
+ import java .net .UnknownHostException ;
22
23
import java .nio .file .Path ;
23
24
import java .util .Collections ;
24
25
import java .util .HashSet ;
27
28
import java .util .concurrent .ThreadLocalRandom ;
28
29
import java .util .concurrent .TimeUnit ;
29
30
31
+ import org .neo4j .driver .internal .net .BoltServerAddress ;
30
32
import org .neo4j .driver .internal .util .Consumer ;
31
33
import org .neo4j .driver .v1 .AccessMode ;
32
34
import org .neo4j .driver .v1 .AuthTokens ;
@@ -203,11 +205,11 @@ private Set<ClusterMember> membersWithRole( ClusterMemberRole role )
203
205
{
204
206
if ( role == extractRole ( record ) )
205
207
{
206
- URI boltUri = extractBoltUri ( record );
207
- ClusterMember member = findByBoltUri ( boltUri , members );
208
+ BoltServerAddress boltAddress = extractBoltAddress ( record );
209
+ ClusterMember member = findByBoltAddress ( boltAddress , members );
208
210
if ( member == null )
209
211
{
210
- throw new IllegalStateException ( "Unknown cluster member: '" + boltUri + "'\n " + this );
212
+ throw new IllegalStateException ( "Unknown cluster member: '" + boltAddress + "'\n " + this );
211
213
}
212
214
membersWithRole .add ( member );
213
215
}
@@ -242,22 +244,22 @@ private static void waitForMembersToBeOnline( Set<ClusterMember> members, String
242
244
throw new IllegalArgumentException ( "No members to wait for" );
243
245
}
244
246
245
- Set <URI > expectedOnlineUris = extractBoltUris ( members );
246
- Set <URI > actualOnlineUris = Collections .emptySet ();
247
+ Set <BoltServerAddress > expectedOnlineAddresses = extractBoltAddresses ( members );
248
+ Set <BoltServerAddress > actualOnlineAddresses = Collections .emptySet ();
247
249
248
250
long deadline = System .currentTimeMillis () + TimeUnit .SECONDS .toMillis ( STARTUP_TIMEOUT_SECONDS );
249
251
Throwable error = null ;
250
252
251
- while ( !expectedOnlineUris .equals ( actualOnlineUris ) )
253
+ while ( !expectedOnlineAddresses .equals ( actualOnlineAddresses ) )
252
254
{
253
255
sleep ( ONLINE_MEMBERS_CHECK_SLEEP_MS );
254
- assertDeadlineNotReached ( deadline , expectedOnlineUris , actualOnlineUris , error );
256
+ assertDeadlineNotReached ( deadline , expectedOnlineAddresses , actualOnlineAddresses , error );
255
257
256
258
try ( Driver driver = createDriver ( members , password );
257
259
Session session = driver .session ( AccessMode .READ ) )
258
260
{
259
261
List <Record > records = findClusterOverview ( session );
260
- actualOnlineUris = extractBoltUris ( records );
262
+ actualOnlineAddresses = extractBoltAddresses ( records );
261
263
}
262
264
catch ( Throwable t )
263
265
{
@@ -315,16 +317,16 @@ private static boolean isCoreMember( Session session )
315
317
return role != ClusterMemberRole .READ_REPLICA ;
316
318
}
317
319
318
- private static void assertDeadlineNotReached ( long deadline , Set <URI > expectedUris , Set <URI > actualUris ,
320
+ private static void assertDeadlineNotReached ( long deadline , Set <?> expectedAddresses , Set <?> actualAddresses ,
319
321
Throwable error ) throws ClusterUnavailableException
320
322
{
321
323
if ( System .currentTimeMillis () > deadline )
322
324
{
323
325
String baseMessage = "Cluster did not become available in " + STARTUP_TIMEOUT_SECONDS + " seconds.\n " ;
324
326
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 ;
328
330
329
331
ClusterUnavailableException clusterUnavailable = new ClusterUnavailableException ( message );
330
332
@@ -337,31 +339,45 @@ private static void assertDeadlineNotReached( long deadline, Set<URI> expectedUr
337
339
}
338
340
}
339
341
340
- private static Set <URI > extractBoltUris ( Set <ClusterMember > members )
342
+ private static Set <BoltServerAddress > extractBoltAddresses ( Set <ClusterMember > members )
341
343
{
342
- Set <URI > uris = new HashSet <>();
344
+ Set <BoltServerAddress > addresses = new HashSet <>();
343
345
for ( ClusterMember member : members )
344
346
{
345
- uris .add ( member .getBoltUri () );
347
+ addresses .add ( member .getBoltAddress () );
346
348
}
347
- return uris ;
349
+ return addresses ;
348
350
}
349
351
350
- private static Set <URI > extractBoltUris ( List <Record > records )
352
+ private static Set <BoltServerAddress > extractBoltAddresses ( List <Record > records )
351
353
{
352
- Set <URI > uris = new HashSet <>();
354
+ Set <BoltServerAddress > addresses = new HashSet <>();
353
355
for ( Record record : records )
354
356
{
355
- uris .add ( extractBoltUri ( record ) );
357
+ BoltServerAddress boltAddress = extractBoltAddress ( record );
358
+ addresses .add ( boltAddress );
356
359
}
357
- return uris ;
360
+ return addresses ;
358
361
}
359
362
360
- private static URI extractBoltUri ( Record record )
363
+ private static BoltServerAddress extractBoltAddress ( Record record )
361
364
{
362
365
List <Object > addresses = record .get ( "addresses" ).asList ();
363
366
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
+ }
365
381
}
366
382
367
383
private static ClusterMemberRole extractRole ( Record record )
@@ -370,11 +386,11 @@ private static ClusterMemberRole extractRole( Record record )
370
386
return ClusterMemberRole .valueOf ( roleString .toUpperCase () );
371
387
}
372
388
373
- private static ClusterMember findByBoltUri ( URI boltUri , Set <ClusterMember > members )
389
+ private static ClusterMember findByBoltAddress ( BoltServerAddress boltAddress , Set <ClusterMember > members )
374
390
{
375
391
for ( ClusterMember member : members )
376
392
{
377
- if ( member .getBoltUri ().equals ( boltUri ) )
393
+ if ( member .getBoltAddress ().equals ( boltAddress ) )
378
394
{
379
395
return member ;
380
396
}
0 commit comments