diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2019-01-07 17:21:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-07 17:21:08 +0800 |
commit | 21c420db895b1aa48709982cd145a119c74de6fa (patch) | |
tree | a8cd9a9bc5e8c22a21812f0e00939f3fbd92db89 /core/agreement-mgr.go | |
parent | 8d1069b61d847662d37f504937a346c56d6cb0eb (diff) | |
download | dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.gz dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.bz2 dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.lz dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.xz dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.zst dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.zip |
core: BA 3.0 (#408)
* Add v3 enum
* Add BA leader calculation
* Fast BA
* Add unittest for Fast BA
* Add comment
* Select leader in notarySet
Diffstat (limited to 'core/agreement-mgr.go')
-rw-r--r-- | core/agreement-mgr.go | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/core/agreement-mgr.go b/core/agreement-mgr.go index e8cafbd..1bd077b 100644 --- a/core/agreement-mgr.go +++ b/core/agreement-mgr.go @@ -266,7 +266,11 @@ func (mgr *agreementMgr) processAgreementResult( return err } } - agreement.restart(nIDs, result.Position, crs) + leader, err := mgr.cache.GetLeaderNode(result.Position) + if err != nil { + return err + } + agreement.restart(nIDs, result.Position, leader, crs) } return nil } @@ -332,14 +336,12 @@ func (mgr *agreementMgr) runBA(initRound uint64, chainID uint32) { return } // Check if this node in notary set of this chain in this round. - nodeSet, err := mgr.cache.GetNodeSet(nextRound) + notarySet, err := mgr.cache.GetNotarySet(nextRound, chainID) if err != nil { panic(err) } setting.crs = config.crs - setting.notarySet = nodeSet.GetSubSet( - int(config.notarySetSize), - types.NewNotarySetTarget(config.crs, chainID)) + setting.notarySet = notarySet _, isNotary = setting.notarySet[mgr.ID] if isNotary { mgr.logger.Info("selected as notary set", @@ -461,7 +463,11 @@ Loop: Height: nextHeight, } oldPos = nextPos - agr.restart(setting.notarySet, nextPos, setting.crs) + leader, err := mgr.cache.GetLeaderNode(nextPos) + if err != nil { + return err + } + agr.restart(setting.notarySet, nextPos, leader, setting.crs) default: } if agr.pullVotes() { |