MIT 6.824分布式系统实验
Bug 描述
Mit 6.824分布式系统(2024)的LAB3D,快照部分,有概率不能通过TestSnapshotBasic3D测试,查看日志发现是在向applyCh发送数据的同时,同一个Follower接收到了快照信息,导致tester中保存的cfg.lastApplied并发的修改,例如,applyCommand:1,2,3,4.在apply 2的过程中收到快照消息,tester修改下一个期望的索引 = 4(在apply的过程中应该是3)此时的apply协程又向applyCh发送了3,出现了apply command out of order错误。
复现时机
多次运行测试程序的时候概率出现,Go版本1.23.0
期望结果
在不修改tester的条件下,能够通过至少2000次测试。
自己的思路和解决方案
尝试过在将命令写入管道时加锁,让快照线程和apply线程互斥访问管道,但是会出现死锁问题。 同样也尝试过添加新的互斥锁,在apply前检查能否获取到锁(利用sync.Mutex.TryLock()),如果获取不到锁证明此时正在有快照正在读取,利用这种方式也会导致死锁。
相关资料
代码实现如下
评论
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
