mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-17 03:42:46 +00:00
check the da cache and the attester cache in responding to RPC requests (#5138)
* check the da cache and the attester cache in responding to RPC requests
* use the processing cache instead
* update comment
* add da cache metrics
* rename early attester cache method
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into check-da-cache-in-rpc-response
* make rustup update run on the runners
* Revert "make rustup update run on the runners"
This reverts commit d097e9bfa8.
This commit is contained in:
@@ -182,9 +182,9 @@ macro_rules! impl_availability_view {
|
||||
|
||||
impl_availability_view!(
|
||||
ProcessingComponents,
|
||||
KzgCommitments<E>,
|
||||
Arc<SignedBeaconBlock<E>>,
|
||||
KzgCommitment,
|
||||
block_commitments,
|
||||
block,
|
||||
blob_commitments
|
||||
);
|
||||
|
||||
@@ -212,12 +212,6 @@ pub trait GetCommitment<E: EthSpec> {
|
||||
fn get_commitment(&self) -> &KzgCommitment;
|
||||
}
|
||||
|
||||
// These implementations are required to implement `AvailabilityView` for `ProcessingView`.
|
||||
impl<E: EthSpec> GetCommitments<E> for KzgCommitments<E> {
|
||||
fn get_commitments(&self) -> KzgCommitments<E> {
|
||||
self.clone()
|
||||
}
|
||||
}
|
||||
impl<E: EthSpec> GetCommitment<E> for KzgCommitment {
|
||||
fn get_commitment(&self) -> &KzgCommitment {
|
||||
self
|
||||
@@ -310,7 +304,7 @@ pub mod tests {
|
||||
}
|
||||
|
||||
type ProcessingViewSetup<E> = (
|
||||
KzgCommitments<E>,
|
||||
Arc<SignedBeaconBlock<E>>,
|
||||
FixedVector<Option<KzgCommitment>, <E as EthSpec>::MaxBlobsPerBlock>,
|
||||
FixedVector<Option<KzgCommitment>, <E as EthSpec>::MaxBlobsPerBlock>,
|
||||
);
|
||||
@@ -320,12 +314,6 @@ pub mod tests {
|
||||
valid_blobs: FixedVector<Option<Arc<BlobSidecar<E>>>, <E as EthSpec>::MaxBlobsPerBlock>,
|
||||
invalid_blobs: FixedVector<Option<Arc<BlobSidecar<E>>>, <E as EthSpec>::MaxBlobsPerBlock>,
|
||||
) -> ProcessingViewSetup<E> {
|
||||
let commitments = block
|
||||
.message()
|
||||
.body()
|
||||
.blob_kzg_commitments()
|
||||
.unwrap()
|
||||
.clone();
|
||||
let blobs = FixedVector::from(
|
||||
valid_blobs
|
||||
.iter()
|
||||
@@ -338,7 +326,7 @@ pub mod tests {
|
||||
.map(|blob_opt| blob_opt.as_ref().map(|blob| blob.kzg_commitment))
|
||||
.collect::<Vec<_>>(),
|
||||
);
|
||||
(commitments, blobs, invalid_blobs)
|
||||
(Arc::new(block), blobs, invalid_blobs)
|
||||
}
|
||||
|
||||
type PendingComponentsSetup<E> = (
|
||||
|
||||
@@ -363,6 +363,16 @@ impl<T: BeaconChainTypes> Critical<T> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the number of pending component entries in memory.
|
||||
pub fn num_blocks(&self) -> usize {
|
||||
self.in_memory.len()
|
||||
}
|
||||
|
||||
/// Returns the number of entries that have overflowed to disk.
|
||||
pub fn num_store_entries(&self) -> usize {
|
||||
self.store_keys.len()
|
||||
}
|
||||
}
|
||||
|
||||
/// This is the main struct for this module. Outside methods should
|
||||
@@ -671,6 +681,21 @@ impl<T: BeaconChainTypes> OverflowLRUCache<T> {
|
||||
pub fn state_lru_cache(&self) -> &StateLRUCache<T> {
|
||||
&self.state_cache
|
||||
}
|
||||
|
||||
/// Number of states stored in memory in the cache.
|
||||
pub fn state_cache_size(&self) -> usize {
|
||||
self.state_cache.lru_cache().read().len()
|
||||
}
|
||||
|
||||
/// Number of pending component entries in memory in the cache.
|
||||
pub fn block_cache_size(&self) -> usize {
|
||||
self.critical.read().num_blocks()
|
||||
}
|
||||
|
||||
/// Returns the number of entries in the cache that have overflowed to disk.
|
||||
pub fn num_store_entries(&self) -> usize {
|
||||
self.critical.read().num_store_entries()
|
||||
}
|
||||
}
|
||||
|
||||
impl ssz::Encode for OverflowKey {
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
use crate::data_availability_checker::AvailabilityView;
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::collections::HashMap;
|
||||
use types::beacon_block_body::{KzgCommitmentOpts, KzgCommitments};
|
||||
use types::{EthSpec, Hash256, Slot};
|
||||
use std::sync::Arc;
|
||||
use types::beacon_block_body::KzgCommitmentOpts;
|
||||
use types::{EthSpec, Hash256, SignedBeaconBlock, Slot};
|
||||
|
||||
/// This cache is used only for gossip blocks/blobs and single block/blob lookups, to give req/resp
|
||||
/// a view of what we have and what we require. This cache serves a slightly different purpose than
|
||||
@@ -37,6 +38,9 @@ impl<E: EthSpec> ProcessingCache<E> {
|
||||
}
|
||||
roots_missing_components
|
||||
}
|
||||
pub fn len(&self) -> usize {
|
||||
self.processing_cache.len()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -45,7 +49,7 @@ pub struct ProcessingComponents<E: EthSpec> {
|
||||
/// Blobs required for a block can only be known if we have seen the block. So `Some` here
|
||||
/// means we've seen it, a `None` means we haven't. The `kzg_commitments` value helps us figure
|
||||
/// out whether incoming blobs actually match the block.
|
||||
pub block_commitments: Option<KzgCommitments<E>>,
|
||||
pub block: Option<Arc<SignedBeaconBlock<E>>>,
|
||||
/// `KzgCommitments` for blobs are always known, even if we haven't seen the block. See
|
||||
/// `AvailabilityView`'s trait definition for more details.
|
||||
pub blob_commitments: KzgCommitmentOpts<E>,
|
||||
@@ -55,7 +59,7 @@ impl<E: EthSpec> ProcessingComponents<E> {
|
||||
pub fn new(slot: Slot) -> Self {
|
||||
Self {
|
||||
slot,
|
||||
block_commitments: None,
|
||||
block: None,
|
||||
blob_commitments: KzgCommitmentOpts::<E>::default(),
|
||||
}
|
||||
}
|
||||
@@ -67,7 +71,7 @@ impl<E: EthSpec> ProcessingComponents<E> {
|
||||
pub fn empty(_block_root: Hash256) -> Self {
|
||||
Self {
|
||||
slot: Slot::new(0),
|
||||
block_commitments: None,
|
||||
block: None,
|
||||
blob_commitments: KzgCommitmentOpts::<E>::default(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,8 +190,7 @@ impl<T: BeaconChainTypes> StateLRUCache<T> {
|
||||
})
|
||||
}
|
||||
|
||||
/// returns the state cache for inspection in tests
|
||||
#[cfg(test)]
|
||||
/// returns the state cache for inspection
|
||||
pub fn lru_cache(&self) -> &RwLock<LruCache<Hash256, BeaconState<T::EthSpec>>> {
|
||||
&self.states
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user