09. Raft PartB 结构调整
从这一部分开始,我们的代码量开始陡然增大。为了避免所有代码都挤在一个 raft.go 文件中,我们将其按逻辑进行拆分:
- 领导选举逻辑从
raft.go中拆出来,命名为raft_election.go - 日志复制逻辑从
rat.go中拆出来,命名为raft_replication.go - 所有其他公用的逻辑剩下在
raft.go中
注:在 golang 中,同一个类的实现拆到多个文件中时,其他文件通常使用该类名作为前缀,在我们这,就是 raft_XX.go
选举拆分
选举部分主要包括我们在 PartA 中提到的几部分:RPC 发送方的三个层次以及 RPC 接收方的回调函数。
1 | // functions in Candidate(RPC sender) |
此外,还有和他们关联的两个 RPC 的结构体:
1 | type RequestVoteArgs struct {} |
和一些辅助函数:
1 | // election timer checker and reset |
复制拆分
和领导者选举逻辑一样,也是主要包括 RPC 发送方的三个层次和 RPC 接收方的回调函数:
1 | // functions in Leader(RPC sender) |
RPC 关联结构体:
1 | type AppendEntriesReply struct {} |
剩余逻辑
剩下的逻辑,主要包括:
- 一些公用的函数和配置:如状态机转换函数,
contextLost判断函数等等 - 对外提供的接口:如
Start(),Make()等函数 - 暂时用不到的函数:如 PartC 中
persist相关函数
就留在 raft.go 文件中了。
评论
