Open caopingcp opened 3 years ago
四个节点组成的 tendermint 集群,分别往四个节点发送大量交易(每秒2万笔),四个节点均出现 ErrMemFull 错误,此时 mempool 也缓存了大量交易(15多万笔),节点通过从 mempool 获取交易并查重 来判断是否有未处理交易,从而决定是否进入共识流程打包区块 当停止发送交易后,由于节点还有未处理交易,仍然进入共识流程,直至 mempool 缓存没有交易 blockchain模块和发送的交易都使用 TxHeight 选项
然而可以复现出:有两个节点率先处理完 mempool 缓存的交易,不再进入共识,通过 ./chain33-cli net peer info |grep mempoolSize 可以看到值为0, 而其他两个节点的值不为0(几万笔),所以依然进入共识,由于不满足多于 2/3 的节点参与共识,整个共识流程会出现问题;继续观察一段时间,其他两个节点 mempoolSize 值会慢慢减少,直至为 0,说明原先缓存的交易不是合法交易,而之前的交易查重也存在问题。
这个问题可以用最新修复版本测试下,看能不能复现出来,单纯看问题现象还是有点抽象
四个节点组成的 tendermint 集群,分别往四个节点发送大量交易(每秒2万笔),四个节点均出现 ErrMemFull 错误,此时 mempool 也缓存了大量交易(15多万笔),节点通过从 mempool 获取交易并查重 来判断是否有未处理交易,从而决定是否进入共识流程打包区块 当停止发送交易后,由于节点还有未处理交易,仍然进入共识流程,直至 mempool 缓存没有交易 blockchain模块和发送的交易都使用 TxHeight 选项
然而可以复现出:有两个节点率先处理完 mempool 缓存的交易,不再进入共识,通过 ./chain33-cli net peer info |grep mempoolSize 可以看到值为0, 而其他两个节点的值不为0(几万笔),所以依然进入共识,由于不满足多于 2/3 的节点参与共识,整个共识流程会出现问题;继续观察一段时间,其他两个节点 mempoolSize 值会慢慢减少,直至为 0,说明原先缓存的交易不是合法交易,而之前的交易查重也存在问题。