mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-19 22:08:30 +00:00
Make max_blobs_per_block a config parameter (#6329)
* First pass
* Add restrictions to RuntimeVariableList api
* Use empty_uninitialized and fix warnings
* Fix some todos
* Merge branch 'unstable' into max-blobs-preset
* Fix take impl on RuntimeFixedList
* cleanup
* Fix test compilations
* Fix some more tests
* Fix test from unstable
* Merge branch 'unstable' into max-blobs-preset
* Merge remote-tracking branch 'origin/unstable' into max-blobs-preset
* Remove footgun function
* Minor simplifications
* Move from preset to config
* Fix typo
* Revert "Remove footgun function"
This reverts commit de01f923c7.
* Try fixing tests
* Thread through ChainSpec
* Fix release tests
* Move RuntimeFixedVector into module and rename
* Add test
* Remove empty RuntimeVarList awefullness
* Fix tests
* Simplify BlobSidecarListFromRoot
* Merge remote-tracking branch 'origin/unstable' into max-blobs-preset
* Bump quota to account for new target (6)
* Remove clone
* Fix issue from review
* Try to remove ugliness
* Merge branch 'unstable' into max-blobs-preset
* Fix max value
* Fix doctest
* Fix formatting
* Fix max check
* Delete hardcoded max_blobs_per_block in RPC limits
* Merge remote-tracking branch 'origin/unstable' into max-blobs-preset
This commit is contained in:
@@ -14,8 +14,8 @@ use crate::metadata::{
|
||||
};
|
||||
use crate::state_cache::{PutStateOutcome, StateCache};
|
||||
use crate::{
|
||||
get_data_column_key, get_key_for_col, DBColumn, DatabaseBlock, Error, ItemStore,
|
||||
KeyValueStoreOp, StoreItem, StoreOp,
|
||||
get_data_column_key, get_key_for_col, BlobSidecarListFromRoot, DBColumn, DatabaseBlock, Error,
|
||||
ItemStore, KeyValueStoreOp, StoreItem, StoreOp,
|
||||
};
|
||||
use crate::{metrics, parse_data_column_key};
|
||||
use itertools::{process_results, Itertools};
|
||||
@@ -1280,9 +1280,10 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
||||
StoreOp::PutBlobs(_, _) | StoreOp::PutDataColumns(_, _) => true,
|
||||
StoreOp::DeleteBlobs(block_root) => {
|
||||
match self.get_blobs(block_root) {
|
||||
Ok(Some(blob_sidecar_list)) => {
|
||||
Ok(BlobSidecarListFromRoot::Blobs(blob_sidecar_list)) => {
|
||||
blobs_to_delete.push((*block_root, blob_sidecar_list));
|
||||
}
|
||||
Ok(BlobSidecarListFromRoot::NoBlobs | BlobSidecarListFromRoot::NoRoot) => {}
|
||||
Err(e) => {
|
||||
error!(
|
||||
self.log, "Error getting blobs";
|
||||
@@ -1290,7 +1291,6 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
||||
"error" => ?e
|
||||
);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
true
|
||||
}
|
||||
@@ -2045,11 +2045,11 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
||||
}
|
||||
|
||||
/// Fetch blobs for a given block from the store.
|
||||
pub fn get_blobs(&self, block_root: &Hash256) -> Result<Option<BlobSidecarList<E>>, Error> {
|
||||
pub fn get_blobs(&self, block_root: &Hash256) -> Result<BlobSidecarListFromRoot<E>, Error> {
|
||||
// Check the cache.
|
||||
if let Some(blobs) = self.block_cache.lock().get_blobs(block_root) {
|
||||
metrics::inc_counter(&metrics::BEACON_BLOBS_CACHE_HIT_COUNT);
|
||||
return Ok(Some(blobs.clone()));
|
||||
return Ok(blobs.clone().into());
|
||||
}
|
||||
|
||||
match self
|
||||
@@ -2057,13 +2057,27 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
||||
.get_bytes(DBColumn::BeaconBlob.into(), block_root.as_slice())?
|
||||
{
|
||||
Some(ref blobs_bytes) => {
|
||||
let blobs = BlobSidecarList::from_ssz_bytes(blobs_bytes)?;
|
||||
self.block_cache
|
||||
.lock()
|
||||
.put_blobs(*block_root, blobs.clone());
|
||||
Ok(Some(blobs))
|
||||
// We insert a VariableList of BlobSidecars into the db, but retrieve
|
||||
// a plain vec since we don't know the length limit of the list without
|
||||
// knowing the slot.
|
||||
// The encoding of a VariableList is the same as a regular vec.
|
||||
let blobs: Vec<Arc<BlobSidecar<E>>> = Vec::<_>::from_ssz_bytes(blobs_bytes)?;
|
||||
if let Some(max_blobs_per_block) = blobs
|
||||
.first()
|
||||
.map(|blob| self.spec.max_blobs_per_block(blob.epoch()))
|
||||
{
|
||||
let blobs = BlobSidecarList::from_vec(blobs, max_blobs_per_block as usize);
|
||||
self.block_cache
|
||||
.lock()
|
||||
.put_blobs(*block_root, blobs.clone());
|
||||
|
||||
Ok(BlobSidecarListFromRoot::Blobs(blobs))
|
||||
} else {
|
||||
// This always implies that there were no blobs for this block_root
|
||||
Ok(BlobSidecarListFromRoot::NoBlobs)
|
||||
}
|
||||
}
|
||||
None => Ok(None),
|
||||
None => Ok(BlobSidecarListFromRoot::NoRoot),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user