From 400c4f2fd9400c0fa01fc416fa1804ee7e87af88 Mon Sep 17 00:00:00 2001 From: Mission Liao Date: Wed, 27 Feb 2019 15:39:24 +0800 Subject: core: fix panic by duplicated pending blocks (#460) --- core/blockchain.go | 5 +++++ core/blockchain_test.go | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 001892e..bc9616c 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -451,6 +451,11 @@ func (bc *blockChain) findPendingBlock(p types.Position) *types.Block { func (bc *blockChain) addPendingBlockRecord(p pendingBlockRecord) { if err := bc.pendingBlocks.insert(p); err != nil { + if err == ErrDuplicatedPendingBlock { + // TODO(mission): panic directly once our BA can confirm blocks + // uniquely and in sequence. + return + } panic(err) } if p.block != nil { diff --git a/core/blockchain_test.go b/core/blockchain_test.go index 46cb457..4c8fe23 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -419,8 +419,10 @@ func (s *BlockChainTestSuite) TestPendingBlockRecords() { s.Require().NoError(ps.insert(pendingBlockRecord{bs[2].Position, bs[2]})) s.Require().NoError(ps.insert(pendingBlockRecord{bs[1].Position, bs[1]})) s.Require().NoError(ps.insert(pendingBlockRecord{bs[0].Position, bs[0]})) - s.Require().Equal(ErrDuplicatedPendingBlock.Error(), - ps.insert(pendingBlockRecord{bs[0].Position, nil}).Error()) + // TODO(mission): unlock this checking once our BA can confirm blocks + // uniquely in sequence. + // s.Require().Equal(ErrDuplicatedPendingBlock.Error(), + // ps.insert(pendingBlockRecord{bs[0].Position, nil}).Error()) s.Require().True(ps[0].position.Equal(bs[0].Position)) s.Require().True(ps[1].position.Equal(bs[1].Position)) s.Require().True(ps[2].position.Equal(bs[2].Position)) -- cgit v1.2.3