Search in sources :

Example 16 with ControlledRenewableTimeoutService

use of org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService in project neo4j by neo4j.

the class ElectionTest method candidateShouldLoseElectionAndRemainCandidate.

@Test
public void candidateShouldLoseElectionAndRemainCandidate() throws Exception {
    // Note the etcd implementation seems to diverge from the paper here, since the paper suggests that it should
    // remain as a candidate
    // given
    FakeClock fakeClock = Clocks.fakeClock();
    ControlledRenewableTimeoutService timeouts = new ControlledRenewableTimeoutService(fakeClock);
    RaftMachine raft = new RaftMachineBuilder(myself, 3, RaftTestMemberSetBuilder.INSTANCE).outbound(outbound).timeoutService(timeouts).clock(fakeClock).build();
    raft.installCoreState(new RaftCoreState(new MembershipEntry(0, asSet(myself, member1, member2))));
    raft.startTimers();
    timeouts.invokeTimeout(RaftMachine.Timeouts.ELECTION);
    // when
    raft.handle(voteResponse().from(member1).term(1).deny().build());
    raft.handle(voteResponse().from(member2).term(1).deny().build());
    // then
    assertEquals(1, raft.term());
    assertEquals(CANDIDATE, raft.currentRole());
    verify(outbound, never()).send(eq(member1), isA(RaftMessages.AppendEntries.Request.class));
    verify(outbound, never()).send(eq(member2), isA(RaftMessages.AppendEntries.Request.class));
}
Also used : RaftMachine(org.neo4j.causalclustering.core.consensus.RaftMachine) RaftMachineBuilder(org.neo4j.causalclustering.core.consensus.RaftMachineBuilder) MembershipEntry(org.neo4j.causalclustering.core.consensus.membership.MembershipEntry) RaftCoreState(org.neo4j.causalclustering.core.state.snapshot.RaftCoreState) FakeClock(org.neo4j.time.FakeClock) TestMessageBuilders.voteRequest(org.neo4j.causalclustering.core.consensus.TestMessageBuilders.voteRequest) RaftMessages(org.neo4j.causalclustering.core.consensus.RaftMessages) ControlledRenewableTimeoutService(org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService) Test(org.junit.Test)

Example 17 with ControlledRenewableTimeoutService

use of org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService in project neo4j by neo4j.

the class ElectionTest method candidateShouldWinElectionAndBecomeLeader.

@Test
public void candidateShouldWinElectionAndBecomeLeader() throws Exception {
    // given
    FakeClock fakeClock = Clocks.fakeClock();
    ControlledRenewableTimeoutService timeouts = new ControlledRenewableTimeoutService(fakeClock);
    RaftMachine raft = new RaftMachineBuilder(myself, 3, RaftTestMemberSetBuilder.INSTANCE).outbound(outbound).timeoutService(timeouts).clock(fakeClock).build();
    raft.installCoreState(new RaftCoreState(new MembershipEntry(0, asSet(myself, member1, member2))));
    raft.startTimers();
    timeouts.invokeTimeout(RaftMachine.Timeouts.ELECTION);
    // when
    raft.handle(voteResponse().from(member1).term(1).grant().build());
    raft.handle(voteResponse().from(member2).term(1).grant().build());
    // then
    assertEquals(1, raft.term());
    assertEquals(LEADER, raft.currentRole());
    verify(outbound).send(eq(member1), isA(RaftMessages.AppendEntries.Request.class));
    verify(outbound).send(eq(member2), isA(RaftMessages.AppendEntries.Request.class));
}
Also used : RaftMachine(org.neo4j.causalclustering.core.consensus.RaftMachine) RaftMachineBuilder(org.neo4j.causalclustering.core.consensus.RaftMachineBuilder) MembershipEntry(org.neo4j.causalclustering.core.consensus.membership.MembershipEntry) RaftCoreState(org.neo4j.causalclustering.core.state.snapshot.RaftCoreState) FakeClock(org.neo4j.time.FakeClock) TestMessageBuilders.voteRequest(org.neo4j.causalclustering.core.consensus.TestMessageBuilders.voteRequest) RaftMessages(org.neo4j.causalclustering.core.consensus.RaftMessages) ControlledRenewableTimeoutService(org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService) Test(org.junit.Test)

Example 18 with ControlledRenewableTimeoutService

use of org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService in project neo4j by neo4j.

the class ElectionTest method candidateShouldVoteForTheSameCandidateInTheSameTerm.

@Test
public void candidateShouldVoteForTheSameCandidateInTheSameTerm() throws Exception {
    // given
    FakeClock fakeClock = Clocks.fakeClock();
    ControlledRenewableTimeoutService timeouts = new ControlledRenewableTimeoutService(fakeClock);
    RaftMachine raft = new RaftMachineBuilder(myself, 3, RaftTestMemberSetBuilder.INSTANCE).outbound(outbound).timeoutService(timeouts).clock(fakeClock).build();
    raft.installCoreState(new RaftCoreState(new MembershipEntry(0, asSet(myself, member1, member2))));
    // when
    raft.handle(voteRequest().from(member1).candidate(member1).term(1).build());
    raft.handle(voteRequest().from(member1).candidate(member1).term(1).build());
    // then
    verify(outbound, times(2)).send(member1, voteResponse().term(1).grant().build());
}
Also used : RaftMachine(org.neo4j.causalclustering.core.consensus.RaftMachine) RaftMachineBuilder(org.neo4j.causalclustering.core.consensus.RaftMachineBuilder) MembershipEntry(org.neo4j.causalclustering.core.consensus.membership.MembershipEntry) RaftCoreState(org.neo4j.causalclustering.core.state.snapshot.RaftCoreState) FakeClock(org.neo4j.time.FakeClock) ControlledRenewableTimeoutService(org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)18 ControlledRenewableTimeoutService (org.neo4j.causalclustering.core.consensus.schedule.ControlledRenewableTimeoutService)18 MembershipEntry (org.neo4j.causalclustering.core.consensus.membership.MembershipEntry)17 RaftCoreState (org.neo4j.causalclustering.core.state.snapshot.RaftCoreState)17 FakeClock (org.neo4j.time.FakeClock)17 RaftMachine (org.neo4j.causalclustering.core.consensus.RaftMachine)3 RaftMachineBuilder (org.neo4j.causalclustering.core.consensus.RaftMachineBuilder)3 TestMessageBuilders.voteRequest (org.neo4j.causalclustering.core.consensus.TestMessageBuilders.voteRequest)3 RaftMessages (org.neo4j.causalclustering.core.consensus.RaftMessages)2 TestMessageBuilders.appendEntriesRequest (org.neo4j.causalclustering.core.consensus.TestMessageBuilders.appendEntriesRequest)1 InMemoryRaftLog (org.neo4j.causalclustering.core.consensus.log.InMemoryRaftLog)1 RaftLogEntry (org.neo4j.causalclustering.core.consensus.log.RaftLogEntry)1 MemberIdSet (org.neo4j.causalclustering.core.consensus.membership.MemberIdSet)1 MemberId (org.neo4j.causalclustering.identity.MemberId)1 Inbound (org.neo4j.causalclustering.messaging.Inbound)1 Monitors (org.neo4j.kernel.monitoring.Monitors)1