backfill batches need to be of just one epoch

This commit is contained in:
Diva M 2022-12-23 10:32:26 -05:00
parent 5db0a88d4f
commit 901764b8f0
No known key found for this signature in database
GPG Key ID: 1BAE5E01126680FE
2 changed files with 9 additions and 13 deletions

View File

@ -33,7 +33,7 @@ use types::{Epoch, EthSpec};
/// we will negatively report peers with poor bandwidth. This can be set arbitrarily high, in which /// we will negatively report peers with poor bandwidth. This can be set arbitrarily high, in which
/// case the responder will fill the response up to the max request size, assuming they have the /// case the responder will fill the response up to the max request size, assuming they have the
/// bandwidth to do so. /// bandwidth to do so.
pub const BACKFILL_EPOCHS_PER_BATCH: u64 = 2; pub const BACKFILL_EPOCHS_PER_BATCH: u64 = 1;
/// The maximum number of batches to queue before requesting more. /// The maximum number of batches to queue before requesting more.
const BACKFILL_BATCH_BUFFER_SIZE: u8 = 20; const BACKFILL_BATCH_BUFFER_SIZE: u8 = 20;

View File

@ -531,25 +531,21 @@ impl<T: BeaconChainTypes> SyncNetworkContext<T> {
id id
} }
/// Check whether a batch for this epoch (and only this epoch) should request just blocks or
/// blocks and blobs.
pub fn batch_type(&self, epoch: types::Epoch) -> ExpectedBatchTy { pub fn batch_type(&self, epoch: types::Epoch) -> ExpectedBatchTy {
// Keep tests only for blocks. const _: () = assert!(
super::backfill_sync::BACKFILL_EPOCHS_PER_BATCH == 1
&& super::range_sync::EPOCHS_PER_BATCH == 1,
"To deal with alignment with 4844 boundaries, batches need to be of just one epoch"
);
#[cfg(test)] #[cfg(test)]
{ {
// Keep tests only for blocks.
return ExpectedBatchTy::OnlyBlock; return ExpectedBatchTy::OnlyBlock;
} }
#[cfg(not(test))] #[cfg(not(test))]
{ {
use super::range_sync::EPOCHS_PER_BATCH;
assert_eq!(
EPOCHS_PER_BATCH, 1,
"If this is not one, everything will fail horribly"
);
// Here we need access to the beacon chain, check the fork boundary, the current epoch, the
// blob period to serve and check with that if the batch is a blob batch or not.
// NOTE: This would carelessly assume batch sizes are always 1 epoch, to avoid needing to
// align with the batch boundary.
if let Some(data_availability_boundary) = self.chain.data_availability_boundary() { if let Some(data_availability_boundary) = self.chain.data_availability_boundary() {
if epoch >= data_availability_boundary { if epoch >= data_availability_boundary {
ExpectedBatchTy::OnlyBlockBlobs ExpectedBatchTy::OnlyBlockBlobs