class TypicallyConnectToRandomReadReplicaStrategy extends UpstreamDatabaseSelectionStrategy {

    @Override
    public Optional<MemberId> upstreamDatabase()
    {
        if ( counter.shouldReturnCoreMemberId() )
        {
            return randomCoreMember();
        }
        else
        {
            // shuffled members
            List<MemberId> readReplicaMembers = new ArrayList<>( topologyService.localReadReplicas().members().keySet() );
            Collections.shuffle( readReplicaMembers );

            List<MemberId> coreMembers = new ArrayList<>( topologyService.localCoreServers().members().keySet() );
            Collections.shuffle( coreMembers );

            return Stream.concat( readReplicaMembers.stream(), coreMembers.stream() ).filter( not( myself::equals ) ).findFirst();
        }
    }

    public  TypicallyConnectToRandomReadReplicaStrategy();
    public  TypicallyConnectToRandomReadReplicaStrategy( int connectToCoreInterval );

}