Lab1 命令正确且运行成功时,CallBack应在何处调用Done

在 peer_msg_handler.go 的方法 proposeRaftCommand() 中,首先会进行两项检测,检测失败 cb(CallBack) 就会 Done() 调用返回包含错误信息的responce;当检测无误,且成功调用peer.propose()时,是否应该在该方法 proposeRaftCommand() 结尾调用 Done() 返回包含正确信息的response?

我提出这个问题是因为:
当我调用 Done() 返回一个自制的responce,客户端写入数据的方法 mustput() 可以运行,但读取数据的方法 Scan() 的结果为空,此处既可能是因为不应该在此处调用 Done(),也可能是其他部分实现错误导致未能成功写入;
当我不调用 Done()时,客户端读写在10s内都等不到response而超时。
我目前没法判断是哪个部分有问题。

希望看到的老师同学可以不吝赐教,非常感谢!

同学你好,proposeRaftCommand方法对两项检测通过之后,正确调用peerMsgHandler的Propose方法即可,callback将会在后续方法中被处理。

2 个赞

非常感谢!

正解,问题已解决,是我别的部分实现有些问题。