6.824-golabs-2020
6.824-golabs-2020 copied to clipboard
关于RPC返回false的情况
请问大佬,有没有遇到过调用如AppendEntries()这类RPC的时候返回false的情况呢?如果有的话,造成的原因是什么呢? 我看到您的代码中有对这个问题进行处理:
go func(args *AppendEntriesArgs, reply *AppendEntriesReply) {
ok := rf.peers[peerIdx].Call("Raft.AppendEntries", args, reply)
if !ok {
time.Sleep(time.Millisecond * 10)
}
resCh <- ok
}(&args, &reply)
rpc 失败很正常; 比如网络问题,被调用方服务异常,不同系统间状态不一致什么的
rpc 失败很正常; 比如网络问题,被调用方服务异常,不同系统间状态不一致什么的
但是6.824里边提供的rpc都是基于channel的,也就是并不是真实的网络:(src/labrpc/labrpc.go)
/ // channel-based RPC, for 824 labs. // // simulates a network that can lose requests, lose replies, // delay messages, and entirely disconnect particular hosts.
我,我看了一下里边的代码,好像确实有模拟真实网络情况,比如很久之后才返回结果,有longDelays和longReordering两个参数。🤣🤣🤣这也模拟得太真实了吧 谢谢大哥解惑!!!