Tidy attestation metrics

This commit is contained in:
Paul Hauner 2019-08-13 16:17:11 +10:00
parent a3e464078a
commit 341a83b9e8
No known key found for this signature in database
GPG Key ID: 5E2CFF9B75FA63DF
2 changed files with 26 additions and 6 deletions

View File

@ -547,11 +547,14 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
&self, &self,
attestation: Attestation<T::EthSpec>, attestation: Attestation<T::EthSpec>,
) -> Result<AttestationProcessingOutcome, Error> { ) -> Result<AttestationProcessingOutcome, Error> {
metrics::inc_counter(&metrics::ATTESTATION_PROCESSING_REQUESTS);
let timer = metrics::start_timer(&metrics::ATTESTATION_PROCESSING_TIMES);
// From the store, load the attestation's "head block". // From the store, load the attestation's "head block".
// //
// An honest validator would have set this block to be the head of the chain (i.e., the // An honest validator would have set this block to be the head of the chain (i.e., the
// result of running fork choice). // result of running fork choice).
if let Some(attestation_head_block) = self let result = if let Some(attestation_head_block) = self
.store .store
.get::<BeaconBlock<T::EthSpec>>(&attestation.data.beacon_block_root)? .get::<BeaconBlock<T::EthSpec>>(&attestation.data.beacon_block_root)?
{ {
@ -680,7 +683,15 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
Ok(AttestationProcessingOutcome::UnknownHeadBlock { Ok(AttestationProcessingOutcome::UnknownHeadBlock {
beacon_block_root: attestation.data.beacon_block_root, beacon_block_root: attestation.data.beacon_block_root,
}) })
};
metrics::stop_timer(timer);
if let Ok(AttestationProcessingOutcome::Processed) = &result {
metrics::inc_counter(&metrics::ATTESTATION_PROCESSING_SUCCESSES);
} }
result
} }
/// Verifies the `attestation` against the `state` to which it is attesting. /// Verifies the `attestation` against the `state` to which it is attesting.
@ -707,9 +718,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
state: &BeaconState<T::EthSpec>, state: &BeaconState<T::EthSpec>,
block: &BeaconBlock<T::EthSpec>, block: &BeaconBlock<T::EthSpec>,
) -> Result<AttestationProcessingOutcome, Error> { ) -> Result<AttestationProcessingOutcome, Error> {
metrics::inc_counter(&metrics::ATTESTATION_PROCESSING_REQUESTS);
let timer = metrics::start_timer(&metrics::ATTESTATION_PROCESSING_TIMES);
// Find the highest between: // Find the highest between:
// //
// - The highest valid finalized epoch we've ever seen (i.e., the head). // - The highest valid finalized epoch we've ever seen (i.e., the head).
@ -719,6 +727,16 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
state.finalized_checkpoint.epoch, state.finalized_checkpoint.epoch,
); );
// A helper function to allow attestation processing to be metered.
let verify_attestation_for_state = |state, attestation, spec, verify_signatures| {
let timer = metrics::start_timer(&metrics::ATTESTATION_PROCESSING_CORE);
let result = verify_attestation_for_state(state, attestation, spec, verify_signatures);
metrics::stop_timer(timer);
result
};
let result = if block.slot <= finalized_epoch.start_slot(T::EthSpec::slots_per_epoch()) { let result = if block.slot <= finalized_epoch.start_slot(T::EthSpec::slots_per_epoch()) {
// Ignore any attestation where the slot of `data.beacon_block_root` is equal to or // Ignore any attestation where the slot of `data.beacon_block_root` is equal to or
// prior to the finalized epoch. // prior to the finalized epoch.
@ -758,8 +776,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
Ok(AttestationProcessingOutcome::Processed) Ok(AttestationProcessingOutcome::Processed)
}; };
timer.map(|t| t.observe_duration());
result result
} }

View File

@ -90,6 +90,10 @@ lazy_static! {
"beacon_attestation_processing_seconds", "beacon_attestation_processing_seconds",
"Full runtime of attestation processing" "Full runtime of attestation processing"
); );
pub static ref ATTESTATION_PROCESSING_CORE: Result<Histogram> = try_create_histogram(
"beacon_attestation_processing_core_seconds",
"Time spent on the core spec processing of attestation processing"
);
/* /*
* Attestation Production * Attestation Production