@@ -236,26 +236,47 @@ private void startNoWait( ClusterMember member )
236236 private Set <ClusterMember > membersWithRole ( ClusterMemberRole role )
237237 {
238238 Set <ClusterMember > membersWithRole = new HashSet <>();
239+ int retryCount = 0 ;
239240
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 )
244242 {
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 () )
246247 {
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 )
249272 {
250- throw new IllegalStateException ( "Unknown cluster member: '" + boltAddress + "'\n " + this );
251273 }
252- membersWithRole .add ( member );
253274 }
254275 }
255276
256277 if ( membersWithRole .isEmpty () )
257278 {
258- throw new IllegalStateException ( "No cluster members with role '" + role + "' found. \n " + this );
279+ throw new IllegalStateException ( "No cluster members with role '" + role + " " + this );
259280 }
260281
261282 return membersWithRole ;
0 commit comments