broadcast proposer heartbeat msg

This commit is contained in:
Ethan Buchman
2017-07-29 11:45:02 -04:00
parent b96d28a42b
commit 530626dab7
3 changed files with 59 additions and 3 deletions
+30
View File
@@ -311,6 +311,21 @@ func (conR *ConsensusReactor) registerEventCallbacks() {
edv := data.Unwrap().(types.EventDataVote)
conR.broadcastHasVoteMessage(edv.Vote)
})
types.AddListenerForEvent(conR.evsw, "conR", types.EventStringProposerHeartbeat(), func(data types.TMEventData) {
heartbeat := data.Unwrap().(types.EventDataProposerHeartbeat)
conR.broadcastProposerHeartbeatMessage(heartbeat)
})
}
func (conR *ConsensusReactor) broadcastProposerHeartbeatMessage(heartbeat types.EventDataProposerHeartbeat) {
msg := &ProposerHeartbeatMessage{
Height: heartbeat.Height,
Round: heartbeat.Round,
Proposer: heartbeat.Proposer,
Sequence: heartbeat.Sequence,
}
conR.Switch.Broadcast(StateChannel, struct{ ConsensusMessage }{msg})
}
func (conR *ConsensusReactor) broadcastNewRoundStep(rs *RoundState) {
@@ -1305,3 +1320,18 @@ type VoteSetBitsMessage struct {
func (m *VoteSetBitsMessage) String() string {
return fmt.Sprintf("[VSB %v/%02d/%v %v %v]", m.Height, m.Round, m.Type, m.BlockID, m.Votes)
}
//-------------------------------------
// ProposerHeartbeatMessage is sent to signal that the proposer is alive and waiting for transactions
type ProposerHeartbeatMessage struct {
Height int
Round int
Proposer []byte
Sequence int
}
// String returns a string representation.
func (m *ProposerHeartbeatMessage) String() string {
return fmt.Sprintf("[HEARTBEAT %v/%02d %X %d]", m.Height, m.Round, m.Proposer, m.Sequence)
}
+8 -2
View File
@@ -808,11 +808,17 @@ func (cs *ConsensusState) needProofBlock(height int) bool {
}
func (cs *ConsensusState) proposalHeartbeat() {
counter := 0
addr := cs.privValidator.GetAddress()
for {
select {
default:
// TODO: broadcast heartbeat
if cs.evsw != nil {
rs := cs.RoundStateEvent()
heartbeat := types.EventDataProposerHeartbeat{rs, addr, counter}
types.FireEventProposerHeartbeat(cs.evsw, heartbeat)
counter += 1
}
time.Sleep(time.Second)
}
}