Merge pull request #268 from nguyenbatam/fix_err_future_block_when_fetch

sleep time when fetch receive future block
This commit is contained in:
Nguyen Sy Thanh Son 2018-11-08 12:19:28 +07:00 committed by GitHub
commit 5e7a16c61d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -650,6 +650,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) {
log.Debug("Unknown parent of propagated block", "peer", peer, "number", block.Number(), "hash", hash, "parent", block.ParentHash()) log.Debug("Unknown parent of propagated block", "peer", peer, "number", block.Number(), "hash", hash, "parent", block.ParentHash())
return return
} }
again:
// Quickly validate the header and propagate the block if it passes // Quickly validate the header and propagate the block if it passes
switch err := f.verifyHeader(block.Header()); err { switch err := f.verifyHeader(block.Header()); err {
case nil: case nil:
@ -657,6 +658,10 @@ func (f *Fetcher) insert(peer string, block *types.Block) {
propBroadcastOutTimer.UpdateSince(block.ReceivedAt) propBroadcastOutTimer.UpdateSince(block.ReceivedAt)
go f.broadcastBlock(block, true) go f.broadcastBlock(block, true)
case consensus.ErrFutureBlock: case consensus.ErrFutureBlock:
delay := time.Unix(block.Time().Int64(), 0).Sub(time.Now()) // nolint: gosimple
time.Sleep(delay)
log.Info("Receive futrue block", "number", block.NumberU64(), "hash", block.Hash().Hex(), "delay", delay)
goto again
case consensus.ErrMissingValidatorSignature: case consensus.ErrMissingValidatorSignature:
newBlock := block newBlock := block
if f.appendM2HeaderHook != nil { if f.appendM2HeaderHook != nil {