Support resolveBlockStatus without separate stagingAreas for usage of testConsensus (#1666)

This commit is contained in:
Svarog 2021-04-08 11:26:17 +03:00 committed by GitHub
parent d2cccd2829
commit 347dd8fc4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 18 additions and 13 deletions

View File

@ -10,5 +10,6 @@ type TestConsensusStateManager interface {
model.ConsensusStateManager
AddUTXOToMultiset(multiset model.Multiset, entry externalapi.UTXOEntry,
outpoint *externalapi.DomainOutpoint) error
ResolveBlockStatus(stagingArea *model.StagingArea, blockHash *externalapi.DomainHash) (externalapi.BlockStatus, error)
ResolveBlockStatus(stagingArea *model.StagingArea, blockHash *externalapi.DomainHash,
useSeparateStagingAreasPerBlock bool) (externalapi.BlockStatus, error)
}

View File

@ -143,7 +143,8 @@ func (bb *testBlockBuilder) buildBlockWithParents(stagingArea *model.StagingArea
return nil, nil, err
}
selectedParentStatus, err := bb.testConsensus.ConsensusStateManager().ResolveBlockStatus(stagingArea, ghostdagData.SelectedParent())
selectedParentStatus, err := bb.testConsensus.ConsensusStateManager().ResolveBlockStatus(
stagingArea, ghostdagData.SelectedParent(), false)
if err != nil {
return nil, nil, err
}

View File

@ -37,7 +37,7 @@ func (csm *consensusStateManager) AddBlock(stagingArea *model.StagingArea, block
if !isViolatingFinality {
log.Debugf("Block %s doesn't violate finality. Resolving its block status", blockHash)
blockStatus, err := csm.resolveBlockStatus(stagingArea, blockHash)
blockStatus, err := csm.resolveBlockStatus(stagingArea, blockHash, true)
if err != nil {
return nil, nil, err
}

View File

@ -282,7 +282,7 @@ func (csm *consensusStateManager) RestorePastUTXOSetIterator(stagingArea *model.
onEnd := logger.LogAndMeasureExecutionTime(log, "RestorePastUTXOSetIterator")
defer onEnd()
blockStatus, err := csm.resolveBlockStatus(stagingArea, blockHash)
blockStatus, err := csm.resolveBlockStatus(stagingArea, blockHash, true)
if err != nil {
return nil, err
}

View File

@ -12,8 +12,8 @@ import (
"github.com/pkg/errors"
)
func (csm *consensusStateManager) resolveBlockStatus(
stagingArea *model.StagingArea, blockHash *externalapi.DomainHash) (externalapi.BlockStatus, error) {
func (csm *consensusStateManager) resolveBlockStatus(stagingArea *model.StagingArea, blockHash *externalapi.DomainHash,
useSeparateStagingAreasPerBlock bool) (externalapi.BlockStatus, error) {
onEnd := logger.LogAndMeasureExecutionTime(log, fmt.Sprintf("resolveBlockStatus for %s", blockHash))
defer onEnd()
@ -53,8 +53,8 @@ func (csm *consensusStateManager) resolveBlockStatus(
unverifiedBlockHash := unverifiedBlocks[i]
stagingAreaForCurrentBlock := stagingArea
isCurrentBlockTopBlock := i == 0
if !isCurrentBlockTopBlock {
useSeparateStagingArea := useSeparateStagingAreasPerBlock && (i != 0)
if useSeparateStagingArea {
stagingAreaForCurrentBlock = model.NewStagingArea()
}
@ -72,7 +72,7 @@ func (csm *consensusStateManager) resolveBlockStatus(
log.Debugf("Block %s status resolved to `%s`, finished %d/%d of unverified blocks",
unverifiedBlockHash, blockStatus, len(unverifiedBlocks)-i, len(unverifiedBlocks))
if !isCurrentBlockTopBlock {
if useSeparateStagingArea {
err := staging.CommitAllChanges(csm.databaseContext, stagingAreaForCurrentBlock)
if err != nil {
return 0, err

View File

@ -147,7 +147,8 @@ func TestDoubleSpends(t *testing.T) {
t.Fatalf("Error adding goodBlock: %+v", err)
}
//use ResolveBlockStatus, since goodBlock2 might not be the selectedTip
goodBlock2Status, err := consensus.ConsensusStateManager().ResolveBlockStatus(stagingArea, goodBlock2Hash)
goodBlock2Status, err := consensus.ConsensusStateManager().ResolveBlockStatus(
stagingArea, goodBlock2Hash, true)
if err != nil {
t.Fatalf("Error getting status of goodBlock: %+v", err)
}

View File

@ -21,8 +21,8 @@ func (csm *testConsensusStateManager) AddUTXOToMultiset(
return addUTXOToMultiset(multiset, entry, outpoint)
}
func (csm *testConsensusStateManager) ResolveBlockStatus(stagingArea *model.StagingArea,
blockHash *externalapi.DomainHash) (externalapi.BlockStatus, error) {
func (csm *testConsensusStateManager) ResolveBlockStatus(stagingArea *model.StagingArea, blockHash *externalapi.DomainHash,
useSeparateStagingAreasPerBlock bool) (externalapi.BlockStatus, error) {
return csm.resolveBlockStatus(stagingArea, blockHash)
return csm.resolveBlockStatus(stagingArea, blockHash, useSeparateStagingAreasPerBlock)
}

View File

@ -21,6 +21,8 @@ type testConsensus struct {
testReachabilityManager testapi.TestReachabilityManager
testConsensusStateManager testapi.TestConsensusStateManager
testTransactionValidator testapi.TestTransactionValidator
buildBlockConsensus *consensus
}
func (tc *testConsensus) DAGParams() *dagconfig.Params {