[NOD-1515] Allow to process pruning point while in SyncStateMissingUTXOSet (#1005)

This commit is contained in:
Ori Newman 2020-11-05 02:39:39 -08:00 committed by GitHub
parent d0fc728c23
commit 215ab512cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 4 deletions

View File

@ -13,11 +13,21 @@ func (bp *blockProcessor) validateAndInsertBlock(block *externalapi.DomainBlock)
return err return err
} }
hash := consensusserialization.HeaderHash(block.Header)
if mode.State == externalapi.SyncStateMissingUTXOSet { if mode.State == externalapi.SyncStateMissingUTXOSet {
return errors.Errorf("cannot insert blocks while in %s mode", mode.State) headerTipsPruningPoint, err := bp.consensusStateManager.HeaderTipsPruningPoint()
if err != nil {
return err
}
if *hash != *headerTipsPruningPoint {
return errors.Errorf("cannot insert blocks other than the header pruning point "+
"while in %s mode", mode.State)
}
mode.State = externalapi.SyncStateMissingBlockBodies
} }
hash := consensusserialization.HeaderHash(block.Header)
if mode.State == externalapi.SyncStateHeadersFirst && len(block.Transactions) != 0 { if mode.State == externalapi.SyncStateHeadersFirst && len(block.Transactions) != 0 {
mode.State = externalapi.SyncStateNormal mode.State = externalapi.SyncStateNormal
log.Warnf("block %s contains transactions while validating in header only mode", hash) log.Warnf("block %s contains transactions while validating in header only mode", hash)

View File

@ -64,7 +64,10 @@ func (csm *consensusStateManager) setPruningPointUTXOSet(serializedUTXOSet []byt
return err return err
} }
csm.consensusStateStore.StageVirtualUTXOSet(protoUTXOSetToReadOnlyUTXOSetIterator(protoUTXOSet)) err = csm.consensusStateStore.StageVirtualUTXOSet(protoUTXOSetToReadOnlyUTXOSetIterator(protoUTXOSet))
if err != nil {
return err
}
err = csm.ghostdagManager.GHOSTDAG(model.VirtualBlockHash) err = csm.ghostdagManager.GHOSTDAG(model.VirtualBlockHash)
if err != nil { if err != nil {

View File

@ -111,7 +111,16 @@ func (sm *syncManager) missingBlockBodyHashes(highHash *externalapi.DomainHash)
lowHash := headerTipsPruningPoint lowHash := headerTipsPruningPoint
for selectedChildIterator.Next() { for selectedChildIterator.Next() {
lowHash = selectedChildIterator.Get() selectedChild := selectedChildIterator.Get()
selectedChildStatus, err := sm.blockStatusStore.Get(sm.databaseContext, selectedChild)
if err != nil {
return nil, err
}
if selectedChildStatus != externalapi.StatusHeaderOnly {
lowHash = selectedChild
break
}
} }
hashesBetween, err := sm.antiPastHashesBetween(lowHash, highHash) hashesBetween, err := sm.antiPastHashesBetween(lowHash, highHash)