/*
* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.controller.cluster.raft.behaviors;
import akka.actor.ActorRef;
import org.opendaylight.controller.cluster.raft.RaftActorContext;
import org.opendaylight.controller.cluster.raft.RaftState;
import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
import org.opendaylight.controller.cluster.raft.messages.RequestVote;
import org.opendaylight.controller.cluster.raft.messages.RequestVoteReply;
import java.util.List;
/**
* The behavior of a RaftActor when it is in the CandidateState
*
* Candidates (ยง5.2):
*
* - On conversion to candidate, start election:
*
* - Increment currentTerm
*
- Vote for self
*
- Reset election timer
*
- Send RequestVote RPCs to all other servers
*
* - If votes received from majority of servers: become leader
*
- If AppendEntries RPC received from new leader: convert to
* follower
*
- If election timeout elapses: start new election
*
*/
public class Candidate extends AbstractRaftActorBehavior {
private final List peers;
public Candidate(RaftActorContext context, List peers) {
super(context);
this.peers = peers;
}
@Override protected RaftState handleAppendEntries(ActorRef sender,
AppendEntries appendEntries, RaftState suggestedState) {
return suggestedState;
}
@Override protected RaftState handleAppendEntriesReply(ActorRef sender,
AppendEntriesReply appendEntriesReply, RaftState suggestedState) {
return suggestedState;
}
@Override protected RaftState handleRequestVote(ActorRef sender,
RequestVote requestVote, RaftState suggestedState) {
return suggestedState;
}
@Override protected RaftState handleRequestVoteReply(ActorRef sender,
RequestVoteReply requestVoteReply, RaftState suggestedState) {
return suggestedState;
}
@Override protected RaftState state() {
return RaftState.Candidate;
}
@Override
public RaftState handleMessage(ActorRef sender, Object message) {
return super.handleMessage(sender, message);
}
}