Lab 2A
A1.简介
根据Figure 2的思路,实现RequestVoteRPC以及其Handler,实现Raft的选举机制。
需要注意的点主要包括:
1)必须严格遵循Figure 2的逻辑
2)VotedFor和CurrentTerm这两个变量是一组变量
3)我的做法是通过维护一个时间变量lastHeartbeatEverSeen来实现超时机制,但可能可以通过go的Timer来实现
4)reset timer的时机有必要进行一番考虑。总体而言,当一个raft接收到某条信息,该认为有必要乐观地假设自己是follower状态的时候,它就可以reset timer
A2.一些可能的问题/踩坑情况
基本都是基于实现不佳所导致的!…
A00
问题:不断进行选举。
分析:debug后发现接收到自己的心跳的时候把自己设置为follower
结论:接收到heartbeat之后判断我自己是否为heartbeat发送者,如果是,不修改为follower
A01
问题:不断进行选举
分析:debug后发现某一个follower掉线之后,自己不断增长term,回来之后term远远在其他raft之上,但由于其log远远落后,导致不断分票。
结论:根据Figure 2对currentTerm的描述(last term ever seen),在每个RPC中都判断并更新自身的term
A02
问题:不断进行选举