@@ -236,26 +236,47 @@ private void startNoWait( ClusterMember member )
236
236
private Set <ClusterMember > membersWithRole ( ClusterMemberRole role )
237
237
{
238
238
Set <ClusterMember > membersWithRole = new HashSet <>();
239
+ int retryCount = 0 ;
239
240
240
- Driver driver = driverToAnyCore ( members , clusterDrivers );
241
- final ClusterMemberRoleDiscovery discovery = clusterDrivers .getDiscovery ();
242
- final Map <BoltServerAddress ,ClusterMemberRole > clusterOverview = discovery .findClusterOverview ( driver );
243
- for ( BoltServerAddress boltAddress : clusterOverview .keySet () )
241
+ while ( membersWithRole .isEmpty () && retryCount < 10 )
244
242
{
245
- if ( role == clusterOverview .get ( boltAddress ) )
243
+ Driver driver = driverToAnyCore ( members , clusterDrivers );
244
+ final ClusterMemberRoleDiscovery discovery = clusterDrivers .getDiscovery ();
245
+ final Map <BoltServerAddress ,ClusterMemberRole > clusterOverview = discovery .findClusterOverview ( driver );
246
+ for ( BoltServerAddress boltAddress : clusterOverview .keySet () )
246
247
{
247
- ClusterMember member = findByBoltAddress ( boltAddress , members );
248
- if ( member == null )
248
+ if ( role == clusterOverview .get ( boltAddress ) )
249
+ {
250
+ ClusterMember member = findByBoltAddress ( boltAddress , members );
251
+ if ( member == null )
252
+ {
253
+ throw new IllegalStateException ( "Unknown cluster member: '" + boltAddress + "'\n " + this );
254
+ }
255
+ membersWithRole .add ( member );
256
+ }
257
+ }
258
+ retryCount ++;
259
+
260
+ if ( !membersWithRole .isEmpty () )
261
+ {
262
+ break ;
263
+ }
264
+ else
265
+ {
266
+ try
267
+ {
268
+ // give some time for cluster to stabilise
269
+ Thread .sleep ( 2000 );
270
+ }
271
+ catch ( InterruptedException ignored )
249
272
{
250
- throw new IllegalStateException ( "Unknown cluster member: '" + boltAddress + "'\n " + this );
251
273
}
252
- membersWithRole .add ( member );
253
274
}
254
275
}
255
276
256
277
if ( membersWithRole .isEmpty () )
257
278
{
258
- throw new IllegalStateException ( "No cluster members with role '" + role + "' found. \n " + this );
279
+ throw new IllegalStateException ( "No cluster members with role '" + role + " " + this );
259
280
}
260
281
261
282
return membersWithRole ;
0 commit comments