@Override
@Deprecated(forRemoval = true)
- public void setReplicatedLog(final ReplicatedLog replicatedLog) {
- this.replicatedLog = replicatedLog;
+ public final void setReplicatedLog(final ReplicatedLog replicatedLog) {
+ resetReplicatedLog(replicatedLog);
+ }
+
+ @Deprecated(forRemoval = true)
+ public final void resetReplicatedLog(final @NonNull ReplicatedLog newState) {
+ this.replicatedLog = requireNonNull(newState);
}
@Override
public MockRaftActorContext(final int payloadVersion) {
super(null, null, newLocalAccess("test"), new HashMap<>(), new DefaultConfigParamsImpl(),
(short) payloadVersion, TestDataProvider.INSTANCE, applyState -> { }, MoreExecutors.directExecutor());
- setReplicatedLog(new MockReplicatedLogBuilder().build());
+ resetReplicatedLog(new MockReplicatedLogBuilder().build());
}
public MockRaftActorContext(final String id, final ActorSystem system, final ActorRef actor,
long term = currentTerm();
replicatedLog.append(new SimpleReplicatedLogEntry(0, term, new MockPayload("1")));
replicatedLog.append(new SimpleReplicatedLogEntry(1, term, new MockPayload("2")));
- setReplicatedLog(replicatedLog);
+ resetReplicatedLog(replicatedLog);
replicatedLog.setCommitIndex(replicatedLog.lastIndex());
replicatedLog.setLastApplied(replicatedLog.lastIndex());
}
var followerLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
followerLog.setCommitIndex(2);
followerLog.setLastApplied(2);
- followerActorContext.setReplicatedLog(followerLog);
+ followerActorContext.resetReplicatedLog(followerLog);
Follower follower = new Follower(followerActorContext);
followerActor.underlyingActor().setBehavior(follower);
LOG.info("testAddServerWithNoExistingFollower starting");
setupNewFollower();
- RaftActorContext initialActorContext = new MockRaftActorContext();
+ final var initialActorContext = new MockRaftActorContext();
final var initialLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 2, 1).build();
initialLog.setCommitIndex(1);
initialLog.setLastApplied(1);
- initialActorContext.setReplicatedLog(initialLog);
+ initialActorContext.resetReplicatedLog(initialLog);
TestActorRef<MockLeaderRaftActor> leaderActor = actorFactory.createTestActor(
MockLeaderRaftActor.props(stateDir(), Map.of(), initialActorContext)
leaderActorContext.setConfigParams(configParams);
- leaderActorContext.setReplicatedLog(
+ leaderActorContext.resetReplicatedLog(
new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(1,5,1).build());
Map<String, String> peerAddresses = new HashMap<>();
//log has 1 entry with replicatedToAllIndex = 0, does not do anything, returns the
var log = new MockReplicatedLogBuilder().createEntries(0, 1, 1).build();
log.setLastApplied(0);
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
abstractBehavior.performSnapshotWithoutCapture(0);
assertEquals(-1, abstractBehavior.getReplicatedToAllIndex());
assertEquals(1, log.size());
//2 entries, lastApplied still 0, no purging.
log = new MockReplicatedLogBuilder().createEntries(0, 2, 1).build();
log.setLastApplied(0);
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
abstractBehavior.performSnapshotWithoutCapture(0);
assertEquals(-1, abstractBehavior.getReplicatedToAllIndex());
assertEquals(2, context.getReplicatedLog().size());
//2 entries, lastApplied still 0, no purging.
log = new MockReplicatedLogBuilder().createEntries(0, 2, 1).build();
log.setLastApplied(1);
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
abstractBehavior.performSnapshotWithoutCapture(0);
assertEquals(0, abstractBehavior.getReplicatedToAllIndex());
assertEquals(1, context.getReplicatedLog().size());
// 1 will only get purged
log = new MockReplicatedLogBuilder().createEntries(0, 5, 1).build();
log.setLastApplied(2);
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
abstractBehavior.performSnapshotWithoutCapture(3);
assertEquals(1, abstractBehavior.getReplicatedToAllIndex());
assertEquals(3, context.getReplicatedLog().size());
// scenario where Last applied > Replicated to all index (becoz of a slow follower)
log = new MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
log.setLastApplied(2);
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
abstractBehavior.performSnapshotWithoutCapture(1);
assertEquals(1, abstractBehavior.getReplicatedToAllIndex());
assertEquals(1, context.getReplicatedLog().size());
final ReplicatedLogEntry logEntry) {
final var log = new SimpleReplicatedLog();
log.append(logEntry);
- actorContext.setReplicatedLog(log);
+ actorContext.resetReplicatedLog(log);
return log;
}
final var log = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 5, 1).build();
log.setCommitIndex(log.lastIndex());
log.setLastApplied(log.lastIndex());
- raftActorContext.setReplicatedLog(log);
+ raftActorContext.resetReplicatedLog(log);
raftActorContext.setPeerAddresses(setupPeers(4));
candidate = new Candidate(raftActorContext);
public void testBecomeLeaderOnReceivingMajorityVotesWithNonVotingPeers() {
final var raftActorContext = createActorContext();
raftActorContext.setPeerAddresses(setupPeers(4));
- raftActorContext.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
+ raftActorContext.resetReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
raftActorContext.getPeerInfo("peer1").setVotingState(VotingState.NON_VOTING);
raftActorContext.getPeerInfo("peer4").setVotingState(VotingState.NON_VOTING);
candidate = new Candidate(raftActorContext);
logStart("testHandleAppendEntriesSenderPrevLogIndexIsInTheSnapshot");
MockRaftActorContext context = createActorContext();
- context.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(5, 8, 3).build());
- context.getReplicatedLog().setSnapshotIndex(4);
- context.getReplicatedLog().setSnapshotTerm(3);
+ final var log = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(5, 8, 3).build();
+ log.setSnapshotIndex(4);
+ log.setSnapshotTerm(3);
+ context.resetReplicatedLog(log);
AppendEntries appendEntries = new AppendEntries(3, "leader", 1, 3, List.of(), 8, -1, (short)0);
log.append(newReplicatedLogEntry(1, 1, "one"));
log.append(newReplicatedLogEntry(1, 2, "two"));
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
// Prepare the entries to be sent with AppendEntries
List<ReplicatedLogEntry> entries = List.of(
log.append(newReplicatedLogEntry(1, 1, "one"));
log.append(newReplicatedLogEntry(1, 2, "two"));
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
// Prepare the entries to be sent with AppendEntries
List<ReplicatedLogEntry> entries = List.of(
log.append(newReplicatedLogEntry(1, 1, "one"));
log.append(newReplicatedLogEntry(1, 2, "two"));
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
// Prepare the entries to be sent with AppendEntries
List<ReplicatedLogEntry> entries = List.of(
log.append(newReplicatedLogEntry(1, 1, "one"));
log.append(newReplicatedLogEntry(1, 2, "two"));
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
// Prepare the entries to be sent with AppendEntries
List<ReplicatedLogEntry> entries = List.of(newReplicatedLogEntry(1, 4, "four"));
log.append(newReplicatedLogEntry(1, 0, "zero"));
log.append(newReplicatedLogEntry(1, 1, "one"));
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
// Send the last entry again.
List<ReplicatedLogEntry> entries = List.of(newReplicatedLogEntry(1, 1, "one"));
log.setSnapshotIndex(3);
log.setSnapshotTerm(1);
- context.setReplicatedLog(log);
+ context.resetReplicatedLog(log);
// Prepare the entries to be sent with AppendEntries
List<ReplicatedLogEntry> entries = List.of(newReplicatedLogEntry(1, 4, "four"));
logStart("testNeedsLeaderAddress");
MockRaftActorContext context = createActorContext();
- context.setReplicatedLog(new MockRaftActorContext.SimpleReplicatedLog());
+ context.resetReplicatedLog(new MockRaftActorContext.SimpleReplicatedLog());
context.addToPeers("leader", null, VotingState.VOTING);
((DefaultConfigParamsImpl)context.getConfigParams()).setPeerAddressResolver(NoopPeerAddressResolver.INSTANCE);
//create 3 entries
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
leaderLog.setCommitIndex(1);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
// follower too has the exact same log entries and has the same commit index
followerActorContext.getReplicatedLog().removeFrom(0);
final var followerLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
followerLog.setCommitIndex(1);
- followerActorContext.setReplicatedLog(followerLog);
+ followerActorContext.resetReplicatedLog(followerLog);
leader = new Leader(leaderActorContext);
leaderActorContext.setCurrentBehavior(leader);
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
leaderLog.setCommitIndex(1);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
// follower has the same log entries but its commit index > leaders commit index
followerActorContext.getReplicatedLog().removeFrom(0);
final var followerLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
followerLog.setCommitIndex(2);
- followerActorContext.setReplicatedLog(followerLog);
+ followerActorContext.resetReplicatedLog(followerLog);
leader = new Leader(leaderActorContext);
final var leaderCommitIndex = 2;
leaderLog.setCommitIndex(leaderCommitIndex);
leaderLog.setLastApplied(leaderCommitIndex);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
final var leadersSecondLogEntry = leaderActorContext.getReplicatedLog().get(1);
final var leadersThirdLogEntry = leaderActorContext.getReplicatedLog().get(2);
var followerLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 1, 1).build();
followerLog.setCommitIndex(0);
followerLog.setLastApplied(0);
- followerActorContext.setReplicatedLog(followerLog);
+ followerActorContext.resetReplicatedLog(followerLog);
Follower follower = new Follower(followerActorContext);
followerActor.underlyingActor().setBehavior(follower);
final var leadersSecondLogEntry = leaderLog.get(1);
leaderLog.setCommitIndex(leaderCommitIndex);
leaderLog.setLastApplied(leaderCommitIndex);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
final var followerActorContext = createFollowerActorContextWithLeader();
- followerActorContext.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
+ followerActorContext.resetReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
Follower follower = new Follower(followerActorContext);
followerActor.underlyingActor().setBehavior(follower);
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 2, 2).build();
leaderLog.setCommitIndex(leaderCommitIndex);
leaderLog.setLastApplied(leaderCommitIndex);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
final ReplicatedLogEntry leadersFirstLogEntry = leaderActorContext.getReplicatedLog().get(0);
final ReplicatedLogEntry leadersSecondLogEntry = leaderActorContext.getReplicatedLog().get(1);
MockRaftActorContext followerActorContext = createFollowerActorContextWithLeader();
- followerActorContext.setReplicatedLog(
+ followerActorContext.resetReplicatedLog(
new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 1, 1).build());
Follower follower = new Follower(followerActorContext);
MockRaftActorContext leaderActorContext = createActorContext();
((DefaultConfigParamsImpl) leaderActorContext.getConfigParams()).setHeartBeatInterval(Duration.ofSeconds(1000));
- leaderActorContext.setReplicatedLog(
+ leaderActorContext.resetReplicatedLog(
new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 2, 2).build());
leader = new Leader(leaderActorContext);
MockRaftActorContext leaderActorContext = createActorContext();
((DefaultConfigParamsImpl) leaderActorContext.getConfigParams()).setHeartBeatInterval(Duration.ofSeconds(1000));
- leaderActorContext.setReplicatedLog(
+ leaderActorContext.resetReplicatedLog(
new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(0, 2, 2).build());
leaderActorContext.setRaftPolicy(createRaftPolicy(false, false));
final var log = new MockReplicatedLogBuilder().createEntries(0, 3, 1).build();
log.setCommitIndex(1);
log.setLastApplied(1);
- leaderActorContext.setReplicatedLog(log);
+ leaderActorContext.resetReplicatedLog(log);
leaderActorContext.setTermInfo(new TermInfo(1, "leader"));
leader = new Leader(leaderActorContext);
final var leaderCommitIndex = 3;
leaderLog.setCommitIndex(leaderCommitIndex);
leaderLog.setLastApplied(leaderCommitIndex);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
final var leadersFirstLogEntry = leaderLog.get(0);
final var leadersSecondLogEntry = leaderLog.get(1);
var followerLog = new MockRaftActorContext.MockReplicatedLogBuilder().build();
followerLog.setCommitIndex(-1);
followerLog.setLastApplied(-1);
- followerActorContext.setReplicatedLog(followerLog);
+ followerActorContext.resetReplicatedLog(followerLog);
Follower follower = new Follower(followerActorContext);
followerActor.underlyingActor().setBehavior(follower);
leaderActorContext.setConfigParams(configParams);
- leaderActorContext.setReplicatedLog(
+ leaderActorContext.resetReplicatedLog(
new MockRaftActorContext.MockReplicatedLogBuilder().createEntries(1,5,1).build());
Map<String, String> peerAddresses = new HashMap<>();
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().build();
leaderLog.setCommitIndex(-1);
leaderLog.setLastApplied(-1);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
String nonVotingFollowerId = "nonvoting-follower";
ActorRef nonVotingFollowerActor = actorFactory.createActor(
MockRaftActorContext leaderActorContext = createActorContextWithFollower();
((DefaultConfigParamsImpl) leaderActorContext.getConfigParams()).setHeartBeatInterval(Duration.ofSeconds(1000));
- leaderActorContext.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
+ leaderActorContext.resetReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
leader = new Leader(leaderActorContext);
leaderActorContext.setCurrentBehavior(leader);
MockRaftActorContext leaderActorContext = createActorContextWithFollower();
((DefaultConfigParamsImpl) leaderActorContext.getConfigParams()).setHeartBeatInterval(Duration.ofSeconds(1000));
- leaderActorContext.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
+ leaderActorContext.resetReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
leader = new Leader(leaderActorContext);
leaderActorContext.setCurrentBehavior(leader);
MockRaftActorContext leaderActorContext = createActorContextWithFollower();
((DefaultConfigParamsImpl) leaderActorContext.getConfigParams()).setHeartBeatInterval(Duration.ofMillis(200));
((DefaultConfigParamsImpl) leaderActorContext.getConfigParams()).setElectionTimeoutFactor(2);
- leaderActorContext.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
+ leaderActorContext.resetReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder().build());
leader = new Leader(leaderActorContext);
leaderActorContext.setCurrentBehavior(leader);
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().build();
leaderLog.setCommitIndex(-1);
leaderLog.setLastApplied(-1);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
leader = new Leader(leaderActorContext);
leaderActorContext.setCurrentBehavior(leader);
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().build();
leaderLog.setCommitIndex(-1);
leaderLog.setLastApplied(-1);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
final long term = leaderActorContext.currentTerm();
leader = new Leader(leaderActorContext);
final var leaderLog = new MockRaftActorContext.MockReplicatedLogBuilder().build();
leaderLog.setCommitIndex(-1);
leaderLog.setLastApplied(-1);
- leaderActorContext.setReplicatedLog(leaderLog);
+ leaderActorContext.resetReplicatedLog(leaderLog);
((DefaultConfigParamsImpl)leaderActorContext.getConfigParams()).setPeerAddressResolver(
peerId -> leaderActor.path().toString());
candidateReplicatedLog.setCommitIndex(candidateReplicatedLog.lastIndex());
candidateReplicatedLog.setLastApplied(candidateReplicatedLog.lastIndex());
- member3Context.setReplicatedLog(candidateReplicatedLog);
+ member3Context.resetReplicatedLog(candidateReplicatedLog);
member3Context.setTermInfo(new TermInfo(2, member1Context.getId()));
// The member 3 Candidate will start a new term and send RequestVotes. However it will be
replicatedLog.setCommitIndex(replicatedLog.lastIndex());
replicatedLog.setLastApplied(replicatedLog.lastIndex());
- member2Context.setReplicatedLog(replicatedLog);
+ member2Context.resetReplicatedLog(replicatedLog);
member2Context.setTermInfo(new TermInfo(3, "member1"));
member2Actor.self().tell(new SetBehavior(new Follower(member2Context), member2Context),
replicatedLog.setCommitIndex(replicatedLog.lastIndex());
replicatedLog.setLastApplied(replicatedLog.lastIndex());
- member1Context.setReplicatedLog(replicatedLog);
+ member1Context.resetReplicatedLog(replicatedLog);
member1Context.setTermInfo(new TermInfo(3, "member1"));
initializeLeaderBehavior(member1Actor, member1Context, 1);