Skip to content

Commit c72deed

Browse files
authored
feat: error if the propagation reactor failed to propose the block (#2611)
Closes #2599
1 parent 237ebe4 commit c72deed

File tree

5 files changed

+25
-14
lines changed

5 files changed

+25
-14
lines changed

consensus/propagation/commitment.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ const (
2424

2525
// ProposeBlock is called when the consensus routine has created a new proposal,
2626
// and it needs to be gossiped to the rest of the network.
27-
func (blockProp *Reactor) ProposeBlock(proposal *types.Proposal, block *types.PartSet, txs []proptypes.TxMetaData) {
27+
func (blockProp *Reactor) ProposeBlock(proposal *types.Proposal, block *types.PartSet, txs []proptypes.TxMetaData) error {
2828
// create the parity data and the compact block
2929
parityBlock, lastLen, err := types.Encode(block, types.BlockPartSizeBytes)
3030
if err != nil {
3131
blockProp.Logger.Error("failed to encode block", "err", err)
32-
return
32+
return err
3333
}
3434

3535
partHashes := extractHashes(block, parityBlock)
@@ -48,7 +48,7 @@ func (blockProp *Reactor) ProposeBlock(proposal *types.Proposal, block *types.Pa
4848
sbz, err := cb.SignBytes()
4949
if err != nil {
5050
blockProp.Logger.Error("failed to create signature for compact block", "err", err)
51-
return
51+
return err
5252
}
5353

5454
// sign the hash of the compact block NOTE: p2p message sign bytes are
@@ -62,7 +62,7 @@ func (blockProp *Reactor) ProposeBlock(proposal *types.Proposal, block *types.Pa
6262
"chain_id", blockProp.chainID,
6363
"unique_id", CompactBlockUID,
6464
)
65-
return
65+
return err
6666
}
6767

6868
cb.Signature = sig
@@ -128,6 +128,7 @@ func (blockProp *Reactor) ProposeBlock(proposal *types.Proposal, block *types.Pa
128128

129129
schema.WriteBlockPartState(blockProp.traceClient, proposal.Height, proposal.Round, chunks[index].GetTrueIndices(), true, string(peer.peer.ID()), schema.Upload)
130130
}
131+
return nil
131132
}
132133

133134
func extractHashes(blocks ...*types.PartSet) [][]byte {

consensus/propagation/commitment_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ func TestPropose(t *testing.T) {
3535

3636
prop, partSet, _, metaData := createTestProposal(t, sm, 1, 0, 100, 1000)
3737

38-
reactor1.ProposeBlock(prop, partSet, metaData)
38+
err := reactor1.ProposeBlock(prop, partSet, metaData)
39+
require.NoError(t, err)
3940

4041
time.Sleep(200 * time.Millisecond)
4142

@@ -102,7 +103,8 @@ func TestPropose_OnlySendParityChunks(t *testing.T) {
102103
// 128 mb block
103104
prop, partSet, _, metaData := createTestProposal(t, sm, 1, 0, 30, 4_000_000)
104105

105-
reactor1.ProposeBlock(prop, partSet, metaData)
106+
err := reactor1.ProposeBlock(prop, partSet, metaData)
107+
require.NoError(t, err)
106108

107109
time.Sleep(200 * time.Millisecond)
108110

@@ -217,7 +219,8 @@ func TestRecoverPartsLocally(t *testing.T) {
217219
}
218220
}
219221

220-
blockPropR.ProposeBlock(prop, partSet, metaData)
222+
err = blockPropR.ProposeBlock(prop, partSet, metaData)
223+
require.NoError(t, err)
221224

222225
_, actualParts, _ := blockPropR.GetProposal(prop.Height, prop.Round)
223226

consensus/propagation/propagator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
// consensus reactor and state.
1212
type Propagator interface {
1313
GetProposal(height int64, round int32) (*types.Proposal, *types.PartSet, bool)
14-
ProposeBlock(proposal *types.Proposal, parts *types.PartSet, txs []proptypes.TxMetaData)
14+
ProposeBlock(proposal *types.Proposal, parts *types.PartSet, txs []proptypes.TxMetaData) error
1515
AddCommitment(height int64, round int32, psh *types.PartSetHeader)
1616
Prune(committedHeight int64)
1717
SetHeightAndRound(height int64, round int32)
@@ -62,7 +62,8 @@ func (nop *NoOpPropagator) GetProposal(_ int64, _ int32) (*types.Proposal, *type
6262
return nil, nil, false
6363
}
6464

65-
func (nop *NoOpPropagator) ProposeBlock(_ *types.Proposal, _ *types.PartSet, _ []proptypes.TxMetaData) {
65+
func (nop *NoOpPropagator) ProposeBlock(_ *types.Proposal, _ *types.PartSet, _ []proptypes.TxMetaData) error {
66+
return nil
6667
}
6768

6869
func (nop *NoOpPropagator) AddCommitment(_ int64, _ int32, _ *types.PartSetHeader) {

consensus/propagation/reactor_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,8 @@ func TestPropagationSmokeTest(t *testing.T) {
457457
}
458458
}
459459

460-
reactors[1].ProposeBlock(prop, ps, metaData)
460+
err := reactors[1].ProposeBlock(prop, ps, metaData)
461+
require.NoError(t, err)
461462

462463
distributing := true
463464
for distributing {

consensus/state.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,9 +1376,6 @@ func (cs *State) defaultDecideProposal(height int64, round int32) {
13761376
if err := cs.privValidator.SignProposal(cs.state.ChainID, p); err == nil {
13771377
proposal.Signature = p.Signature
13781378

1379-
// send proposal and block parts on internal msg queue
1380-
cs.sendInternalMessage(msgInfo{&ProposalMessage{proposal}, ""})
1381-
13821379
metaData := make([]proptypes.TxMetaData, len(block.Txs))
13831380
hashes := block.CachedHashes()
13841381
for i, pos := range blockParts.TxPos {
@@ -1389,6 +1386,15 @@ func (cs *State) defaultDecideProposal(height int64, round int32) {
13891386
}
13901387
}
13911388

1389+
err = cs.propagator.ProposeBlock(proposal, blockParts, metaData)
1390+
if err != nil {
1391+
cs.Logger.Error("propagation reactor failed to propose the block", "err", err)
1392+
return
1393+
}
1394+
1395+
// send proposal and block parts on internal msg queue
1396+
cs.sendInternalMessage(msgInfo{&ProposalMessage{proposal}, ""})
1397+
13921398
wg := sync.WaitGroup{}
13931399
wg.Add(1)
13941400
go func() {
@@ -1398,7 +1404,6 @@ func (cs *State) defaultDecideProposal(height int64, round int32) {
13981404
cs.sendInternalMessage(msgInfo{&BlockPartMessage{cs.rs.Height, cs.rs.Round, part}, ""})
13991405
}
14001406
}()
1401-
cs.propagator.ProposeBlock(proposal, blockParts, metaData)
14021407
wg.Wait()
14031408

14041409
cs.Logger.Debug("signed proposal", "height", height, "round", round, "proposal", proposal)

0 commit comments

Comments
 (0)