Code Review
/
controller.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Bug 3020: Add leader version to LeaderStateChanged
[controller.git]
/
opendaylight
/
md-sal
/
sal-akka-raft
/
src
/
main
/
java
/
org
/
opendaylight
/
controller
/
cluster
/
raft
/
behaviors
/
Candidate.java
diff --git
a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Candidate.java
b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Candidate.java
index 09ffe056c3e94fcd4592f8f44f4e29123967f918..74bede171f1f6e6ad6b33feef6806d3c77321581 100644
(file)
--- a/
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Candidate.java
+++ b/
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Candidate.java
@@
-47,25
+47,32
@@
public class Candidate extends AbstractRaftActorBehavior {
private final Set<String> peers;
public Candidate(RaftActorContext context) {
private final Set<String> peers;
public Candidate(RaftActorContext context) {
- super(context);
+ super(context
, RaftState.Candidate
);
peers = context.getPeerAddresses().keySet();
if(LOG.isDebugEnabled()) {
peers = context.getPeerAddresses().keySet();
if(LOG.isDebugEnabled()) {
- LOG.debug("{}: Election: Candidate has following peers: {}",
context.getId
(), peers);
+ LOG.debug("{}: Election: Candidate has following peers: {}",
logName
(), peers);
}
votesRequired = getMajorityVoteCount(peers.size());
startNewTerm();
}
votesRequired = getMajorityVoteCount(peers.size());
startNewTerm();
- scheduleElection(electionDuration());
+
+ if(context.getPeerAddresses().isEmpty()){
+ actor().tell(ELECTION_TIMEOUT, actor());
+ } else {
+ scheduleElection(electionDuration());
+ }
+
+
}
@Override protected RaftActorBehavior handleAppendEntries(ActorRef sender,
AppendEntries appendEntries) {
if(LOG.isDebugEnabled()) {
}
@Override protected RaftActorBehavior handleAppendEntries(ActorRef sender,
AppendEntries appendEntries) {
if(LOG.isDebugEnabled()) {
- LOG.debug("{}: handleAppendEntries: {}",
context.getId
(), appendEntries);
+ LOG.debug("{}: handleAppendEntries: {}",
logName
(), appendEntries);
}
return this;
}
return this;
@@
-78,7
+85,10
@@
public class Candidate extends AbstractRaftActorBehavior {
}
@Override protected RaftActorBehavior handleRequestVoteReply(ActorRef sender,
}
@Override protected RaftActorBehavior handleRequestVoteReply(ActorRef sender,
- RequestVoteReply requestVoteReply) {
+ RequestVoteReply requestVoteReply) {
+
+ LOG.debug("{}: handleRequestVoteReply: {}, current voteCount: {}", logName(), requestVoteReply,
+ voteCount);
if (requestVoteReply.isVoteGranted()) {
voteCount++;
if (requestVoteReply.isVoteGranted()) {
voteCount++;
@@
-91,10
+101,6
@@
public class Candidate extends AbstractRaftActorBehavior {
return this;
}
return this;
}
- @Override public RaftState state() {
- return RaftState.Candidate;
- }
-
@Override
public RaftActorBehavior handleMessage(ActorRef sender, Object originalMessage) {
@Override
public RaftActorBehavior handleMessage(ActorRef sender, Object originalMessage) {
@@
-105,7
+111,7
@@
public class Candidate extends AbstractRaftActorBehavior {
RaftRPC rpc = (RaftRPC) message;
if(LOG.isDebugEnabled()) {
RaftRPC rpc = (RaftRPC) message;
if(LOG.isDebugEnabled()) {
- LOG.debug("{}: RaftRPC message received {}
my term is {}", context.getId
(), rpc,
+ LOG.debug("{}: RaftRPC message received {}
, my term is {}", logName
(), rpc,
context.getTermInformation().getCurrentTerm());
}
context.getTermInformation().getCurrentTerm());
}
@@
-120,6
+126,8
@@
public class Candidate extends AbstractRaftActorBehavior {
}
if (message instanceof ElectionTimeout) {
}
if (message instanceof ElectionTimeout) {
+ LOG.debug("{}: Received ElectionTimeout", logName());
+
if (votesRequired == 0) {
// If there are no peers then we should be a Leader
// We wait for the election timeout to occur before declare
if (votesRequired == 0) {
// If there are no peers then we should be a Leader
// We wait for the election timeout to occur before declare
@@
-146,12
+154,10
@@
public class Candidate extends AbstractRaftActorBehavior {
// Increment the election term and vote for self
long currentTerm = context.getTermInformation().getCurrentTerm();
// Increment the election term and vote for self
long currentTerm = context.getTermInformation().getCurrentTerm();
- context.getTermInformation().updateAndPersist(currentTerm + 1,
-
context.getId());
+ long newTerm = currentTerm + 1;
+
context.getTermInformation().updateAndPersist(newTerm,
context.getId());
- if(LOG.isDebugEnabled()) {
- LOG.debug("{}: Starting new term {}", context.getId(), (currentTerm + 1));
- }
+ LOG.debug("{}: Starting new term {}", logName(), newTerm);
// Request for a vote
// TODO: Retry request for vote if replies do not arrive in a reasonable
// Request for a vote
// TODO: Retry request for vote if replies do not arrive in a reasonable
@@
-159,17
+165,17
@@
public class Candidate extends AbstractRaftActorBehavior {
for (String peerId : peers) {
ActorSelection peerActor = context.getPeerActorSelection(peerId);
if(peerActor != null) {
for (String peerId : peers) {
ActorSelection peerActor = context.getPeerActorSelection(peerId);
if(peerActor != null) {
-
peerActor.tell(
new RequestVote(
+
RequestVote requestVote =
new RequestVote(
context.getTermInformation().getCurrentTerm(),
context.getId(),
context.getReplicatedLog().lastIndex(),
context.getTermInformation().getCurrentTerm(),
context.getId(),
context.getReplicatedLog().lastIndex(),
- context.getReplicatedLog().lastTerm()),
- context.getActor()
- );
- }
- }
+ context.getReplicatedLog().lastTerm());
+ LOG.debug("{}: Sending {} to peer {}", logName(), requestVote, peerId);
+ peerActor.tell(requestVote, context.getActor());
+ }
+ }
}
@Override public void close() throws Exception {
}
@Override public void close() throws Exception {