@ -10,7 +10,7 @@ import (
"time"
fail "github.com/ebuchman/fail-test"
"github.com/tendermint/go-wire"
wire "github.com/tendermint/go-wire"
cfg "github.com/tendermint/tendermint/config"
"github.com/tendermint/tendermint/proxy"
sm "github.com/tendermint/tendermint/state"
@ -237,7 +237,7 @@ func NewConsensusState(config *cfg.ConsensusConfig, state *sm.State, proxyAppCon
// Don't call scheduleRound0 yet.
// We do that upon Start().
cs . reconstructLastCommit ( state )
cs . BaseService = * cmn . NewBaseService ( log , "ConsensusState" , cs )
cs . BaseService = * cmn . NewBaseService ( nil , "ConsensusState" , cs )
return cs
}
@ -304,7 +304,7 @@ func (cs *ConsensusState) OnStart() error {
walFile := cs . config . WalFile ( )
if err := cs . OpenWAL ( walFile ) ; err != nil {
l og. Error ( "Error loading ConsensusState wal" , "error" , err . Error ( ) )
cs . L ogger . Error ( "Error loading ConsensusState wal" , "error" , err . Error ( ) )
return err
}
@ -318,7 +318,7 @@ func (cs *ConsensusState) OnStart() error {
// we may have lost some votes if the process crashed
// reload from consensus log to catchup
if err := cs . catchupReplay ( cs . Height ) ; err != nil {
l og. Error ( "Error on catchup replay. Proceeding to start ConsensusState anyway" , "error" , err . Error ( ) )
cs . L ogger . Error ( "Error on catchup replay. Proceeding to start ConsensusState anyway" , "error" , err . Error ( ) )
// NOTE: if we ever do return an error here,
// make sure to stop the timeoutTicker
}
@ -361,7 +361,7 @@ func (cs *ConsensusState) Wait() {
func ( cs * ConsensusState ) OpenWAL ( walFile string ) ( err error ) {
err = cmn . EnsureDir ( path . Dir ( walFile ) , 0700 )
if err != nil {
l og. Error ( "Error ensuring ConsensusState wal dir" , "error" , err . Error ( ) )
cs . L ogger . Error ( "Error ensuring ConsensusState wal dir" , "error" , err . Error ( ) )
return err
}
@ -442,7 +442,7 @@ func (cs *ConsensusState) updateRoundStep(round int, step RoundStepType) {
// enterNewRound(height, 0) at cs.StartTime.
func ( cs * ConsensusState ) scheduleRound0 ( rs * RoundState ) {
//log .Info("scheduleRound0", "now", time.Now(), "startTime", cs.StartTime)
//cs.Logger .Info("scheduleRound0", "now", time.Now(), "startTime", cs.StartTime)
sleepDuration := rs . StartTime . Sub ( time . Now ( ) )
cs . scheduleTimeout ( sleepDuration , rs . Height , 0 , RoundStepNewHeight )
}
@ -461,7 +461,7 @@ func (cs *ConsensusState) sendInternalMessage(mi msgInfo) {
// be processed out of order.
// TODO: use CList here for strict determinism and
// attempt push to internalMsgQueue in receiveRoutine
log . Warn ( "Internal msg queue is full. Using a go-routine" )
cs . Logger . Info ( "Internal msg queue is full. Using a go-routine" )
go func ( ) { cs . internalMsgQueue <- mi } ( )
}
}
@ -507,7 +507,7 @@ func (cs *ConsensusState) updateToState(state *sm.State) {
// This happens when SwitchToConsensus() is called in the reactor.
// We don't want to reset e.g. the Votes.
if cs . state != nil && ( state . LastBlockHeight <= cs . state . LastBlockHeight ) {
log . Notice ( "Ignoring updateToState()" , "newHeight" , state . LastBlockHeight + 1 , "oldHeight" , cs . state . LastBlockHeight + 1 )
cs . Logger . Info ( "Ignoring updateToState()" , "newHeight" , state . LastBlockHeight + 1 , "oldHeight" , cs . state . LastBlockHeight + 1 )
return
}
@ -576,7 +576,7 @@ func (cs *ConsensusState) receiveRoutine(maxSteps int) {
for {
if maxSteps > 0 {
if cs . nSteps >= maxSteps {
log . Warn ( "reached max steps. exiting receive routine" )
cs . Logger . Error ( "reached max steps. exiting receive routine" )
cs . nSteps = 0
return
}
@ -649,19 +649,19 @@ func (cs *ConsensusState) handleMsg(mi msgInfo, rs RoundState) {
// the peer is sending us CatchupCommit precommits.
// We could make note of this and help filter in broadcastHasVoteMessage().
default :
log . Warn ( "Unknown msg type" , reflect . TypeOf ( msg ) )
cs . Logger . Error ( "Unknown msg type" , reflect . TypeOf ( msg ) )
}
if err != nil {
l og. Error ( "Error with msg" , "type" , reflect . TypeOf ( msg ) , "peer" , peerKey , "error" , err , "msg" , msg )
cs . L ogger . Error ( "Error with msg" , "type" , reflect . TypeOf ( msg ) , "peer" , peerKey , "error" , err , "msg" , msg )
}
}
func ( cs * ConsensusState ) handleTimeout ( ti timeoutInfo , rs RoundState ) {
l og. Debug ( "Received tock" , "timeout" , ti . Duration , "height" , ti . Height , "round" , ti . Round , "step" , ti . Step )
cs . L ogger . Debug ( "Received tock" , "timeout" , ti . Duration , "height" , ti . Height , "round" , ti . Round , "step" , ti . Step )
// timeouts must be for current height, round, step
if ti . Height != rs . Height || ti . Round < rs . Round || ( ti . Round == rs . Round && ti . Step < rs . Step ) {
l og. Debug ( "Ignoring tock because we're ahead" , "height" , rs . Height , "round" , rs . Round , "step" , rs . Step )
cs . L ogger . Debug ( "Ignoring tock because we're ahead" , "height" , rs . Height , "round" , rs . Round , "step" , rs . Step )
return
}
@ -699,15 +699,15 @@ func (cs *ConsensusState) handleTimeout(ti timeoutInfo, rs RoundState) {
// NOTE: cs.StartTime was already set for height.
func ( cs * ConsensusState ) enterNewRound ( height int , round int ) {
if cs . Height != height || round < cs . Round || ( cs . Round == round && cs . Step != RoundStepNewHeight ) {
l og. Debug ( cmn . Fmt ( "enterNewRound(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterNewRound(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
return
}
if now := time . Now ( ) ; cs . StartTime . After ( now ) {
log . Warn ( "Need to set a buffer and log.Warn() here for sanity.", "startTime" , cs . StartTime , "now" , now )
cs . Logger . Info ( "Need to set a buffer and log message here for sanity.", "startTime" , cs . StartTime , "now" , now )
}
log . Notice ( cmn . Fmt ( "enterNewRound(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . Logger . Info ( cmn . Fmt ( "enterNewRound(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
// Increment validators if necessary
validators := cs . Validators
@ -741,10 +741,10 @@ func (cs *ConsensusState) enterNewRound(height int, round int) {
// Enter: from NewRound(height,round).
func ( cs * ConsensusState ) enterPropose ( height int , round int ) {
if cs . Height != height || round < cs . Round || ( cs . Round == round && RoundStepPropose <= cs . Step ) {
l og. Debug ( cmn . Fmt ( "enterPropose(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterPropose(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
return
}
l og. Info ( cmn . Fmt ( "enterPropose(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Info ( cmn . Fmt ( "enterPropose(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
defer func ( ) {
// Done enterPropose:
@ -768,9 +768,9 @@ func (cs *ConsensusState) enterPropose(height int, round int) {
}
if ! bytes . Equal ( cs . Validators . GetProposer ( ) . Address , cs . privValidator . GetAddress ( ) ) {
l og. Info ( "enterPropose: Not our turn to propose" , "proposer" , cs . Validators . GetProposer ( ) . Address , "privValidator" , cs . privValidator )
cs . L ogger . Info ( "enterPropose: Not our turn to propose" , "proposer" , cs . Validators . GetProposer ( ) . Address , "privValidator" , cs . privValidator )
} else {
l og. Info ( "enterPropose: Our turn to propose" , "proposer" , cs . Validators . GetProposer ( ) . Address , "privValidator" , cs . privValidator )
cs . L ogger . Info ( "enterPropose: Our turn to propose" , "proposer" , cs . Validators . GetProposer ( ) . Address , "privValidator" , cs . privValidator )
cs . decideProposal ( height , round )
}
@ -810,11 +810,11 @@ func (cs *ConsensusState) defaultDecideProposal(height, round int) {
part := blockParts . GetPart ( i )
cs . sendInternalMessage ( msgInfo { & BlockPartMessage { cs . Height , cs . Round , part } , "" } )
}
l og. Info ( "Signed proposal" , "height" , height , "round" , round , "proposal" , proposal )
l og. Debug ( cmn . Fmt ( "Signed proposal block: %v" , block ) )
cs . L ogger . Info ( "Signed proposal" , "height" , height , "round" , round , "proposal" , proposal )
cs . L ogger . Debug ( cmn . Fmt ( "Signed proposal block: %v" , block ) )
} else {
if ! cs . replayMode {
log . Warn ( "enterPropose: Error signing proposal" , "height" , height , "round" , round , "error" , err )
cs . Logger . Error ( "enterPropose: Error signing proposal" , "height" , height , "round" , round , "error" , err )
}
}
}
@ -849,7 +849,7 @@ func (cs *ConsensusState) createProposalBlock() (block *types.Block, blockParts
commit = cs . LastCommit . MakeCommit ( )
} else {
// This shouldn't happen.
l og. Error ( "enterPropose: Cannot propose anything: No commit for the previous block." )
cs . L ogger . Error ( "enterPropose: Cannot propose anything: No commit for the previous block." )
return
}
@ -867,7 +867,7 @@ func (cs *ConsensusState) createProposalBlock() (block *types.Block, blockParts
// Otherwise vote nil.
func ( cs * ConsensusState ) enterPrevote ( height int , round int ) {
if cs . Height != height || round < cs . Round || ( cs . Round == round && RoundStepPrevote <= cs . Step ) {
l og. Debug ( cmn . Fmt ( "enterPrevote(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterPrevote(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
return
}
@ -885,7 +885,7 @@ func (cs *ConsensusState) enterPrevote(height int, round int) {
// TODO: catchup event?
}
l og. Info ( cmn . Fmt ( "enterPrevote(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Info ( cmn . Fmt ( "enterPrevote(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
// Sign and broadcast vote as necessary
cs . doPrevote ( height , round )
@ -897,14 +897,14 @@ func (cs *ConsensusState) enterPrevote(height int, round int) {
func ( cs * ConsensusState ) defaultDoPrevote ( height int , round int ) {
// If a block is locked, prevote that.
if cs . LockedBlock != nil {
log . Notice ( "enterPrevote: Block was locked" )
cs . Logger . Info ( "enterPrevote: Block was locked" )
cs . signAddVote ( types . VoteTypePrevote , cs . LockedBlock . Hash ( ) , cs . LockedBlockParts . Header ( ) )
return
}
// If ProposalBlock is nil, prevote nil.
if cs . ProposalBlock == nil {
log . Warn ( "enterPrevote: ProposalBlock is nil" )
cs . Logger . Error ( "enterPrevote: ProposalBlock is nil" )
cs . signAddVote ( types . VoteTypePrevote , nil , types . PartSetHeader { } )
return
}
@ -913,7 +913,7 @@ func (cs *ConsensusState) defaultDoPrevote(height int, round int) {
err := cs . state . ValidateBlock ( cs . ProposalBlock )
if err != nil {
// ProposalBlock is invalid, prevote nil.
log . Warn ( "enterPrevote: ProposalBlock is invalid" , "error" , err )
cs . Logger . Error ( "enterPrevote: ProposalBlock is invalid" , "error" , err )
cs . signAddVote ( types . VoteTypePrevote , nil , types . PartSetHeader { } )
return
}
@ -928,13 +928,13 @@ func (cs *ConsensusState) defaultDoPrevote(height int, round int) {
// Enter: any +2/3 prevotes at next round.
func ( cs * ConsensusState ) enterPrevoteWait ( height int , round int ) {
if cs . Height != height || round < cs . Round || ( cs . Round == round && RoundStepPrevoteWait <= cs . Step ) {
l og. Debug ( cmn . Fmt ( "enterPrevoteWait(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterPrevoteWait(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
return
}
if ! cs . Votes . Prevotes ( round ) . HasTwoThirdsAny ( ) {
cmn . PanicSanity ( cmn . Fmt ( "enterPrevoteWait(%v/%v), but Prevotes does not have any +2/3 votes" , height , round ) )
}
l og. Info ( cmn . Fmt ( "enterPrevoteWait(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Info ( cmn . Fmt ( "enterPrevoteWait(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
defer func ( ) {
// Done enterPrevoteWait:
@ -954,11 +954,11 @@ func (cs *ConsensusState) enterPrevoteWait(height int, round int) {
// else, precommit nil otherwise.
func ( cs * ConsensusState ) enterPrecommit ( height int , round int ) {
if cs . Height != height || round < cs . Round || ( cs . Round == round && RoundStepPrecommit <= cs . Step ) {
l og. Debug ( cmn . Fmt ( "enterPrecommit(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterPrecommit(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
return
}
l og. Info ( cmn . Fmt ( "enterPrecommit(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Info ( cmn . Fmt ( "enterPrecommit(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
defer func ( ) {
// Done enterPrecommit:
@ -971,9 +971,9 @@ func (cs *ConsensusState) enterPrecommit(height int, round int) {
// If we don't have a polka, we must precommit nil
if ! ok {
if cs . LockedBlock != nil {
log . Notice ( "enterPrecommit: No +2/3 prevotes during enterPrecommit while we're locked. Precommitting nil" )
cs . Logger . Info ( "enterPrecommit: No +2/3 prevotes during enterPrecommit while we're locked. Precommitting nil" )
} else {
log . Notice ( "enterPrecommit: No +2/3 prevotes during enterPrecommit. Precommitting nil." )
cs . Logger . Info ( "enterPrecommit: No +2/3 prevotes during enterPrecommit. Precommitting nil." )
}
cs . signAddVote ( types . VoteTypePrecommit , nil , types . PartSetHeader { } )
return
@ -991,9 +991,9 @@ func (cs *ConsensusState) enterPrecommit(height int, round int) {
// +2/3 prevoted nil. Unlock and precommit nil.
if len ( blockID . Hash ) == 0 {
if cs . LockedBlock == nil {
log . Notice ( "enterPrecommit: +2/3 prevoted for nil." )
cs . Logger . Info ( "enterPrecommit: +2/3 prevoted for nil." )
} else {
log . Notice ( "enterPrecommit: +2/3 prevoted for nil. Unlocking" )
cs . Logger . Info ( "enterPrecommit: +2/3 prevoted for nil. Unlocking" )
cs . LockedRound = 0
cs . LockedBlock = nil
cs . LockedBlockParts = nil
@ -1007,7 +1007,7 @@ func (cs *ConsensusState) enterPrecommit(height int, round int) {
// If we're already locked on that block, precommit it, and update the LockedRound
if cs . LockedBlock . HashesTo ( blockID . Hash ) {
log . Notice ( "enterPrecommit: +2/3 prevoted locked block. Relocking" )
cs . Logger . Info ( "enterPrecommit: +2/3 prevoted locked block. Relocking" )
cs . LockedRound = round
types . FireEventRelock ( cs . evsw , cs . RoundStateEvent ( ) )
cs . signAddVote ( types . VoteTypePrecommit , blockID . Hash , blockID . PartsHeader )
@ -1016,7 +1016,7 @@ func (cs *ConsensusState) enterPrecommit(height int, round int) {
// If +2/3 prevoted for proposal block, stage and precommit it
if cs . ProposalBlock . HashesTo ( blockID . Hash ) {
log . Notice ( "enterPrecommit: +2/3 prevoted proposal block. Locking" , "hash" , blockID . Hash )
cs . Logger . Info ( "enterPrecommit: +2/3 prevoted proposal block. Locking" , "hash" , blockID . Hash )
// Validate the block.
if err := cs . state . ValidateBlock ( cs . ProposalBlock ) ; err != nil {
cmn . PanicConsensus ( cmn . Fmt ( "enterPrecommit: +2/3 prevoted for an invalid block: %v" , err ) )
@ -1048,13 +1048,13 @@ func (cs *ConsensusState) enterPrecommit(height int, round int) {
// Enter: any +2/3 precommits for next round.
func ( cs * ConsensusState ) enterPrecommitWait ( height int , round int ) {
if cs . Height != height || round < cs . Round || ( cs . Round == round && RoundStepPrecommitWait <= cs . Step ) {
l og. Debug ( cmn . Fmt ( "enterPrecommitWait(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterPrecommitWait(%v/%v): Invalid args. Current step: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
return
}
if ! cs . Votes . Precommits ( round ) . HasTwoThirdsAny ( ) {
cmn . PanicSanity ( cmn . Fmt ( "enterPrecommitWait(%v/%v), but Precommits does not have any +2/3 votes" , height , round ) )
}
l og. Info ( cmn . Fmt ( "enterPrecommitWait(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Info ( cmn . Fmt ( "enterPrecommitWait(%v/%v). Current: %v/%v/%v" , height , round , cs . Height , cs . Round , cs . Step ) )
defer func ( ) {
// Done enterPrecommitWait:
@ -1070,10 +1070,10 @@ func (cs *ConsensusState) enterPrecommitWait(height int, round int) {
// Enter: +2/3 precommits for block
func ( cs * ConsensusState ) enterCommit ( height int , commitRound int ) {
if cs . Height != height || RoundStepCommit <= cs . Step {
l og. Debug ( cmn . Fmt ( "enterCommit(%v/%v): Invalid args. Current step: %v/%v/%v" , height , commitRound , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "enterCommit(%v/%v): Invalid args. Current step: %v/%v/%v" , height , commitRound , cs . Height , cs . Round , cs . Step ) )
return
}
l og. Info ( cmn . Fmt ( "enterCommit(%v/%v). Current: %v/%v/%v" , height , commitRound , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Info ( cmn . Fmt ( "enterCommit(%v/%v). Current: %v/%v/%v" , height , commitRound , cs . Height , cs . Round , cs . Step ) )
defer func ( ) {
// Done enterCommit:
@ -1121,13 +1121,13 @@ func (cs *ConsensusState) tryFinalizeCommit(height int) {
blockID , ok := cs . Votes . Precommits ( cs . CommitRound ) . TwoThirdsMajority ( )
if ! ok || len ( blockID . Hash ) == 0 {
log . Warn ( "Attempt to finalize failed. There was no +2/3 majority, or +2/3 was for <nil>." , "height" , height )
cs . Logger . Error ( "Attempt to finalize failed. There was no +2/3 majority, or +2/3 was for <nil>." , "height" , height )
return
}
if ! cs . ProposalBlock . HashesTo ( blockID . Hash ) {
// TODO: this happens every time if we're not a validator (ugly logs)
// TODO: ^^ wait, why does it matter that we're a validator?
log . Warn ( "Attempt to finalize failed. We don't have the commit block." , "height" , height , "proposal-block" , cs . ProposalBlock . Hash ( ) , "commit-block" , blockID . Hash )
cs . Logger . Error ( "Attempt to finalize failed. We don't have the commit block." , "height" , height , "proposal-block" , cs . ProposalBlock . Hash ( ) , "commit-block" , blockID . Hash )
return
}
// go
@ -1137,7 +1137,7 @@ func (cs *ConsensusState) tryFinalizeCommit(height int) {
// Increment height and goto RoundStepNewHeight
func ( cs * ConsensusState ) finalizeCommit ( height int ) {
if cs . Height != height || cs . Step != RoundStepCommit {
l og. Debug ( cmn . Fmt ( "finalizeCommit(%v): Invalid args. Current step: %v/%v/%v" , height , cs . Height , cs . Round , cs . Step ) )
cs . L ogger . Debug ( cmn . Fmt ( "finalizeCommit(%v): Invalid args. Current step: %v/%v/%v" , height , cs . Height , cs . Round , cs . Step ) )
return
}
@ -1157,9 +1157,9 @@ func (cs *ConsensusState) finalizeCommit(height int) {
cmn . PanicConsensus ( cmn . Fmt ( "+2/3 committed an invalid block: %v" , err ) )
}
log . Notice ( cmn . Fmt ( "Finalizing commit of block with %d txs" , block . NumTxs ) ,
cs . Logger . Info ( cmn . Fmt ( "Finalizing commit of block with %d txs" , block . NumTxs ) ,
"height" , block . Height , "hash" , block . Hash ( ) , "root" , block . AppHash )
l og. Info ( cmn . Fmt ( "%v" , block ) )
cs . L ogger . Info ( cmn . Fmt ( "%v" , block ) )
fail . Fail ( ) // XXX
@ -1172,7 +1172,7 @@ func (cs *ConsensusState) finalizeCommit(height int) {
cs . blockStore . SaveBlock ( block , blockParts , seenCommit )
} else {
// Happens during replay if we already saved the block but didn't commit
l og. Info ( "Calling finalizeCommit on already stored block" , "height" , block . Height )
cs . L ogger . Info ( "Calling finalizeCommit on already stored block" , "height" , block . Height )
}
fail . Fail ( ) // XXX
@ -1200,7 +1200,7 @@ func (cs *ConsensusState) finalizeCommit(height int) {
// NOTE: the block.AppHash wont reflect these txs until the next block
err := stateCopy . ApplyBlock ( eventCache , cs . proxyAppConn , block , blockParts . Header ( ) , cs . mempool )
if err != nil {
l og. Error ( "Error on ApplyBlock. Did the application crash? Please restart tendermint" , "error" , err )
cs . L ogger . Error ( "Error on ApplyBlock. Did the application crash? Please restart tendermint" , "error" , err )
return
}
@ -1293,7 +1293,7 @@ func (cs *ConsensusState) addProposalBlockPart(height int, part *types.Part, ver
var err error
cs . ProposalBlock = wire . ReadBinary ( & types . Block { } , cs . ProposalBlockParts . GetReader ( ) , types . MaxBlockSize , & n , & err ) . ( * types . Block )
// NOTE: it's possible to receive complete proposal blocks for future rounds without having the proposal
l og. Info ( "Received complete proposal block" , "height" , cs . ProposalBlock . Height , "hash" , cs . ProposalBlock . Hash ( ) )
cs . L ogger . Info ( "Received complete proposal block" , "height" , cs . ProposalBlock . Height , "hash" , cs . ProposalBlock . Hash ( ) )
if cs . Step == RoundStepPropose && cs . isProposalComplete ( ) {
// Move onto the next step
cs . enterPrevote ( height , cs . Round )
@ -1317,10 +1317,10 @@ func (cs *ConsensusState) tryAddVote(vote *types.Vote, peerKey string) error {
return err
} else if _ , ok := err . ( * types . ErrVoteConflictingVotes ) ; ok {
if peerKey == "" {
log . Warn ( "Found conflicting vote from ourselves. Did you unsafe_reset a validator?" , "height" , vote . Height , "round" , vote . Round , "type" , vote . Type )
cs . Logger . Error ( "Found conflicting vote from ourselves. Did you unsafe_reset a validator?" , "height" , vote . Height , "round" , vote . Round , "type" , vote . Type )
return err
}
log . Warn ( "Found conflicting vote. Publish evidence (TODO)" )
cs . Logger . Error ( "Found conflicting vote. Publish evidence (TODO)" )
/ * TODO
evidenceTx := & types . DupeoutTx {
Address : address ,
@ -1332,7 +1332,7 @@ func (cs *ConsensusState) tryAddVote(vote *types.Vote, peerKey string) error {
return err
} else {
// Probably an invalid signature. Bad peer.
log . Warn ( "Error attempting to add vote" , "error" , err )
cs . Logger . Error ( "Error attempting to add vote" , "error" , err )
return ErrAddingVote
}
}
@ -1342,7 +1342,7 @@ func (cs *ConsensusState) tryAddVote(vote *types.Vote, peerKey string) error {
//-----------------------------------------------------------------------------
func ( cs * ConsensusState ) addVote ( vote * types . Vote , peerKey string ) ( added bool , err error ) {
l og. Debug ( "addVote" , "voteHeight" , vote . Height , "voteType" , vote . Type , "csHeight" , cs . Height )
cs . L ogger . Debug ( "addVote" , "voteHeight" , vote . Height , "voteType" , vote . Type , "csHeight" , cs . Height )
// A precommit for the previous height?
// These come in while we wait timeoutCommit
@ -1354,7 +1354,7 @@ func (cs *ConsensusState) addVote(vote *types.Vote, peerKey string) (added bool,
}
added , err = cs . LastCommit . AddVote ( vote )
if added {
l og. Info ( cmn . Fmt ( "Added to lastPrecommits: %v" , cs . LastCommit . StringShort ( ) ) )
cs . L ogger . Info ( cmn . Fmt ( "Added to lastPrecommits: %v" , cs . LastCommit . StringShort ( ) ) )
types . FireEventVote ( cs . evsw , types . EventDataVote { vote } )
// if we can skip timeoutCommit and have all the votes now,
@ -1378,7 +1378,7 @@ func (cs *ConsensusState) addVote(vote *types.Vote, peerKey string) (added bool,
switch vote . Type {
case types . VoteTypePrevote :
prevotes := cs . Votes . Prevotes ( vote . Round )
l og. Info ( "Added to prevote" , "vote" , vote , "prevotes" , prevotes . StringShort ( ) )
cs . L ogger . Info ( "Added to prevote" , "vote" , vote , "prevotes" , prevotes . StringShort ( ) )
// First, unlock if prevotes is a valid POL.
// >> lockRound < POLRound <= unlockOrChangeLockRound (see spec)
// NOTE: If (lockRound < POLRound) but !(POLRound <= unlockOrChangeLockRound),
@ -1387,7 +1387,7 @@ func (cs *ConsensusState) addVote(vote *types.Vote, peerKey string) (added bool,
if ( cs . LockedBlock != nil ) && ( cs . LockedRound < vote . Round ) && ( vote . Round <= cs . Round ) {
blockID , ok := prevotes . TwoThirdsMajority ( )
if ok && ! cs . LockedBlock . HashesTo ( blockID . Hash ) {
log . Notice ( "Unlocking because of POL." , "lockedRound" , cs . LockedRound , "POLRound" , vote . Round )
cs . Logger . Info ( "Unlocking because of POL." , "lockedRound" , cs . LockedRound , "POLRound" , vote . Round )
cs . LockedRound = 0
cs . LockedBlock = nil
cs . LockedBlockParts = nil
@ -1411,7 +1411,7 @@ func (cs *ConsensusState) addVote(vote *types.Vote, peerKey string) (added bool,
}
case types . VoteTypePrecommit :
precommits := cs . Votes . Precommits ( vote . Round )
l og. Info ( "Added to precommit" , "vote" , vote , "precommits" , precommits . StringShort ( ) )
cs . L ogger . Info ( "Added to precommit" , "vote" , vote , "precommits" , precommits . StringShort ( ) )
blockID , ok := precommits . TwoThirdsMajority ( )
if ok {
if len ( blockID . Hash ) == 0 {
@ -1445,7 +1445,7 @@ func (cs *ConsensusState) addVote(vote *types.Vote, peerKey string) (added bool,
}
// Height mismatch, bad peer?
l og. Info ( "Vote ignored and not added" , "voteHeight" , vote . Height , "csHeight" , cs . Height , "err" , err )
cs . L ogger . Info ( "Vote ignored and not added" , "voteHeight" , vote . Height , "csHeight" , cs . Height , "err" , err )
return
}
@ -1473,11 +1473,11 @@ func (cs *ConsensusState) signAddVote(type_ byte, hash []byte, header types.Part
vote , err := cs . signVote ( type_ , hash , header )
if err == nil {
cs . sendInternalMessage ( msgInfo { & VoteMessage { vote } , "" } )
l og. Info ( "Signed and pushed vote" , "height" , cs . Height , "round" , cs . Round , "vote" , vote , "error" , err )
cs . L ogger . Info ( "Signed and pushed vote" , "height" , cs . Height , "round" , cs . Round , "vote" , vote , "error" , err )
return vote
} else {
//if !cs.replayMode {
log . Warn ( "Error signing vote" , "height" , cs . Height , "round" , cs . Round , "vote" , vote , "error" , err )
cs . Logger . Error ( "Error signing vote" , "height" , cs . Height , "round" , cs . Round , "vote" , vote , "error" , err )
//}
return nil
}