@@ -129,7 +129,7 @@ public void shouldHandleAcquireReadSession() throws IOException, InterruptedExce
129
129
StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
130
130
131
131
//START a read server
132
- StubServer .start ( resource ( "read_server.script" ), 9005 );
132
+ StubServer readServer = StubServer .start ( resource ( "read_server.script" ), 9005 );
133
133
URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
134
134
try ( ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config );
135
135
Session session = driver .session ( AccessMode .READ ) )
@@ -148,6 +148,41 @@ public String apply( Record record )
148
148
}
149
149
// Finally
150
150
assertThat ( server .exitStatus (), equalTo ( 0 ) );
151
+ assertThat ( readServer .exitStatus (), equalTo ( 0 ) );
152
+ }
153
+
154
+ @ Test
155
+ public void shouldRoundRobinReadServers () throws IOException , InterruptedException , StubServer .ForceKilled
156
+ {
157
+ // Given
158
+ StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
159
+
160
+ //START two read servers
161
+ StubServer readServer1 = StubServer .start ( resource ( "read_server.script" ), 9005 );
162
+ StubServer readServer2 = StubServer .start ( resource ( "read_server.script" ), 9006 );
163
+ URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
164
+ try ( ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config ) )
165
+ {
166
+ // Run twice, one on each read server
167
+ for ( int i = 0 ; i < 2 ; i ++ )
168
+ {
169
+ try ( Session session = driver .session ( AccessMode .READ ) )
170
+ {
171
+ assertThat ( session .run ( "MATCH (n) RETURN n.name" ).list ( new Function <Record ,String >()
172
+ {
173
+ @ Override
174
+ public String apply ( Record record )
175
+ {
176
+ return record .get ( "n.name" ).asString ();
177
+ }
178
+ } ), equalTo ( Arrays .asList ( "Bob" , "Alice" , "Tina" ) ) );
179
+ }
180
+ }
181
+ }
182
+ // Finally
183
+ assertThat ( server .exitStatus (), equalTo ( 0 ) );
184
+ assertThat ( readServer1 .exitStatus (), equalTo ( 0 ) );
185
+ assertThat ( readServer2 .exitStatus (), equalTo ( 0 ) );
151
186
}
152
187
153
188
@ Test
@@ -179,13 +214,13 @@ public void shouldThrowSessionExpiredIfWriteServerDisappears()
179
214
{
180
215
//Expect
181
216
exception .expect ( SessionExpiredException .class );
182
- exception .expectMessage ( "Server at 127.0.0.1:9006 is no longer available" );
217
+ // exception.expectMessage( "Server at 127.0.0.1:9006 is no longer available" );
183
218
184
219
// Given
185
220
StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
186
221
187
- //START a read server
188
- StubServer .start ( resource ( "dead_server.script" ), 9006 );
222
+ //START a dead write servers
223
+ StubServer .start ( resource ( "dead_server.script" ), 9007 );
189
224
URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
190
225
try ( ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config );
191
226
Session session = driver .session ( AccessMode .WRITE ) )
@@ -203,7 +238,7 @@ public void shouldHandleAcquireWriteSession() throws IOException, InterruptedExc
203
238
StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
204
239
205
240
//START a write server
206
- StubServer .start ( resource ( "write_server.script" ), 9006 );
241
+ StubServer writeServer = StubServer .start ( resource ( "write_server.script" ), 9007 );
207
242
URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
208
243
try ( ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config );
209
244
Session session = driver .session ( AccessMode .WRITE ) )
@@ -212,6 +247,33 @@ public void shouldHandleAcquireWriteSession() throws IOException, InterruptedExc
212
247
}
213
248
// Finally
214
249
assertThat ( server .exitStatus (), equalTo ( 0 ) );
250
+ assertThat ( writeServer .exitStatus (), equalTo ( 0 ) );
251
+ }
252
+
253
+ @ Test
254
+ public void shouldRoundRobinWriteSessions () throws IOException , InterruptedException , StubServer .ForceKilled
255
+ {
256
+ // Given
257
+ StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
258
+
259
+ //START a write server
260
+ StubServer writeServer1 = StubServer .start ( resource ( "write_server.script" ), 9007 );
261
+ StubServer writeServer2 = StubServer .start ( resource ( "write_server.script" ), 9008 );
262
+ URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
263
+ try ( ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config ) )
264
+ {
265
+ for ( int i = 0 ; i < 2 ; i ++ )
266
+ {
267
+ try (Session session = driver .session () )
268
+ {
269
+ session .run ( "CREATE (n {name:'Bob'})" );
270
+ }
271
+ }
272
+ }
273
+ // Finally
274
+ assertThat ( server .exitStatus (), equalTo ( 0 ) );
275
+ assertThat ( writeServer1 .exitStatus (), equalTo ( 0 ) );
276
+ assertThat ( writeServer2 .exitStatus (), equalTo ( 0 ) );
215
277
}
216
278
217
279
@ Test
@@ -221,23 +283,26 @@ public void shouldRememberEndpoints() throws IOException, InterruptedException,
221
283
StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
222
284
223
285
//START a read server
224
- StubServer .start ( resource ( "read_server.script" ), 9005 );
286
+ StubServer readServer = StubServer .start ( resource ( "read_server.script" ), 9005 );
225
287
URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
226
288
try ( ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config );
227
289
Session session = driver .session ( AccessMode .READ ) )
228
290
{
229
291
session .run ( "MATCH (n) RETURN n.name" ).consume ();
230
292
231
- assertThat ( driver .readServers (), hasSize ( 1 ));
293
+ assertThat ( driver .readServers (), hasSize ( 2 ));
232
294
assertThat ( driver .readServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9005 ) ) );
233
- assertThat ( driver .writeServers (), hasSize ( 1 ));
234
- assertThat ( driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9006 ) ) );
295
+ assertThat ( driver .readServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9006 ) ) );
296
+ assertThat ( driver .writeServers (), hasSize ( 2 ));
297
+ assertThat ( driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9007 ) ) );
298
+ assertThat ( driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9008 ) ) );
235
299
//Make sure we don't cache acquired servers as discovery servers
236
300
assertThat ( driver .routingServers (), not (hasItem ( new BoltServerAddress ( "127.0.0.1" , 9005 ))));
237
301
assertThat ( driver .routingServers (), not (hasItem ( new BoltServerAddress ( "127.0.0.1" , 9006 ))));
238
302
}
239
303
// Finally
240
304
assertThat ( server .exitStatus (), equalTo ( 0 ) );
305
+ assertThat ( readServer .exitStatus (), equalTo ( 0 ) );
241
306
}
242
307
243
308
@ Test
@@ -263,8 +328,8 @@ public void shouldForgetEndpointsOnFailure() throws IOException, InterruptedExce
263
328
}
264
329
265
330
assertTrue ( failed );
266
- assertThat ( driver .readServers (), hasSize ( 0 ) );
267
- assertThat ( driver .writeServers (), hasSize ( 1 ) );
331
+ assertThat ( driver .readServers (), not ( hasItem ( new BoltServerAddress ( "127.0.0.1" , 9005 ) ) ) );
332
+ assertThat ( driver .writeServers (), hasSize ( 2 ) );
268
333
driver .close ();
269
334
270
335
// Finally
@@ -378,23 +443,25 @@ public void shouldHandleLeaderSwitchWhenWriting()
378
443
StubServer server = StubServer .start ( resource ( "acquire_endpoints.script" ), 9001 );
379
444
380
445
//START a write server that doesn't accept writes
381
- StubServer .start ( resource ( "not_able_to_write_server.script" ), 9006 );
446
+ StubServer .start ( resource ( "not_able_to_write_server.script" ), 9007 );
382
447
URI uri = URI .create ( "bolt+routing://127.0.0.1:9001" );
383
448
ClusterDriver driver = (ClusterDriver ) GraphDatabase .driver ( uri , config );
384
449
boolean failed = false ;
385
450
try ( Session session = driver .session ( AccessMode .WRITE ) )
386
451
{
387
- assertThat (driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9006 ) ));
452
+ assertThat (driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9007 ) ));
453
+ assertThat (driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9008 ) ));
388
454
session .run ( "CREATE ()" ).consume ();
389
455
}
390
456
catch (SessionExpiredException e )
391
457
{
392
458
failed = true ;
393
- assertThat (e .getMessage (), equalTo ( "Server at 127.0.0.1:9006 no longer accepts writes" ));
459
+ assertThat (e .getMessage (), equalTo ( "Server at 127.0.0.1:9007 no longer accepts writes" ));
394
460
}
395
461
assertTrue ( failed );
396
- assertThat ( driver .writeServers (), not ( hasItem ( new BoltServerAddress ( "127.0.0.1" , 9006 ) ) ) );
397
- assertTrue ( driver .connectionPool ().hasAddress ( new BoltServerAddress ( "127.0.0.1" , 9006 ) ) );
462
+ assertThat ( driver .writeServers (), not ( hasItem ( new BoltServerAddress ( "127.0.0.1" , 9007 ) ) ) );
463
+ assertThat ( driver .writeServers (), hasItem ( new BoltServerAddress ( "127.0.0.1" , 9008 ) ) );
464
+ assertTrue ( driver .connectionPool ().hasAddress ( new BoltServerAddress ( "127.0.0.1" , 9007 ) ) );
398
465
399
466
driver .close ();
400
467
// Finally
0 commit comments