Skip to content

Commit a46c105

Browse files
authored
4.0 add retries for cluster overview test (neo4j#748)
Add in a retry mechanism to account for leader elections in cluster for cluster tests
1 parent 5762a31 commit a46c105

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

driver/src/test/java/org/neo4j/driver/util/cc/Cluster.java

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)