aboutsummaryrefslogtreecommitdiffstats
path: root/core/leader-selector.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-11-08 11:17:14 +0800
committerGitHub <noreply@github.com>2018-11-08 11:17:14 +0800
commitb2625a45a5de1df99811437d015cf5a3777ee62e (patch)
tree05560827b5f92012b810a3620bb9cccd60599023 /core/leader-selector.go
parent33d9311270414d8911122a4c7354773786df7f85 (diff)
downloaddexon-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.go20
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
}