From 502a38271d64d33a253da9405db8e839401910c0 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Fri, 26 Jan 2024 18:23:37 +0800 Subject: [PATCH] perf(internal/blocksync): avoid double-calling `types.BlockFromProto` (#2016) for performance reasons. Closes https://github.com/cometbft/cometbft/issues/1964 --- - [ ] ~~Tests written/updated~~ - [x] Changelog entry added in `.changelog` (we use [unclog](https://github.com/informalsystems/unclog) to manage our changelog) - [x] Updated relevant documentation (`docs/` or `spec/`) and code comments --- ...2016-blocksync-avoid-double-calling-block-from-proto.md | 2 ++ blocksync/msgs.go | 7 +++---- blocksync/reactor.go | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 .changelog/unreleased/improvements/2016-blocksync-avoid-double-calling-block-from-proto.md diff --git a/.changelog/unreleased/improvements/2016-blocksync-avoid-double-calling-block-from-proto.md b/.changelog/unreleased/improvements/2016-blocksync-avoid-double-calling-block-from-proto.md new file mode 100644 index 0000000000..7251221be1 --- /dev/null +++ b/.changelog/unreleased/improvements/2016-blocksync-avoid-double-calling-block-from-proto.md @@ -0,0 +1,2 @@ +- `[blocksync]` Avoid double-calling `types.BlockFromProto` for performance + reasons ([\#2016](https://github.com/cometbft/cometbft/pull/2016)) diff --git a/blocksync/msgs.go b/blocksync/msgs.go index 447748ecb9..74f9b783bb 100644 --- a/blocksync/msgs.go +++ b/blocksync/msgs.go @@ -31,10 +31,9 @@ func ValidateMsg(pb proto.Message) error { return errors.New("negative Height") } case *bcproto.BlockResponse: - _, err := types.BlockFromProto(msg.Block) - if err != nil { - return err - } + // Avoid double-calling `types.BlockFromProto` for performance reasons. + // See https://github.com/cometbft/cometbft/issues/1964 + return nil case *bcproto.NoBlockResponse: if msg.Height < 0 { return errors.New("negative Height") diff --git a/blocksync/reactor.go b/blocksync/reactor.go index c05d7e2f3f..6f43e2e0d1 100644 --- a/blocksync/reactor.go +++ b/blocksync/reactor.go @@ -230,7 +230,8 @@ func (bcR *Reactor) ReceiveEnvelope(e p2p.Envelope) { case *bcproto.BlockResponse: bi, err := types.BlockFromProto(msg.Block) if err != nil { - bcR.Logger.Error("Block content is invalid", "err", err) + bcR.Logger.Error("Peer sent us invalid block", "peer", e.Src, "msg", e.Message, "err", err) + bcR.Switch.StopPeerForError(e.Src, err) return } bcR.pool.AddBlock(e.Src.ID(), bi, msg.Block.Size())