diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2018-11-08 11:17:14 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-08 11:17:14 +0800 |
commit | b2625a45a5de1df99811437d015cf5a3777ee62e (patch) | |
tree | 05560827b5f92012b810a3620bb9cccd60599023 /core/leader-selector.go | |
parent | 33d9311270414d8911122a4c7354773786df7f85 (diff) | |
download | dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.tar dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.tar.gz dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.tar.bz2 dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.tar.lz dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.tar.xz dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.tar.zst dexon-consensus-b2625a45a5de1df99811437d015cf5a3777ee62e.zip |
core: Optimize core (#307)
Diffstat (limited to 'core/leader-selector.go')
-rw-r--r-- | core/leader-selector.go | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/core/leader-selector.go b/core/leader-selector.go index 08006db..247ce89 100644 --- a/core/leader-selector.go +++ b/core/leader-selector.go @@ -32,7 +32,7 @@ var ( ErrIncorrectCRSSignature = fmt.Errorf("incorrect CRS signature") ) -type validLeaderFn func(*types.Block) bool +type validLeaderFn func(*types.Block) (bool, error) // Some constant value. var ( @@ -57,12 +57,15 @@ type leaderSelector struct { pendingBlocks []*types.Block validLeader validLeaderFn lock sync.Mutex + logger common.Logger } -func newLeaderSelector(validLeader validLeaderFn) *leaderSelector { +func newLeaderSelector( + validLeader validLeaderFn, logger common.Logger) *leaderSelector { return &leaderSelector{ minCRSBlock: maxHash, validLeader: validLeader, + logger: logger, } } @@ -98,7 +101,12 @@ func (l *leaderSelector) leaderBlockHash() common.Hash { defer l.lock.Unlock() newPendingBlocks := []*types.Block{} for _, b := range l.pendingBlocks { - if l.validLeader(b) { + ok, err := l.validLeader(b) + if err != nil { + l.logger.Error("Error checking validLeader", "error", err, "block", b) + continue + } + if ok { l.updateLeader(b) } else { newPendingBlocks = append(newPendingBlocks, b) @@ -118,7 +126,11 @@ func (l *leaderSelector) processBlock(block *types.Block) error { } l.lock.Lock() defer l.lock.Unlock() - if !l.validLeader(block) { + ok, err = l.validLeader(block) + if err != nil { + return err + } + if !ok { l.pendingBlocks = append(l.pendingBlocks, block) return nil } |