Questions about TinyKV 2AA

Two Questions.

  1. 这是我想通过的第一个测试


    Expect的过程是否是这样:tt.send(MsgHup)到1号Node后,1号Node开始Request Vote并更新Term,如果它能收到Majority Votes则成为Leader(nopStepper自己永不投票)?要求里说我们不需要在这个阶段考虑sending and receiving message(see you don’t need to care about the message sending and receiving logic now. ),所以整个过程应该是怎么样的呢?

  2. Can not find bcastAppend method described in doc.go

是的,nopStepper 是一个黑洞,不会返回任何响应。

不需要考虑消息具体是怎么发送和接收,要发送一个消息只需要把消息 appendraft.Raft.msgs,而接收到的消息则会作为参数传入 raft.Raft.Step(),可以在这个函数中调用处理该消息的具体函数(handleHeartbeat, handleAppendEntries, etc),更多细节可以看 https://github.com/pingcap-incubator/tinykv/blob/course/doc/project2-RaftKV.md#leader-election

Sorry about the doc.go is stale, and we will update it soon.

抱歉还是有点看不懂。
这里在range循环中,以第一个循环为例,tt.send方法是往1号Node发起一个指向1号Node本身的RequestVote,此时1号Node能获取1个投票。然后紧接着用例就要求1号Node成为StateLeader,但是它没有获取多数(2票),何以成为Leader?

或者我理解错了,tt.send方法内部调用raft.Step方法执行的是发起一轮投票,向所有的peer各自发送一个RequestVoteRPC,得到多数票后成为Leader? 如果这样的话,在哪里处理peer返回1号Node的RequestVoteRPC?

PS.何处有更多关于这个项目tinykv的信息可以获取?

自己找到答案,network.send()方法里面有一个filter方法过滤了Node内部剩余的有效消息,并继续在循环中发送,从而实现了一轮投票。

PS.network看起来是一个mockNetwork模拟了网络操作,这个在doc中没有明示,还是我没看到?这个感觉可以强调一下

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。