From 61ab6718e97a9ebf212356e14fb739be8cc5d919 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Fri, 29 May 2020 07:15:46 +0100 Subject: [PATCH] only retrieve pubkey once for all validators (partially fixes #4865) (#4895) in consensus/state.go, when calulating metrics, retrieve address (ergo, pubkey) once prior to iterating over validatorset to ensure we do not make excessive calls to signer. Partially closes: #4865 --- CHANGELOG_PENDING.md | 1 + consensus/state.go | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index d34bd02d8..0e7243a59 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -21,3 +21,4 @@ program](https://hackerone.com/tendermint). ### BUG FIXES: +- [consensus] [\#4895](https://github.com/tendermint/tendermint/pull/4895) Cache the address of the validator to reduce querying a remote KMS (@joe-bowman) diff --git a/consensus/state.go b/consensus/state.go index 8fd0ad87a..bf8e884ea 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -1463,7 +1463,13 @@ func (cs *ConsensusState) recordMetrics(height int64, block *types.Block) { var ( missingValidators = 0 missingValidatorsPower int64 + address types.Address ) + + if cs.privValidator != nil { + address = cs.privValidator.GetPubKey().Address() + } + for i, val := range cs.Validators.Validators { var vote *types.CommitSig if i < len(block.LastCommit.Precommits) { @@ -1474,7 +1480,7 @@ func (cs *ConsensusState) recordMetrics(height int64, block *types.Block) { missingValidatorsPower += val.VotingPower } - if cs.privValidator != nil && bytes.Equal(val.Address, cs.privValidator.GetPubKey().Address()) { + if bytes.Equal(val.Address, address) { label := []string{ "validator_address", val.Address.String(), }