|
@ -32,9 +32,11 @@ const ( |
|
|
type ConsensusReactor struct { |
|
|
type ConsensusReactor struct { |
|
|
p2p.BaseReactor // BaseService + p2p.Switch
|
|
|
p2p.BaseReactor // BaseService + p2p.Switch
|
|
|
|
|
|
|
|
|
conS *ConsensusState |
|
|
|
|
|
|
|
|
conS *ConsensusState |
|
|
|
|
|
evsw types.EventSwitch |
|
|
|
|
|
|
|
|
|
|
|
mtx sync.RWMutex |
|
|
fastSync bool |
|
|
fastSync bool |
|
|
evsw types.EventSwitch |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// NewConsensusReactor returns a new ConsensusReactor with the given consensusState.
|
|
|
// NewConsensusReactor returns a new ConsensusReactor with the given consensusState.
|
|
@ -49,14 +51,14 @@ func NewConsensusReactor(consensusState *ConsensusState, fastSync bool) *Consens |
|
|
|
|
|
|
|
|
// OnStart implements BaseService.
|
|
|
// OnStart implements BaseService.
|
|
|
func (conR *ConsensusReactor) OnStart() error { |
|
|
func (conR *ConsensusReactor) OnStart() error { |
|
|
conR.Logger.Info("ConsensusReactor ", "fastSync", conR.fastSync) |
|
|
|
|
|
|
|
|
conR.Logger.Info("ConsensusReactor ", "fastSync", conR.FastSync()) |
|
|
conR.BaseReactor.OnStart() |
|
|
conR.BaseReactor.OnStart() |
|
|
|
|
|
|
|
|
// callbacks for broadcasting new steps and votes to peers
|
|
|
// callbacks for broadcasting new steps and votes to peers
|
|
|
// upon their respective events (ie. uses evsw)
|
|
|
// upon their respective events (ie. uses evsw)
|
|
|
conR.registerEventCallbacks() |
|
|
conR.registerEventCallbacks() |
|
|
|
|
|
|
|
|
if !conR.fastSync { |
|
|
|
|
|
|
|
|
if !conR.FastSync() { |
|
|
_, err := conR.conS.Start() |
|
|
_, err := conR.conS.Start() |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return err |
|
|
return err |
|
@ -79,7 +81,11 @@ func (conR *ConsensusReactor) SwitchToConsensus(state *sm.State) { |
|
|
// NOTE: The line below causes broadcastNewRoundStepRoutine() to
|
|
|
// NOTE: The line below causes broadcastNewRoundStepRoutine() to
|
|
|
// broadcast a NewRoundStepMessage.
|
|
|
// broadcast a NewRoundStepMessage.
|
|
|
conR.conS.updateToState(state) |
|
|
conR.conS.updateToState(state) |
|
|
|
|
|
|
|
|
|
|
|
conR.mtx.Lock() |
|
|
conR.fastSync = false |
|
|
conR.fastSync = false |
|
|
|
|
|
conR.mtx.Unlock() |
|
|
|
|
|
|
|
|
conR.conS.Start() |
|
|
conR.conS.Start() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -130,7 +136,7 @@ func (conR *ConsensusReactor) AddPeer(peer *p2p.Peer) { |
|
|
|
|
|
|
|
|
// Send our state to peer.
|
|
|
// Send our state to peer.
|
|
|
// If we're fast_syncing, broadcast a RoundStepMessage later upon SwitchToConsensus().
|
|
|
// If we're fast_syncing, broadcast a RoundStepMessage later upon SwitchToConsensus().
|
|
|
if !conR.fastSync { |
|
|
|
|
|
|
|
|
if !conR.FastSync() { |
|
|
conR.sendNewRoundStepMessages(peer) |
|
|
conR.sendNewRoundStepMessages(peer) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -210,7 +216,7 @@ func (conR *ConsensusReactor) Receive(chID byte, src *p2p.Peer, msgBytes []byte) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
case DataChannel: |
|
|
case DataChannel: |
|
|
if conR.fastSync { |
|
|
|
|
|
|
|
|
if conR.FastSync() { |
|
|
conR.Logger.Info("Ignoring message received during fastSync", "msg", msg) |
|
|
conR.Logger.Info("Ignoring message received during fastSync", "msg", msg) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
@ -228,7 +234,7 @@ func (conR *ConsensusReactor) Receive(chID byte, src *p2p.Peer, msgBytes []byte) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
case VoteChannel: |
|
|
case VoteChannel: |
|
|
if conR.fastSync { |
|
|
|
|
|
|
|
|
if conR.FastSync() { |
|
|
conR.Logger.Info("Ignoring message received during fastSync", "msg", msg) |
|
|
conR.Logger.Info("Ignoring message received during fastSync", "msg", msg) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
@ -250,7 +256,7 @@ func (conR *ConsensusReactor) Receive(chID byte, src *p2p.Peer, msgBytes []byte) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
case VoteSetBitsChannel: |
|
|
case VoteSetBitsChannel: |
|
|
if conR.fastSync { |
|
|
|
|
|
|
|
|
if conR.FastSync() { |
|
|
conR.Logger.Info("Ignoring message received during fastSync", "msg", msg) |
|
|
conR.Logger.Info("Ignoring message received during fastSync", "msg", msg) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
@ -296,6 +302,13 @@ func (conR *ConsensusReactor) SetEventSwitch(evsw types.EventSwitch) { |
|
|
conR.conS.SetEventSwitch(evsw) |
|
|
conR.conS.SetEventSwitch(evsw) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// FastSync returns whether the consensus reactor is in fast-sync mode.
|
|
|
|
|
|
func (conR *ConsensusReactor) FastSync() bool { |
|
|
|
|
|
conR.mtx.RLock() |
|
|
|
|
|
defer conR.mtx.RUnlock() |
|
|
|
|
|
return conR.fastSync |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//--------------------------------------
|
|
|
//--------------------------------------
|
|
|
|
|
|
|
|
|
// Listens for new steps and votes,
|
|
|
// Listens for new steps and votes,
|
|
|