Search in sources :

Example 6 with LeaderLocator

use of org.neo4j.causalclustering.core.consensus.LeaderLocator in project neo4j by neo4j.

the class LeaderOnlyLockManagerTest method shouldNotIssueLocksOnNonLeader.

@Test
public void shouldNotIssueLocksOnNonLeader() throws Exception {
    // given
    MemberId me = member(0);
    MemberId leader = member(1);
    ReplicatedLockTokenStateMachine replicatedLockStateMachine = new ReplicatedLockTokenStateMachine(new InMemoryStateStorage(new ReplicatedLockTokenState()));
    DirectReplicator replicator = new DirectReplicator(replicatedLockStateMachine);
    LeaderLocator leaderLocator = mock(LeaderLocator.class);
    when(leaderLocator.getLeader()).thenReturn(leader);
    Locks locks = mock(Locks.class);
    when(locks.newClient()).thenReturn(mock(Locks.Client.class));
    LeaderOnlyLockManager lockManager = new LeaderOnlyLockManager(me, replicator, leaderLocator, locks, replicatedLockStateMachine);
    // when
    Locks.Client lockClient = lockManager.newClient();
    try {
        lockClient.acquireExclusive(LockTracer.NONE, ResourceTypes.NODE, 0L);
        fail("Should have thrown exception");
    } catch (AcquireLockTimeoutException e) {
    // expected
    }
}
Also used : MemberId(org.neo4j.causalclustering.identity.MemberId) InMemoryStateStorage(org.neo4j.causalclustering.core.state.storage.InMemoryStateStorage) AcquireLockTimeoutException(org.neo4j.storageengine.api.lock.AcquireLockTimeoutException) LeaderLocator(org.neo4j.causalclustering.core.consensus.LeaderLocator) DirectReplicator(org.neo4j.causalclustering.core.replication.DirectReplicator) Locks(org.neo4j.kernel.impl.locking.Locks) Test(org.junit.Test)

Example 7 with LeaderLocator

use of org.neo4j.causalclustering.core.consensus.LeaderLocator in project neo4j by neo4j.

the class ClusterOverviewProcedureTest method shouldProvideOverviewOfCoreServersAndReadReplicas.

@Test
public void shouldProvideOverviewOfCoreServersAndReadReplicas() throws Exception {
    // given
    final CoreTopologyService topologyService = mock(CoreTopologyService.class);
    Map<MemberId, CoreServerInfo> coreMembers = new HashMap<>();
    MemberId theLeader = new MemberId(UUID.randomUUID());
    MemberId follower1 = new MemberId(UUID.randomUUID());
    MemberId follower2 = new MemberId(UUID.randomUUID());
    coreMembers.put(theLeader, adressesForCore(0));
    coreMembers.put(follower1, adressesForCore(1));
    coreMembers.put(follower2, adressesForCore(2));
    Map<MemberId, ReadReplicaInfo> replicaMembers = new HashMap<>();
    MemberId replica4 = new MemberId(UUID.randomUUID());
    MemberId replica5 = new MemberId(UUID.randomUUID());
    replicaMembers.put(replica4, addressesForReadReplica(4));
    replicaMembers.put(replica5, addressesForReadReplica(5));
    when(topologyService.coreServers()).thenReturn(new CoreTopology(null, false, coreMembers));
    when(topologyService.readReplicas()).thenReturn(new ReadReplicaTopology(replicaMembers));
    LeaderLocator leaderLocator = mock(LeaderLocator.class);
    when(leaderLocator.getLeader()).thenReturn(theLeader);
    ClusterOverviewProcedure procedure = new ClusterOverviewProcedure(topologyService, leaderLocator, NullLogProvider.getInstance());
    // when
    final RawIterator<Object[], ProcedureException> members = procedure.apply(null, new Object[0]);
    assertThat(members.next(), new IsRecord(theLeader.getUuid(), 5000, Role.LEADER, asSet("core", "core0")));
    assertThat(members.next(), new IsRecord(follower1.getUuid(), 5001, Role.FOLLOWER, asSet("core", "core1")));
    assertThat(members.next(), new IsRecord(follower2.getUuid(), 5002, Role.FOLLOWER, asSet("core", "core2")));
    assertThat(members.next(), new IsRecord(replica4.getUuid(), 6004, Role.READ_REPLICA, asSet("replica", "replica4")));
    assertThat(members.next(), new IsRecord(replica5.getUuid(), 6005, Role.READ_REPLICA, asSet("replica", "replica5")));
    assertFalse(members.hasNext());
}
Also used : ReadReplicaInfo(org.neo4j.causalclustering.discovery.ReadReplicaInfo) HashMap(java.util.HashMap) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) MemberId(org.neo4j.causalclustering.identity.MemberId) LeaderLocator(org.neo4j.causalclustering.core.consensus.LeaderLocator) CoreTopologyService(org.neo4j.causalclustering.discovery.CoreTopologyService) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) ProcedureException(org.neo4j.kernel.api.exceptions.ProcedureException) ReadReplicaTopology(org.neo4j.causalclustering.discovery.ReadReplicaTopology) Test(org.junit.Test)

Example 8 with LeaderLocator

