From ef9496b2daf39e7ab91076db2005eb18a392ebf2 Mon Sep 17 00:00:00 2001 From: Sergio Mena Date: Fri, 4 Feb 2022 15:55:35 +0100 Subject: [PATCH] [cherry-picked] Fixing handling of contexts in the ABCI++ rebased branch (#7768) * Fixing context * Removed logger change * Fixing UTs * Bump --- consensus/byzantine_test.go | 2 +- consensus/common_test.go | 2 +- consensus/replay_test.go | 8 ++++---- consensus/state.go | 11 ++++++----- consensus/state_test.go | 4 ++-- node/node_test.go | 2 ++ state/execution.go | 8 +++++--- 7 files changed, 21 insertions(+), 16 deletions(-) diff --git a/consensus/byzantine_test.go b/consensus/byzantine_test.go index 7dd7e6479..ebe887526 100644 --- a/consensus/byzantine_test.go +++ b/consensus/byzantine_test.go @@ -223,7 +223,7 @@ func TestByzantinePrevoteEquivocation(t *testing.T) { proposerAddr := lazyProposer.privValidatorPubKey.Address() block, err := lazyProposer.blockExec.CreateProposalBlock( - lazyProposer.Height, lazyProposer.state, extCommit, proposerAddr) + ctx, lazyProposer.Height, lazyProposer.state, extCommit, proposerAddr) require.NoError(t, err) blockParts, err := block.MakePartSet(types.BlockPartSizeBytes) require.NoError(t, err) diff --git a/consensus/common_test.go b/consensus/common_test.go index 0b8074ed8..ef4b77fab 100644 --- a/consensus/common_test.go +++ b/consensus/common_test.go @@ -219,7 +219,7 @@ func decideProposal( round int32, ) (proposal *types.Proposal, block *types.Block) { cs1.mtx.Lock() - block, err := cs1.createProposalBlock() + block, err := cs1.createProposalBlock(ctx) require.NoError(t, err) blockParts, err := block.MakePartSet(types.BlockPartSizeBytes) require.NoError(t, err) diff --git a/consensus/replay_test.go b/consensus/replay_test.go index 19379da52..220d44f2f 100644 --- a/consensus/replay_test.go +++ b/consensus/replay_test.go @@ -358,7 +358,7 @@ func setupChainWithChangingValidators(t *testing.T, name string, nBlocks int) (* newValidatorTx1 := kvstore.MakeValSetChangeTx(valPubKey1ABCI, testMinPower) err = assertMempool(css[0].txNotifier).CheckTx(newValidatorTx1, nil, mempool.TxInfo{}) assert.NoError(t, err) - propBlock, err := css[0].createProposalBlock() // changeProposer(t, cs1, vs2) + propBlock, err := css[0].createProposalBlock(ctx) // changeProposer(t, cs1, vs2) require.NoError(t, err) propBlockParts, err := propBlock.MakePartSet(partSize) require.NoError(t, err) @@ -390,7 +390,7 @@ func setupChainWithChangingValidators(t *testing.T, name string, nBlocks int) (* updateValidatorTx1 := kvstore.MakeValSetChangeTx(updatePubKey1ABCI, 25) err = assertMempool(css[0].txNotifier).CheckTx(updateValidatorTx1, nil, mempool.TxInfo{}) assert.NoError(t, err) - propBlock, err = css[0].createProposalBlock() // changeProposer(t, cs1, vs2) + propBlock, err = css[0].createProposalBlock(ctx) // changeProposer(t, cs1, vs2) require.NoError(t, err) propBlockParts, err = propBlock.MakePartSet(partSize) require.NoError(t, err) @@ -429,7 +429,7 @@ func setupChainWithChangingValidators(t *testing.T, name string, nBlocks int) (* newValidatorTx3 := kvstore.MakeValSetChangeTx(newVal3ABCI, testMinPower) err = assertMempool(css[0].txNotifier).CheckTx(newValidatorTx3, nil, mempool.TxInfo{}) assert.NoError(t, err) - propBlock, err = css[0].createProposalBlock() // changeProposer(t, cs1, vs2) + propBlock, err = css[0].createProposalBlock(ctx) // changeProposer(t, cs1, vs2) require.NoError(t, err) propBlockParts, err = propBlock.MakePartSet(partSize) require.NoError(t, err) @@ -506,7 +506,7 @@ func setupChainWithChangingValidators(t *testing.T, name string, nBlocks int) (* removeValidatorTx3 := kvstore.MakeValSetChangeTx(newVal3ABCI, 0) err = assertMempool(css[0].txNotifier).CheckTx(removeValidatorTx3, nil, mempool.TxInfo{}) assert.NoError(t, err) - propBlock, err = css[0].createProposalBlock() // changeProposer(t, cs1, vs2) + propBlock, err = css[0].createProposalBlock(ctx) // changeProposer(t, cs1, vs2) require.NoError(t, err) propBlockParts, err = propBlock.MakePartSet(partSize) require.NoError(t, err) diff --git a/consensus/state.go b/consensus/state.go index 1a754c8fe..920dcc946 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -2,6 +2,7 @@ package consensus import ( "bytes" + "context" "errors" "fmt" "io" @@ -1175,7 +1176,7 @@ func (cs *State) defaultDecideProposal(height int64, round int32) { } else { // Create a new proposal block from state/txs from the mempool. var err error - block, err = cs.createProposalBlock() + block, err = cs.createProposalBlock(ctx) if err != nil { cs.Logger.Error("unable to create proposal block", "error", err) return @@ -1240,7 +1241,7 @@ func (cs *State) isProposalComplete() bool { // // NOTE: keep it side-effect free for clarity. // CONTRACT: cs.privValidator is not nil. -func (cs *State) createProposalBlock() (*types.Block, error) { +func (cs *State) createProposalBlock(ctx context.Context) (*types.Block, error) { if cs.privValidator == nil { return nil, errors.New("entered createProposalBlock with privValidator being nil") } @@ -1269,7 +1270,7 @@ func (cs *State) createProposalBlock() (*types.Block, error) { proposerAddr := cs.privValidatorPubKey.Address() - ret, err := cs.blockExec.CreateProposalBlock(cs.Height, cs.state, lastExtCommit, proposerAddr) + ret, err := cs.blockExec.CreateProposalBlock(ctx, cs.Height, cs.state, lastExtCommit, proposerAddr) if err != nil { panic(err) } @@ -2131,7 +2132,7 @@ func (cs *State) addVote(vote *types.Vote, peerID p2p.ID) (added bool, err error return false, err } - if err = cs.blockExec.VerifyVoteExtension(vote); err != nil { + if err = cs.blockExec.VerifyVoteExtension(ctx, vote); err != nil { return false, err } } @@ -2313,7 +2314,7 @@ func (cs *State) signVote( // if the signedMessage type is for a non-nil precommit, add // VoteExtension if extEnabled { - ext, err := cs.blockExec.ExtendVote(vote) + ext, err := cs.blockExec.ExtendVote(ctx, vote) if err != nil { return nil, err } diff --git a/consensus/state_test.go b/consensus/state_test.go index af473bd1c..7a855fd2b 100644 --- a/consensus/state_test.go +++ b/consensus/state_test.go @@ -195,7 +195,7 @@ func TestStateBadProposal(t *testing.T) { proposalCh := subscribe(cs1.eventBus, types.EventQueryCompleteProposal) voteCh := subscribe(cs1.eventBus, types.EventQueryVote) - propBlock, err := cs1.createProposalBlock() // changeProposer(t, cs1, vs2) + propBlock, err := cs1.createProposalBlock(ctx) // changeProposer(t, cs1, vs2) require.NoError(t, err) // make the second validator the proposer by incrementing round @@ -262,7 +262,7 @@ func TestStateOversizedBlock(t *testing.T) { timeoutProposeCh := subscribe(cs1.eventBus, types.EventQueryTimeoutPropose) voteCh := subscribe(cs1.eventBus, types.EventQueryVote) - propBlock, err := cs1.createProposalBlock() + propBlock, err := cs1.createProposalBlock(ctx) require.NoError(t, err) propBlock.Data.Txs = []types.Tx{tmrand.Bytes(2001)} propBlock.Header.DataHash = propBlock.Data.Hash() diff --git a/node/node_test.go b/node/node_test.go index bfc8c3e89..134add3ee 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -335,6 +335,7 @@ func TestCreateProposalBlock(t *testing.T) { extCommit := &types.ExtendedCommit{Height: height - 1} block, err := blockExec.CreateProposalBlock( + ctx, height, state, extCommit, @@ -421,6 +422,7 @@ func TestMaxProposalBlockSize(t *testing.T) { extCommit := &types.ExtendedCommit{Height: height - 1} block, err := blockExec.CreateProposalBlock( + ctx, height, state, extCommit, diff --git a/state/execution.go b/state/execution.go index 2bbed6edd..a6c6b54f1 100644 --- a/state/execution.go +++ b/state/execution.go @@ -99,6 +99,7 @@ func (blockExec *BlockExecutor) SetEventBus(eventBus types.BlockEventPublisher) // // Contract: application will not return more bytes than are sent over the wire. func (blockExec *BlockExecutor) CreateProposalBlock( + ctx context.Context, height int64, state State, lastExtCommit *types.ExtendedCommit, @@ -116,7 +117,8 @@ func (blockExec *BlockExecutor) CreateProposalBlock( txs := blockExec.mempool.ReapMaxBytesMaxGas(maxDataBytes, maxGas) commit := lastExtCommit.ToCommit() block := state.MakeBlock(height, txs, commit, evidence, proposerAddr) - rpp, err := blockExec.proxyApp.PrepareProposal(context.TODO(), + rpp, err := blockExec.proxyApp.PrepareProposal( + ctx, &abci.RequestPrepareProposal{ MaxTxBytes: maxDataBytes, Txs: block.Txs.ToSliceOfBytes(), @@ -293,7 +295,7 @@ func (blockExec *BlockExecutor) ApplyBlock( return state, nil } -func (blockExec *BlockExecutor) ExtendVote(vote *types.Vote) ([]byte, error) { +func (blockExec *BlockExecutor) ExtendVote(ctx context.Context, vote *types.Vote) ([]byte, error) { req := abci.RequestExtendVote{ Hash: vote.BlockID.Hash, Height: vote.Height, @@ -306,7 +308,7 @@ func (blockExec *BlockExecutor) ExtendVote(vote *types.Vote) ([]byte, error) { return resp.VoteExtension, nil } -func (blockExec *BlockExecutor) VerifyVoteExtension(vote *types.Vote) error { +func (blockExec *BlockExecutor) VerifyVoteExtension(ctx context.Context, vote *types.Vote) error { req := abci.RequestVerifyVoteExtension{ Hash: vote.BlockID.Hash, ValidatorAddress: vote.ValidatorAddress,