Skip to content

Commit

Permalink
cs: set missing_validators(_power) metrics to 0 for 1st block
Browse files Browse the repository at this point in the history
also, do not send any LastCommitInfo.Votes for 1st block.

remember that the first LastCommit is intentionally empty, so it makes
sense for LastCommitInfo.Votes to also be empty. Because we can't really
tell if validator signed or not. Similar for ^ metrics, we can't say if
particular validator was missing or not.

Closes #4192
  • Loading branch information
melekes committed Nov 26, 2019
1 parent 759cceb commit cd2d972
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 19 deletions.
26 changes: 16 additions & 10 deletions consensus/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -1461,20 +1461,26 @@ func (cs *ConsensusState) finalizeCommit(height int64) {
func (cs *ConsensusState) recordMetrics(height int64, block *types.Block) {
cs.metrics.Validators.Set(float64(cs.Validators.Size()))
cs.metrics.ValidatorsPower.Set(float64(cs.Validators.TotalVotingPower()))
missingValidators := 0
missingValidatorsPower := int64(0)
for i, val := range cs.Validators.Validators {
if i >= len(block.LastCommit.Signatures) {
break
}
commitSig := block.LastCommit.Signatures[i]
if commitSig.Absent() {
missingValidators++
missingValidatorsPower += val.VotingPower

var (
missingValidators int
missingValidatorsPower int64
)
// height=0 -> MissingValidators and MissingValidatorsPower are both 0.
// Remember that the first LastCommit is intentionally empty, so it's not
// fair to increment missing validators number.
if height > 1 {
for i, val := range cs.Validators.Validators {
commitSig := block.LastCommit.Signatures[i]
if commitSig.Absent() {
missingValidators++
missingValidatorsPower += val.VotingPower
}
}
}
cs.metrics.MissingValidators.Set(float64(missingValidators))
cs.metrics.MissingValidatorsPower.Set(float64(missingValidatorsPower))

cs.metrics.ByzantineValidators.Set(float64(len(block.Evidence.Evidence)))
byzantineValidatorsPower := int64(0)
for _, ev := range block.Evidence.Evidence {
Expand Down
19 changes: 10 additions & 9 deletions state/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -332,16 +332,17 @@ func getBeginBlockValidatorInfo(block *types.Block, stateDB dbm.DB) (abci.LastCo
lastValSet = types.NewValidatorSet(nil)
}

for i, val := range lastValSet.Validators {
if i >= len(block.LastCommit.Signatures) {
break
}
commitSig := block.LastCommit.Signatures[i]
voteInfo := abci.VoteInfo{
Validator: types.TM2PB.Validator(val),
SignedLastBlock: !commitSig.Absent(),
// block.Height=1 -> LastCommitInfo.Votes are empty.
// Remember that the first LastCommit is intentionally empty, so it makes
// sense for LastCommitInfo.Votes to also be empty.
if block.Height > 1 {
for i, val := range lastValSet.Validators {
commitSig := block.LastCommit.Signatures[i]
voteInfos[i] = abci.VoteInfo{
Validator: types.TM2PB.Validator(val),
SignedLastBlock: !commitSig.Absent(),
}
}
voteInfos[i] = voteInfo
}

for i, ev := range block.Evidence.Evidence {
Expand Down

0 comments on commit cd2d972

Please sign in to comment.