hyperledger-labs/mirbft

Request duplication across batches following epoch transition

Closed this issue · 1 comments

Following epoch transition requests are sometimes duplicated across batches e.g

First epoch

&{Preprepare:seq_no:189 epoch:1 batch:{client_id:1 req_no:588 digest:"I\xffu\x0b\xca\xc0A\xc4\x06\x9a\x00*\xce#N_\x97\x9bt\x03\xa7\x83\tՁ@\xab\x85\xca\xf02\xd0"} batch:{client_id:1 req_no:592 digest:"P?\x82\x1e\x95\x16\x12ϜX\x85\xaf\xb4\xfbղy\x86\xb6\xa8\xb5\x05n\x85w\xd3ު\xee\x08\xeaf"} batch:{client_id:1 req_no:596 digest:";\xb3\xedR\xcf\x1eM\xdf\xef\xac\xf4X\xa46\xe9\xe58\xda̘X%\x81\x01\x05!\xb4\xbf\xbe`\xbe\x9a"} batch:{client_id:1 req_no:600 digest:"sG\xb7\xd2k\xe7!L\xfaA\x83J\x16\xef<\xed\xe2\xa7\xf4\x98ҫ\xf7%T\xc34\x07\xcb-"} batch:{client_id:1 req_no:604 digest:"\x98j%\xa2lE\xd1K\xfa\x00E\x86\x1f~=\x8e\x81\x12й\xe2\xf3F\xea=\xd9\x1b\x93\xacp\x8a\xf0"}}
&{Prepare:seq_no:189 epoch:1 digest:")a\x10\x04\xacIbܟ0\xc8\xfc\xd4\x0eP\xfe\xf6\x0c_\xa0Vγ\x06G\xaf\xc9#c\n}a"}
&{Commit:seq_no:189 epoch:1 digest:")a\x10\x04\xacIbܟ0\xc8\xfc\xd4\x0eP\xfe\xf6\x0c_\xa0Vγ\x06G\xaf\xc9#c\n}a"}

Second epoch

&{Preprepare:seq_no:201 epoch:2 batch:{client_id:1 req_no:588 digest:"I\xffu\x0b\xca\xc0A\xc4\x06\x9a\x00*\xce#N_\x97\x9bt\x03\xa7\x83\tՁ@\xab\x85\xca\xf02\xd0"} batch:{client_id:1 req_no:592 digest:"P?\x82\x1e\x95\x16\x12ϜX\x85\xaf\xb4\xfbղy\x86\xb6\xa8\xb5\x05n\x85w\xd3ު\xee\x08\xeaf"} batch:{client_id:1 req_no:596 digest:";\xb3\xedR\xcf\x1eM\xdf\xef\xac\xf4X\xa46\xe9\xe58\xda̘X%\x81\x01\x05!\xb4\xbf\xbe`\xbe\x9a"} batch:{client_id:1 req_no:600 digest:"sG\xb7\xd2k\xe7!L\xfaA\x83J\x16\xef<\xed\xe2\xa7\xf4\x98ҫ\xf7%T\xc34\x07\xcb-"} batch:{client_id:1 req_no:604 digest:"\x98j%\xa2lE\xd1K\xfa\x00E\x86\x1f~=\x8e\x81\x12й\xe2\xf3F\xea=\xd9\x1b\x93\xacp\x8a\xf0"} batch:{client_id:1 req_no:608 digest:"\xa2\xeb׼\x86#řf\x88\xa6\x1d\x1551BK\xb1\x11V.-sݿ\xaal\xabԬ\x89\x93"} batch:{client_id:1 req_no:612 digest:"id<\xe9\xc8\xcb\xcb\xd3P\xdbӫ\xdb\x10\xea,\x16Q\x82zJ4\xaa|\xb0݉\x95\xdc\xd1\xcei"} batch:{client_id:1 req_no:616 digest:"\xa9\x0b\xfc\x1fn\xfeE\x08A\xd8.\xc0\x18TV\xa0\x03:[& \xc1"\x10\xd4g;M\xb4\xf0\xdc$"} batch:{client_id:1 req_no:620 digest:"\x81\x8c\x9c\x10S9\xf71\xad\xc3\x0c\xb1n\xe6BUi\x18\xf3a\xb8;\x06!\x90t\xbb\x17\x80\x89Z\xaa"} batch:{client_id:1 req_no:624 digest:"6JUt\x91\x7fD\xe6\xebH\xd5\x08ako\xa3#\x03\xe8\xcbe#C;E\xfc\xc0\xbc\xcb\x07V\x05"}}

Note that in the first epoch these requests are committed so they shouldn't be present in the following epoch.

This issue is legitimate, but concerns legacy code (on the legacy branch) and should not be expected to be fixed.