6.824-golabs-2020 icon indicating copy to clipboard operation
6.824-golabs-2020 copied to clipboard

关于RPC返回false的情况

Open Vector6662 opened this issue 2 years ago • 3 comments

请问大佬,有没有遇到过调用如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)

Vector6662 avatar May 15 '22 13:05 Vector6662

rpc 失败很正常; 比如网络问题,被调用方服务异常,不同系统间状态不一致什么的

yzongyue avatar May 16 '22 06:05 yzongyue

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.

Vector6662 avatar May 16 '22 06:05 Vector6662

我,我看了一下里边的代码,好像确实有模拟真实网络情况,比如很久之后才返回结果,有longDelays和longReordering两个参数。🤣🤣🤣这也模拟得太真实了吧 谢谢大哥解惑!!!

Vector6662 avatar May 16 '22 06:05 Vector6662