use of org.neo4j.causalclustering.discovery.CoreTopologyService in project neo4j by neo4j.
the class GetServersProcedureV1RoutingTest method shouldReturnEndpointsInDifferentOrders.
@Test
public void shouldReturnEndpointsInDifferentOrders() throws Exception {
// given
final CoreTopologyService coreTopologyService = mock(CoreTopologyService.class);
LeaderLocator leaderLocator = mock(LeaderLocator.class);
when(leaderLocator.getLeader()).thenReturn(member(0));
Map<MemberId, CoreServerInfo> coreMembers = new HashMap<>();
coreMembers.put(member(0), adressesForCore(0));
coreMembers.put(member(1), adressesForCore(1));
coreMembers.put(member(2), adressesForCore(2));
final CoreTopology clusterTopology = new CoreTopology(clusterId, false, coreMembers);
when(coreTopologyService.coreServers()).thenReturn(clusterTopology);
when(coreTopologyService.readReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));
final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance());
// when
Object[] endpoints = getEndpoints(proc);
//then
Object[] endpointsInDifferentOrder = getEndpoints(proc);
for (int i = 0; i < 100; i++) {
if (Arrays.deepEquals(endpointsInDifferentOrder, endpoints)) {
endpointsInDifferentOrder = getEndpoints(proc);
} else {
//Different order of servers, no need to retry.
break;
}
}
assertFalse(Arrays.deepEquals(endpoints, endpointsInDifferentOrder));
}
use of org.neo4j.causalclustering.discovery.CoreTopologyService in project neo4j by neo4j.
the class GetServersProcedureV1Test method ttlShouldBeInSeconds.
@Test
public void ttlShouldBeInSeconds() throws Exception {
// given
final CoreTopologyService coreTopologyService = mock(CoreTopologyService.class);
LeaderLocator leaderLocator = mock(LeaderLocator.class);
final CoreTopology clusterTopology = new CoreTopology(clusterId, false, new HashMap<>());
when(coreTopologyService.coreServers()).thenReturn(clusterTopology);
when(coreTopologyService.readReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));
// set the TTL in minutes
config = config.augment(stringMap(cluster_routing_ttl.name(), "10m"));
final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance());
// when
List<Object[]> results = asList(proc.apply(null, new Object[0]));
// then
Object[] rows = results.get(0);
long ttlInSeconds = (long) rows[0];
assertEquals(600, ttlInSeconds);
}
use of org.neo4j.causalclustering.discovery.CoreTopologyService in project neo4j by neo4j.
the class GetServersProcedureV1Test method shouldReturnNoWriteEndpointsIfThereIsNoAddressForTheLeader.
@Test
public void shouldReturnNoWriteEndpointsIfThereIsNoAddressForTheLeader() throws Exception {
// given
final CoreTopologyService topologyService = mock(CoreTopologyService.class);
Map<MemberId, CoreServerInfo> coreMembers = new HashMap<>();
coreMembers.put(member(0), adressesForCore(0));
when(topologyService.coreServers()).thenReturn(new CoreTopology(clusterId, false, coreMembers));
when(topologyService.readReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));
LeaderLocator leaderLocator = mock(LeaderLocator.class);
when(leaderLocator.getLeader()).thenReturn(member(1));
LegacyGetServersProcedure procedure = new LegacyGetServersProcedure(topologyService, leaderLocator, config, getInstance());
// when
ClusterView clusterView = run(procedure);
// then
ClusterView.Builder builder = new ClusterView.Builder();
builder.readAddress(adressesForCore(0).connectors().boltAddress());
builder.routeAddress(adressesForCore(0).connectors().boltAddress());
assertEquals(builder.build(), clusterView);
}
use of org.neo4j.causalclustering.discovery.CoreTopologyService in project neo4j by neo4j.
the class GetServersProcedureV1Test method shouldReturnNoWriteEndpointsIfThereIsNoLeader.
@Test
public void shouldReturnNoWriteEndpointsIfThereIsNoLeader() throws Exception {
// given
final CoreTopologyService topologyService = mock(CoreTopologyService.class);
Map<MemberId, CoreServerInfo> coreMembers = new HashMap<>();
coreMembers.put(member(0), adressesForCore(0));
when(topologyService.coreServers()).thenReturn(new CoreTopology(clusterId, false, coreMembers));
when(topologyService.readReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));
LeaderLocator leaderLocator = mock(LeaderLocator.class);
when(leaderLocator.getLeader()).thenThrow(new NoLeaderFoundException());
LegacyGetServersProcedure procedure = new LegacyGetServersProcedure(topologyService, leaderLocator, config, getInstance());
// when
ClusterView clusterView = run(procedure);
// then
ClusterView.Builder builder = new ClusterView.Builder();
builder.readAddress(adressesForCore(0).connectors().boltAddress());
builder.routeAddress(adressesForCore(0).connectors().boltAddress());
assertEquals(builder.build(), clusterView);
}
use of org.neo4j.causalclustering.discovery.CoreTopologyService in project neo4j by neo4j.
the class ClusterBinderTest method shouldBindToClusterIdPublishedByAnotherMember.
@Test
public void shouldBindToClusterIdPublishedByAnotherMember() throws Throwable {
// given
ClusterId publishedClusterId = new ClusterId(UUID.randomUUID());
CoreTopology unboundTopology = new CoreTopology(null, false, emptyMap());
CoreTopology boundTopology = new CoreTopology(publishedClusterId, false, emptyMap());
CoreTopologyService topologyService = mock(CoreTopologyService.class);
when(topologyService.coreServers()).thenReturn(unboundTopology).thenReturn(boundTopology);
ClusterBinder binder = new ClusterBinder(new StubClusterIdStorage(), topologyService, NullLogProvider.getInstance(), clock, () -> clock.forward(1, TimeUnit.SECONDS), 3_000, coreBootstrapper);
// when
binder.bindToCluster(null);
// then
Optional<ClusterId> clusterId = binder.get();
assertTrue(clusterId.isPresent());
assertEquals(publishedClusterId, clusterId.get());
verify(topologyService, atLeast(2)).coreServers();
}
Aggregations