use of org.neo4j.causalclustering.core.consensus.LeaderLocator in project neo4j by neo4j.

the class GetServersProcedureV1Test method shouldProvideReaderAndRouterForSingleCoreSetup.

@Test
public void shouldProvideReaderAndRouterForSingleCoreSetup() throws Exception {
    // given
    final CoreTopologyService coreTopologyService = mock(CoreTopologyService.class);
    LeaderLocator leaderLocator = mock(LeaderLocator.class);
    Map<MemberId, CoreServerInfo> coreMembers = new HashMap<>();
    coreMembers.put(member(0), adressesForCore(0));
    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
    ClusterView clusterView = run(proc);
    // then
    ClusterView.Builder builder = new ClusterView.Builder();
    builder.readAddress(adressesForCore(0).connectors().boltAddress());
    builder.routeAddress(adressesForCore(0).connectors().boltAddress());
    assertEquals(builder.build(), clusterView);
}
Also used : MemberId(org.neo4j.causalclustering.identity.MemberId) LeaderLocator(org.neo4j.causalclustering.core.consensus.LeaderLocator) CoreTopologyService(org.neo4j.causalclustering.discovery.CoreTopologyService) HashMap(java.util.HashMap) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) ReadReplicaTopology(org.neo4j.causalclustering.discovery.ReadReplicaTopology) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) Test(org.junit.Test)

Example 9 with LeaderLocator

use of org.neo4j.causalclustering.core.consensus.LeaderLocator in project neo4j by neo4j.

the class GetServersProcedureV1Test method shouldReturnCoreServersWithRouteAllCoresButLeaderAsReadAndSingleWriteActions.

@Test
public void shouldReturnCoreServersWithRouteAllCoresButLeaderAsReadAndSingleWriteActions() 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
    ClusterView clusterView = run(proc);
    // then
    ClusterView.Builder builder = new ClusterView.Builder();
    builder.writeAddress(adressesForCore(0).connectors().boltAddress());
    builder.readAddress(adressesForCore(1).connectors().boltAddress());
    builder.readAddress(adressesForCore(2).connectors().boltAddress());
    builder.routeAddress(adressesForCore(0).connectors().boltAddress());
    builder.routeAddress(adressesForCore(1).connectors().boltAddress());
    builder.routeAddress(adressesForCore(2).connectors().boltAddress());
    assertEquals(builder.build(), clusterView);
}
Also used : MemberId(org.neo4j.causalclustering.identity.MemberId) LeaderLocator(org.neo4j.causalclustering.core.consensus.LeaderLocator) CoreTopologyService(org.neo4j.causalclustering.discovery.CoreTopologyService) HashMap(java.util.HashMap) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) ReadReplicaTopology(org.neo4j.causalclustering.discovery.ReadReplicaTopology) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) Test(org.junit.Test)

Example 10 with LeaderLocator

use of org.neo4j.causalclustering.core.consensus.LeaderLocator in project neo4j by neo4j.

the class GetServersProcedureV1Test method shouldReturnSelfIfOnlyMemberOfTheCluster.

@Test
public void shouldReturnSelfIfOnlyMemberOfTheCluster() 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));
    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
    ClusterView clusterView = run(proc);
    // then
    ClusterView.Builder builder = new ClusterView.Builder();
    builder.writeAddress(adressesForCore(0).connectors().boltAddress());
    builder.readAddress(adressesForCore(0).connectors().boltAddress());
    builder.routeAddress(adressesForCore(0).connectors().boltAddress());
    assertEquals(builder.build(), clusterView);
}
Also used : MemberId(org.neo4j.causalclustering.identity.MemberId) LeaderLocator(org.neo4j.causalclustering.core.consensus.LeaderLocator) CoreTopologyService(org.neo4j.causalclustering.discovery.CoreTopologyService) HashMap(java.util.HashMap) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) ReadReplicaTopology(org.neo4j.causalclustering.discovery.ReadReplicaTopology) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)12 LeaderLocator (org.neo4j.causalclustering.core.consensus.LeaderLocator)12 MemberId (org.neo4j.causalclustering.identity.MemberId)11 CoreTopology (org.neo4j.causalclustering.discovery.CoreTopology)10 CoreTopologyService (org.neo4j.causalclustering.discovery.CoreTopologyService)10 ReadReplicaTopology (org.neo4j.causalclustering.discovery.ReadReplicaTopology)10 HashMap (java.util.HashMap)9 CoreServerInfo (org.neo4j.causalclustering.discovery.CoreServerInfo)9 DirectReplicator (org.neo4j.causalclustering.core.replication.DirectReplicator)2 InMemoryStateStorage (org.neo4j.causalclustering.core.state.storage.InMemoryStateStorage)2 Locks (org.neo4j.kernel.impl.locking.Locks)2 NoLeaderFoundException (org.neo4j.causalclustering.core.consensus.NoLeaderFoundException)1 ReadReplicaInfo (org.neo4j.causalclustering.discovery.ReadReplicaInfo)1 ProcedureException (org.neo4j.kernel.api.exceptions.ProcedureException)1 AcquireLockTimeoutException (org.neo4j.storageengine.api.lock.AcquireLockTimeoutException)1