Documentation ¶
Index ¶
- Constants
- func DPrintf(format string, a ...interface{}) (n int, err error)
- type AppendEntriesArgs
- type AppendEntriesMessage
- type AppendEntriesReply
- type ApplyMsg
- type Candidate
- func (c *Candidate) AppendEntries(rf *Raft, args AppendEntriesArgs, reply *AppendEntriesReply)
- func (c *Candidate) HandleRequestVote(rf *Raft, server int, args RequestVoteArgs)
- func (c *Candidate) Kill(rf *Raft)
- func (c *Candidate) RequestVote(rf *Raft, args RequestVoteArgs, reply *RequestVoteReply)
- func (c *Candidate) Start(rf *Raft, command interface{}) (int, int, bool)
- func (c *Candidate) Wait(rf *Raft)
- type Entry
- type Follower
- func (f *Follower) AppendEntries(rf *Raft, args AppendEntriesArgs, reply *AppendEntriesReply)
- func (f *Follower) Kill(rf *Raft)
- func (f *Follower) RequestVote(rf *Raft, args RequestVoteArgs, reply *RequestVoteReply)
- func (f *Follower) Start(rf *Raft, command interface{}) (int, int, bool)
- func (f *Follower) Wait(rf *Raft)
- type Leader
- func (l *Leader) AppendEntries(rf *Raft, args AppendEntriesArgs, reply *AppendEntriesReply)
- func (l *Leader) HandleAppendEntries(rf *Raft, server int)
- func (l *Leader) HandleOneAppendEntries(rf *Raft, server int, args AppendEntriesArgs)
- func (l *Leader) Kill(rf *Raft)
- func (l *Leader) RequestVote(rf *Raft, args RequestVoteArgs, reply *RequestVoteReply)
- func (l *Leader) Start(rf *Raft, command interface{}) (int, int, bool)
- type Log
- type Persister
- type Raft
- func (rf *Raft) AppendEntries(args AppendEntriesArgs, reply *AppendEntriesReply) error
- func (rf *Raft) Commit()
- func (rf *Raft) GetState() (int, bool)
- func (rf *Raft) Kill()
- func (rf *Raft) RequestVote(args RequestVoteArgs, reply *RequestVoteReply) error
- func (rf *Raft) SetState(state State)
- func (rf *Raft) Start(command interface{}) (int, int, bool)
- type RequestVoteArgs
- type RequestVoteReply
- type State
Constants ¶
const ( ElectionTimeoutMin = 150 ElectionTimeoutMax = 300 HeartbeatTimeout = 50 )
const Debug = 0
Debugging
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AppendEntriesArgs ¶
type AppendEntriesMessage ¶
type AppendEntriesMessage struct { Args AppendEntriesArgs Reply AppendEntriesReply }
type AppendEntriesReply ¶
type ApplyMsg ¶
type ApplyMsg struct { Index int Command interface{} UseSnapshot bool // ignore for lab2; only used in lab3 Snapshot []byte // ignore for lab2; only used in lab3 }
as each Raft peer becomes aware that successive log entries are committed, the peer should send an ApplyMsg to the service (or tester) on the same server, via the applyCh passed to Make().
type Candidate ¶
type Candidate struct {
// contains filtered or unexported fields
}
func (*Candidate) AppendEntries ¶
func (c *Candidate) AppendEntries(rf *Raft, args AppendEntriesArgs, reply *AppendEntriesReply)
func (*Candidate) HandleRequestVote ¶
func (c *Candidate) HandleRequestVote(rf *Raft, server int, args RequestVoteArgs)
func (*Candidate) RequestVote ¶
func (c *Candidate) RequestVote(rf *Raft, args RequestVoteArgs, reply *RequestVoteReply)
type Follower ¶
type Follower struct {
// contains filtered or unexported fields
}
func (*Follower) AppendEntries ¶
func (f *Follower) AppendEntries(rf *Raft, args AppendEntriesArgs, reply *AppendEntriesReply)
func (*Follower) RequestVote ¶
func (f *Follower) RequestVote(rf *Raft, args RequestVoteArgs, reply *RequestVoteReply)
type Leader ¶
type Leader struct {
// contains filtered or unexported fields
}
func (*Leader) AppendEntries ¶
func (l *Leader) AppendEntries(rf *Raft, args AppendEntriesArgs, reply *AppendEntriesReply)
func (*Leader) HandleAppendEntries ¶
func (*Leader) HandleOneAppendEntries ¶
func (l *Leader) HandleOneAppendEntries(rf *Raft, server int, args AppendEntriesArgs)
func (*Leader) RequestVote ¶
func (l *Leader) RequestVote(rf *Raft, args RequestVoteArgs, reply *RequestVoteReply)
type Log ¶
type Log struct {
Entries []Entry
}
Log in a Raft server.
func NewLog ¶
func NewLog() *Log
Creates a new log. Raft logs are 1-indexed, so a sentinel entry acts as the 0-th entry.
func (*Log) Compare ¶
Returns * 1 if this log > given log * 0 if this log = given log * -1 if this log = given log
func (*Log) GetLastLogIndex ¶
Returns the index of the last log.
type Persister ¶
type Persister struct {
// contains filtered or unexported fields
}
func MakePersister ¶
func MakePersister() *Persister
func (*Persister) RaftStateSize ¶
func (*Persister) ReadRaftState ¶
func (*Persister) ReadSnapshot ¶
func (*Persister) SaveRaftState ¶
func (*Persister) SaveSnapshot ¶
type Raft ¶
type Raft struct {
// contains filtered or unexported fields
}
A Go object implementing a single Raft peer.
func Make ¶
the service or tester wants to create a Raft server. the ports of all the Raft servers (including this one) are in peers[]. this server's port is peers[me]. all the servers' peers[] arrays have the same order. persister is a place for this server to save its persistent state, and also initially holds the most recent saved state, if any. applyCh is a channel on which the tester or service expects Raft to send ApplyMsg messages. Make() must return quickly, so it should start goroutines for any long-running work.
func (*Raft) AppendEntries ¶
func (rf *Raft) AppendEntries(args AppendEntriesArgs, reply *AppendEntriesReply) error
func (*Raft) Kill ¶
func (rf *Raft) Kill()
the tester calls Kill() when a Raft instance won't be needed again. you are not required to do anything in Kill(), but it might be convenient to (for example) turn off debug output from this instance.
func (*Raft) RequestVote ¶
func (rf *Raft) RequestVote(args RequestVoteArgs, reply *RequestVoteReply) error
example RequestVote RPC handler.
func (*Raft) Start ¶
the service using Raft (e.g. a k/v server) wants to start agreement on the next command to be appended to Raft's log. if this server isn't the leader, returns false. otherwise start the agreement and return immediately. there is no guarantee that this command will ever be committed to the Raft log, since the leader may fail or lose an election.
the first return value is the index that the command will appear at if it's ever committed. the second return value is the current term. the third return value is true if this server believes it is the leader.
type RequestVoteArgs ¶
type RequestVoteReply ¶
type State ¶
type State interface { Start(*Raft, interface{}) (int, int, bool) Kill(*Raft) AppendEntries(*Raft, AppendEntriesArgs, *AppendEntriesReply) RequestVote(*Raft, RequestVoteArgs, *RequestVoteReply) }