clean up consensus package use of conversion to proto

This commit is contained in:
William Banfield
2022-10-20 11:41:37 -04:00
parent 5e513fbb4f
commit eef513acf8
5 changed files with 31 additions and 107 deletions

View File

@@ -165,8 +165,7 @@ func TestByzantinePrevoteEquivocation(t *testing.T) {
for i, peer := range peerList {
if i < len(peerList)/2 {
bcs.Logger.Info("Signed and pushed vote", "vote", prevote1, "peer", peer)
p, err := MsgToProto(&VoteMessage{prevote1})
require.NoError(t, err)
p := MustConvertMsgToProto(&VoteMessage{prevote1})
e := p2p.Envelope{
Message: p,
ChannelID: VoteChannel,
@@ -174,8 +173,7 @@ func TestByzantinePrevoteEquivocation(t *testing.T) {
peer.Send(e)
} else {
bcs.Logger.Info("Signed and pushed vote", "vote", prevote2, "peer", peer)
p, err := MsgToProto(&VoteMessage{prevote2})
require.NoError(t, err)
p := MustConvertMsgToProto(&VoteMessage{prevote2})
e := p2p.Envelope{
Message: p,
ChannelID: VoteChannel,
@@ -533,10 +531,7 @@ func sendProposalAndParts(
) {
// proposal
msg := &ProposalMessage{Proposal: proposal}
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: DataChannel,
Message: p,
@@ -551,10 +546,7 @@ func sendProposalAndParts(
Round: round, // This tells peer that this part applies to us.
Part: part,
}
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: DataChannel,
Message: p,
@@ -567,19 +559,13 @@ func sendProposalAndParts(
prevote, _ := cs.signVote(tmproto.PrevoteType, blockHash, parts.Header())
precommit, _ := cs.signVote(tmproto.PrecommitType, blockHash, parts.Header())
cs.mtx.Unlock()
p, err = MsgToProto(&VoteMessage{prevote})
if err != nil {
panic(err)
}
p = MustConvertMsgToProto(&VoteMessage{prevote})
e = p2p.Envelope{
ChannelID: VoteChannel,
Message: p,
}
peer.Send(e)
p, err = MsgToProto(&VoteMessage{precommit})
if err != nil {
panic(err)
}
p = MustConvertMsgToProto(&VoteMessage{precommit})
e = p2p.Envelope{
ChannelID: VoteChannel,
Message: p,

View File

@@ -3,7 +3,6 @@ package consensus
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/tendermint/tendermint/libs/bytes"
"github.com/tendermint/tendermint/libs/log"
tmrand "github.com/tendermint/tendermint/libs/rand"
@@ -95,8 +94,7 @@ func invalidDoPrevoteFunc(t *testing.T, height int64, round int32, cs *State, sw
peers := sw.Peers().List()
for _, peer := range peers {
cs.Logger.Info("Sending bad vote", "block", blockHash, "peer", peer)
p, err := MsgToProto(&VoteMessage{precommit})
require.NoError(t, err)
p := MustConvertMsgToProto(&VoteMessage{precommit})
e := p2p.Envelope{
Message: p,
ChannelID: VoteChannel,

View File

@@ -15,10 +15,10 @@ import (
"github.com/tendermint/tendermint/types"
)
// MsgToProto takes a consensus message type and returns the proto defined consensus message
func MsgToProto(msg Message) (*tmcons.Message, error) {
// MustConvertMsgToProto takes a consensus message type and returns the proto defined consensus message
func MustConvertMsgToProto(msg Message) *tmcons.Message {
if msg == nil {
return nil, errors.New("consensus: message is nil")
panic(errors.New("consensus: message is nil"))
}
var pb tmcons.Message
@@ -72,7 +72,7 @@ func MsgToProto(msg Message) (*tmcons.Message, error) {
case *BlockPartMessage:
parts, err := msg.Part.ToProto()
if err != nil {
return nil, fmt.Errorf("msg to proto error: %w", err)
panic(fmt.Errorf("msg to proto error: %w", err))
}
pb = tmcons.Message{
Sum: &tmcons.Message_BlockPart{
@@ -137,10 +137,10 @@ func MsgToProto(msg Message) (*tmcons.Message, error) {
}
default:
return nil, fmt.Errorf("consensus: message not recognized: %T", msg)
panic(fmt.Errorf("consensus: message not recognized: %T", msg))
}
return &pb, nil
return &pb
}
// MsgFromProto takes a consensus proto message and returns the native go type
@@ -263,10 +263,7 @@ func MsgFromProto(msg *tmcons.Message) (Message, error) {
// MustEncode takes the reactors msg, makes it proto and marshals it
// this mimics `MustMarshalBinaryBare` in that is panics on error
func MustEncode(msg Message) []byte {
pb, err := MsgToProto(msg)
if err != nil {
panic(err)
}
pb := MustConvertMsgToProto(msg)
enc, err := proto.Marshal(pb)
if err != nil {
panic(err)
@@ -290,10 +287,7 @@ func WALToProto(msg WALMessage) (*tmcons.WALMessage, error) {
},
}
case msgInfo:
consMsg, err := MsgToProto(msg.Msg)
if err != nil {
return nil, err
}
consMsg := MustConvertMsgToProto(msg.Msg)
pb = tmcons.WALMessage{
Sum: &tmcons.WALMessage_MsgInfo{
MsgInfo: &tmcons.MsgInfo{

View File

@@ -189,11 +189,7 @@ func TestMsgToProto(t *testing.T) {
for _, tt := range testsCases {
tt := tt
t.Run(tt.testName, func(t *testing.T) {
pb, err := MsgToProto(tt.msg)
if tt.wantErr == true {
assert.Equal(t, err != nil, tt.wantErr)
return
}
pb := MustConvertMsgToProto(tt.msg)
assert.EqualValues(t, tt.want, pb, tt.testName)
msg, err := MsgFromProto(pb)

View File

@@ -297,16 +297,13 @@ func (conR *Reactor) Receive(chID byte, src p2p.Peer, msgBytes []byte) {
default:
panic("Bad VoteSetBitsMessage field Type. Forgot to add a check in ValidateBasic?")
}
p, err := MsgToProto(&VoteSetBitsMessage{
p := MustConvertMsgToProto(&VoteSetBitsMessage{
Height: msg.Height,
Round: msg.Round,
Type: msg.Type,
BlockID: msg.BlockID,
Votes: ourVotes,
})
if err != nil {
panic(err)
}
src.TrySend(p2p.Envelope{
ChannelID: VoteSetBitsChannel,
Message: p,
@@ -461,16 +458,13 @@ func (conR *Reactor) NewReceive(e p2p.Envelope) {
default:
panic("Bad VoteSetBitsMessage field Type. Forgot to add a check in ValidateBasic?")
}
p, err := MsgToProto(&VoteSetBitsMessage{
p := MustConvertMsgToProto(&VoteSetBitsMessage{
Height: msg.Height,
Round: msg.Round,
Type: msg.Type,
BlockID: msg.BlockID,
Votes: ourVotes,
})
if err != nil {
panic(err)
}
e.Src.TrySend(p2p.Envelope{
ChannelID: VoteSetBitsChannel,
Message: p,
@@ -606,10 +600,7 @@ func (conR *Reactor) unsubscribeFromBroadcastEvents() {
func (conR *Reactor) broadcastNewRoundStepMessage(rs *cstypes.RoundState) {
nrsMsg := makeRoundStepMessage(rs)
p, err := MsgToProto(nrsMsg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(nrsMsg)
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -625,10 +616,7 @@ func (conR *Reactor) broadcastNewValidBlockMessage(rs *cstypes.RoundState) {
BlockParts: rs.ProposalBlockParts.BitArray(),
IsCommit: rs.Step == cstypes.RoundStepCommit,
}
p, err := MsgToProto(csMsg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(csMsg)
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -644,10 +632,7 @@ func (conR *Reactor) broadcastHasVoteMessage(vote *types.Vote) {
Type: vote.Type,
Index: vote.ValidatorIndex,
}
p, err := MsgToProto(msg)
if err != nil {
panic(err) // todo update the broadcast logic.
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -691,10 +676,7 @@ func makeRoundStepMessage(rs *cstypes.RoundState) (nrsMsg *NewRoundStepMessage)
func (conR *Reactor) sendNewRoundStepMessage(peer p2p.Peer) {
rs := conR.getRoundState()
nrsMsg := makeRoundStepMessage(rs)
p, err := MsgToProto(nrsMsg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(nrsMsg)
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -744,11 +726,7 @@ OUTER_LOOP:
Part: part,
}
logger.Debug("Sending block part", "height", prs.Height, "round", prs.Round)
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: DataChannel,
Message: p,
@@ -801,11 +779,7 @@ OUTER_LOOP:
{
msg := &ProposalMessage{Proposal: rs.Proposal}
logger.Debug("Sending proposal", "height", prs.Height, "round", prs.Round)
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: DataChannel,
Message: p,
@@ -826,11 +800,7 @@ OUTER_LOOP:
ProposalPOL: rs.Votes.Prevotes(rs.Proposal.POLRound).BitArray(),
}
logger.Debug("Sending POL", "height", prs.Height, "round", prs.Round)
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: DataChannel,
Message: p,
@@ -878,11 +848,7 @@ func (conR *Reactor) gossipDataForCatchup(logger log.Logger, rs *cstypes.RoundSt
Part: part,
}
logger.Debug("Sending block part for catchup", "round", prs.Round, "index", index)
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: DataChannel,
Message: p,
@@ -1046,15 +1012,12 @@ OUTER_LOOP:
prs := ps.GetRoundState()
if rs.Height == prs.Height {
if maj23, ok := rs.Votes.Prevotes(prs.Round).TwoThirdsMajority(); ok {
p, err := MsgToProto(&VoteSetMaj23Message{
p := MustConvertMsgToProto(&VoteSetMaj23Message{
Height: prs.Height,
Round: prs.Round,
Type: tmproto.PrevoteType,
BlockID: maj23,
})
if err != nil {
panic(err)
}
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -1071,15 +1034,12 @@ OUTER_LOOP:
prs := ps.GetRoundState()
if rs.Height == prs.Height {
if maj23, ok := rs.Votes.Precommits(prs.Round).TwoThirdsMajority(); ok {
p, err := MsgToProto(&VoteSetMaj23Message{
p := MustConvertMsgToProto(&VoteSetMaj23Message{
Height: prs.Height,
Round: prs.Round,
Type: tmproto.PrecommitType,
BlockID: maj23,
})
if err != nil {
panic(err)
}
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -1096,15 +1056,12 @@ OUTER_LOOP:
prs := ps.GetRoundState()
if rs.Height == prs.Height && prs.ProposalPOLRound >= 0 {
if maj23, ok := rs.Votes.Prevotes(prs.ProposalPOLRound).TwoThirdsMajority(); ok {
p, err := MsgToProto(&VoteSetMaj23Message{
p := MustConvertMsgToProto(&VoteSetMaj23Message{
Height: prs.Height,
Round: prs.ProposalPOLRound,
Type: tmproto.PrevoteType,
BlockID: maj23,
})
if err != nil {
panic(err)
}
e := p2p.Envelope{
ChannelID: StateChannel,
@@ -1125,15 +1082,12 @@ OUTER_LOOP:
if prs.CatchupCommitRound != -1 && prs.Height > 0 && prs.Height <= conR.conS.blockStore.Height() &&
prs.Height >= conR.conS.blockStore.Base() {
if commit := conR.conS.LoadCommit(prs.Height); commit != nil {
p, err := MsgToProto(&VoteSetMaj23Message{
p := MustConvertMsgToProto(&VoteSetMaj23Message{
Height: prs.Height,
Round: commit.Round,
Type: tmproto.PrecommitType,
BlockID: commit.BlockID,
})
if err != nil {
panic(err)
}
e := p2p.Envelope{
ChannelID: StateChannel,
Message: p,
@@ -1354,11 +1308,7 @@ func (ps *PeerState) PickSendVote(votes types.VoteSetReader) bool {
if vote, ok := ps.PickVoteToSend(votes); ok {
msg := &VoteMessage{vote}
ps.logger.Debug("Sending vote message", "ps", ps, "vote", vote)
p, err := MsgToProto(msg)
if err != nil {
panic(err)
}
p := MustConvertMsgToProto(msg)
e := p2p.Envelope{
ChannelID: VoteChannel,
Message: p,