Skip to content

defaultSetProposal will set cs.ProposalBlockParts, this may lead to interrupt the block receiving process of PoLC's BlockID #2567

@james-ray

Description

@james-ray

Tendermint version (use tendermint version or git rev-parse --verify HEAD if installed from source):

ABCI app (name for built-in, URL for self-written if it's publicly available):

Environment:

  • OS (e.g. from /etc/os-release):
  • Install tools:
  • Others:

What happened:
I think there are 2 situations when a node needs to receive block parts,

  1. it receives a proposal of the round, so it needs to receive the proposalBlock from the proposer
  2. it receives a PoLc, so it has got a BlockID which contains a BlockPartsHeader. This situation will also set cs.ProposalBlockParts ,but it can go without receiving the proposal.

So how about the situation 2 when latter the proposal comes, it will override cs.ProposalBlockParts . It will lead to interrupt the block receiving of PoLC's BlockID.

What you expected to happen:
I suggest we can add a cs.LockedBlockID to indicate we are now receiving blockParts because we have a lockedBlockID.
Now in defaultSetProposal, we can judge
if cs.LockedBlockID !=nil {
return
}

so the cs.ProposalBlockParts won't be overwritten.

Have you tried the latest version: yes/no

How to reproduce it (as minimally and precisely as possible):

Logs (paste a small part showing an error (< 10 lines) or link a pastebin, gist, etc. containing more of the log file):

Config (you can paste only the changes you've made):

node command runtime flags:

/dump_consensus_state output for consensus bugs

Anything else we need to know:

Metadata

Metadata

Assignees

No one assigned

    Labels

    C:consensusComponent: ConsensusT:bugType Bug (Confirmed)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions