21
21
import java .net .URI ;
22
22
import java .net .UnknownHostException ;
23
23
import java .nio .file .Path ;
24
- import java .util .Collections ;
25
24
import java .util .HashSet ;
26
25
import java .util .List ;
27
26
import java .util .Set ;
28
27
import java .util .concurrent .ThreadLocalRandom ;
29
28
import java .util .concurrent .TimeUnit ;
30
29
31
30
import org .neo4j .driver .internal .BoltServerAddress ;
32
- import org .neo4j .driver .internal .util .DriverFactoryWithOneEventLoopThread ;
33
31
import org .neo4j .driver .v1 .AccessMode ;
34
- import org .neo4j .driver .v1 .AuthTokens ;
35
- import org .neo4j .driver .v1 .Config ;
36
32
import org .neo4j .driver .v1 .Driver ;
37
33
import org .neo4j .driver .v1 .Record ;
38
34
import org .neo4j .driver .v1 .Session ;
39
35
import org .neo4j .driver .v1 .StatementResult ;
40
36
import org .neo4j .driver .v1 .util .TestUtil ;
41
37
38
+ import static java .util .Collections .emptySet ;
42
39
import static java .util .Collections .unmodifiableSet ;
43
40
import static org .junit .Assert .assertEquals ;
44
41
import static org .junit .Assert .assertNotNull ;
45
- import static org .neo4j .driver .internal .logging .DevNullLogging .DEV_NULL_LOGGING ;
46
42
import static org .neo4j .driver .internal .util .Iterables .single ;
47
- import static org .neo4j .driver .v1 .Config .TrustStrategy .trustAllCertificates ;
48
43
import static org .neo4j .driver .v1 .util .TestUtil .sleep ;
49
44
50
- public class Cluster
45
+ public class Cluster implements AutoCloseable
51
46
{
52
47
private static final String ADMIN_USER = "neo4j" ;
53
48
private static final int STARTUP_TIMEOUT_SECONDS = 120 ;
54
49
private static final int ONLINE_MEMBERS_CHECK_SLEEP_MS = 500 ;
55
50
56
51
private final Path path ;
57
- private final String password ;
58
52
private final Set <ClusterMember > members ;
59
53
private final Set <ClusterMember > offlineMembers ;
54
+ private final ClusterDrivers clusterDrivers ;
60
55
61
56
public Cluster ( Path path , String password )
62
57
{
63
- this ( path , password , Collections .< ClusterMember > emptySet ( ) );
58
+ this ( path , emptySet (), new ClusterDrivers ( ADMIN_USER , password ) );
64
59
}
65
60
66
- private Cluster ( Path path , String password , Set <ClusterMember > members )
61
+ private Cluster ( Path path , Set <ClusterMember > members , ClusterDrivers clusterDrivers )
67
62
{
68
63
this .path = path ;
69
- this .password = password ;
70
64
this .members = members ;
71
65
this .offlineMembers = new HashSet <>();
66
+ this .clusterDrivers = clusterDrivers ;
72
67
}
73
68
74
69
Cluster withMembers ( Set <ClusterMember > newMembers ) throws ClusterUnavailableException
75
70
{
76
- waitForMembersToBeOnline ( newMembers , password );
77
- return new Cluster ( path , password , newMembers );
71
+ waitForMembersToBeOnline ( newMembers , clusterDrivers );
72
+ return new Cluster ( path , newMembers , clusterDrivers );
78
73
}
79
74
80
75
public Path getPath ()
@@ -85,21 +80,16 @@ public Path getPath()
85
80
public void deleteData ()
86
81
{
87
82
// execute write query to remove all nodes and retrieve bookmark
88
- String bookmark ;
89
- try ( Driver driver = createDriver ( leader ().getBoltUri (), password ) )
90
- {
91
- bookmark = TestUtil .cleanDb ( driver );
92
- assertNotNull ( "Cleanup of the database did not produce a bookmark" , bookmark );
93
- }
83
+ Driver driverToLeader = clusterDrivers .getDriver ( leader () );
84
+ String bookmark = TestUtil .cleanDb ( driverToLeader );
85
+ assertNotNull ( "Cleanup of the database did not produce a bookmark" , bookmark );
94
86
95
87
// ensure that every cluster member is up-to-date and contains no nodes
96
88
for ( ClusterMember member : members )
97
89
{
98
- try ( Driver driver = createDriver ( member .getBoltUri (), password ) )
99
- {
100
- long nodeCount = TestUtil .countNodes ( driver , bookmark );
101
- assertEquals ( "Not all nodes have been deleted. " + nodeCount + " still there somehow " , 0L , nodeCount );
102
- }
90
+ Driver driver = clusterDrivers .getDriver ( member );
91
+ long nodeCount = TestUtil .countNodes ( driver , bookmark );
92
+ assertEquals ( "Not all nodes have been deleted. " + nodeCount + " still there somehow " , 0L , nodeCount );
103
93
}
104
94
}
105
95
@@ -169,6 +159,17 @@ public void kill( ClusterMember member )
169
159
waitForMembersToBeOnline ();
170
160
}
171
161
162
+ public Driver getDirectDriver ( ClusterMember member )
163
+ {
164
+ return clusterDrivers .getDriver ( member );
165
+ }
166
+
167
+ @ Override
168
+ public void close ()
169
+ {
170
+ clusterDrivers .close ();
171
+ }
172
+
172
173
@ Override
173
174
public String toString ()
174
175
{
@@ -206,8 +207,8 @@ private Set<ClusterMember> membersWithRole( ClusterMemberRole role )
206
207
{
207
208
Set <ClusterMember > membersWithRole = new HashSet <>();
208
209
209
- try ( Driver driver = createDriver ( members , password );
210
- Session session = driver .session ( AccessMode .READ ) )
210
+ Driver driver = driverToAnyCore ( members , clusterDrivers );
211
+ try ( Session session = driver .session ( AccessMode .READ ) )
211
212
{
212
213
List <Record > records = findClusterOverview ( session );
213
214
for ( Record record : records )
@@ -237,15 +238,15 @@ private void waitForMembersToBeOnline()
237
238
{
238
239
try
239
240
{
240
- waitForMembersToBeOnline ( members , password );
241
+ waitForMembersToBeOnline ( members , clusterDrivers );
241
242
}
242
243
catch ( ClusterUnavailableException e )
243
244
{
244
245
throw new RuntimeException ( e );
245
246
}
246
247
}
247
248
248
- private static void waitForMembersToBeOnline ( Set <ClusterMember > members , String password )
249
+ private static void waitForMembersToBeOnline ( Set <ClusterMember > members , ClusterDrivers clusterDrivers )
249
250
throws ClusterUnavailableException
250
251
{
251
252
if ( members .isEmpty () )
@@ -254,7 +255,7 @@ private static void waitForMembersToBeOnline( Set<ClusterMember> members, String
254
255
}
255
256
256
257
Set <BoltServerAddress > expectedOnlineAddresses = extractBoltAddresses ( members );
257
- Set <BoltServerAddress > actualOnlineAddresses = Collections . emptySet ();
258
+ Set <BoltServerAddress > actualOnlineAddresses = emptySet ();
258
259
259
260
long deadline = System .currentTimeMillis () + TimeUnit .SECONDS .toMillis ( STARTUP_TIMEOUT_SECONDS );
260
261
Throwable error = null ;
@@ -264,8 +265,8 @@ private static void waitForMembersToBeOnline( Set<ClusterMember> members, String
264
265
sleep ( ONLINE_MEMBERS_CHECK_SLEEP_MS );
265
266
assertDeadlineNotReached ( deadline , expectedOnlineAddresses , actualOnlineAddresses , error );
266
267
267
- try ( Driver driver = createDriver ( members , password );
268
- Session session = driver .session ( AccessMode .READ ) )
268
+ Driver driver = driverToAnyCore ( members , clusterDrivers );
269
+ try ( Session session = driver .session ( AccessMode .READ ) )
269
270
{
270
271
List <Record > records = findClusterOverview ( session );
271
272
actualOnlineAddresses = extractBoltAddresses ( records );
@@ -286,7 +287,7 @@ private static void waitForMembersToBeOnline( Set<ClusterMember> members, String
286
287
}
287
288
}
288
289
289
- private static Driver createDriver ( Set <ClusterMember > members , String password )
290
+ private static Driver driverToAnyCore ( Set <ClusterMember > members , ClusterDrivers clusterDrivers )
290
291
{
291
292
if ( members .isEmpty () )
292
293
{
@@ -295,22 +296,13 @@ private static Driver createDriver( Set<ClusterMember> members, String password
295
296
296
297
for ( ClusterMember member : members )
297
298
{
298
- Driver driver = createDriver ( member . getBoltUri (), password );
299
+ Driver driver = clusterDrivers . getDriver ( member );
299
300
try ( Session session = driver .session ( AccessMode .READ ) )
300
301
{
301
302
if ( isCoreMember ( session ) )
302
303
{
303
304
return driver ;
304
305
}
305
- else
306
- {
307
- driver .close ();
308
- }
309
- }
310
- catch ( Exception e )
311
- {
312
- driver .close ();
313
- throw e ;
314
306
}
315
307
}
316
308
@@ -411,24 +403,6 @@ private static ClusterMember findByBoltAddress( BoltServerAddress boltAddress, S
411
403
return null ;
412
404
}
413
405
414
- private static Driver createDriver ( URI boltUri , String password )
415
- {
416
- DriverFactoryWithOneEventLoopThread factory = new DriverFactoryWithOneEventLoopThread ();
417
- return factory .newInstance ( boltUri , AuthTokens .basic ( ADMIN_USER , password ), driverConfig () );
418
- }
419
-
420
- private static Config driverConfig ()
421
- {
422
- // try to build config for a very lightweight driver
423
- return Config .build ()
424
- .withLogging ( DEV_NULL_LOGGING )
425
- .withTrustStrategy ( trustAllCertificates () )
426
- .withEncryption ()
427
- .withMaxConnectionPoolSize ( 1 )
428
- .withConnectionLivenessCheckTimeout ( 1 , TimeUnit .HOURS )
429
- .toConfig ();
430
- }
431
-
432
406
private static ClusterMember randomOf ( Set <ClusterMember > members )
433
407
{
434
408
int randomIndex = ThreadLocalRandom .current ().nextInt ( members .size () );
0 commit comments