Tidy attestation metrics
This commit is contained in:
parent
a3e464078a
commit
341a83b9e8
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user