Return early from ReceiveBlock if already sycned (#13089)

* Return early from ReceiveBlock if already sycned

* Fix bad setup test
This commit is contained in:
Potuz
2023-10-22 18:31:50 -03:00
committed by GitHub
parent 29f8880638
commit 0920fb1f61
2 changed files with 9 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ package blockchain
import (
"bytes"
"context"
"fmt"
"time"
"github.com/pkg/errors"
@@ -58,6 +59,11 @@ type SlashingReceiver interface {
func (s *Service) ReceiveBlock(ctx context.Context, block interfaces.ReadOnlySignedBeaconBlock, blockRoot [32]byte) error {
ctx, span := trace.StartSpan(ctx, "blockChain.ReceiveBlock")
defer span.End()
// Return early if the block has been synced
if s.InForkchoice(blockRoot) {
log.WithField("blockRoot", fmt.Sprintf("%#x", blockRoot)).Debug("Ignoring already synced block")
return nil
}
receivedTime := time.Now()
s.blockBeingSynced.set(blockRoot)
defer s.blockBeingSynced.unset(blockRoot)

View File

@@ -26,6 +26,9 @@ func TestBuilderInvalidBlock(t *testing.T) {
blk, err := blocks.NewSignedBeaconBlock(util.NewBeaconBlock())
require.NoError(t, err)
builder := NewBuilder(t, st, blk)
blk, err = blocks.NewSignedBeaconBlock(util.NewBeaconBlock())
blk.SetSlot(2)
require.NoError(t, err)
builder.InvalidBlock(t, blk)
}