开个坑, 记录下以往学习分布式paper时发现的bug, 或让人容易产生误会的点.
https://github.com/drmingdrmer/consensus-bugs
先填一个paxos的问题, 本不是一个bug, 但有很多人疑惑的问题:
(Trap) The Bug in Paxos Made Simple
1. P1 sends 'prepare 1' to AB
2. Both AB respond P1 with a promise to not to accept any request numbered smaller than 1.\
Now the status is: A(-:-,1) B(-:-,1) C(-:-,-)
3. P1 receives the responses, then gets stuck and runs very slowly
4. P2 sends 'prepare 100' to AB
5. Both AB respond P2 with a promise to not to accept any request numbered smaller than 100.
Now the status is: A(-:-,100) B(-:-,100) C(-:-,-)
6. P2 receives the responses, chooses a value b and sends 'accept 100:b' to BC
7. BC receive and accept the accept request, the status is: A(-:-,100) B(100:b,100) C(100:b,-).
Note that proposal 100:b has been chosen.
8. P1 resumes, chooses value a and sends 'accept 1:a' to BC
9. B doesn't accept it, but C accepts it because C has never promise anything.
Status is: A(-:-,100) B(100:b,100) C(1:a,-). The chosen proposal is abandon, Paxos fails.
Missed something in step 7. When C processes accept 100:b
it sets its state to C(100:b,100)
. By accepting a value the node is also promising to not accept earlier values.
Sadly:
What's more I looked through several proprietary and open-source paxos implementations and they all had the bug submitted by the OP!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有