Serve rpc by range and by root:

This commit is contained in:
Eitan Seri- Levi
2026-02-24 00:55:29 -08:00
parent dcc43e3d20
commit ffc2b97699
19 changed files with 1140 additions and 8 deletions

View File

@@ -408,6 +408,8 @@ pub enum Work<E: EthSpec> {
Status(BlockingFn),
BlocksByRangeRequest(AsyncFn),
BlocksByRootsRequest(AsyncFn),
PayloadEnvelopesByRangeRequest(AsyncFn),
PayloadEnvelopesByRootRequest(AsyncFn),
BlobsByRangeRequest(BlockingFn),
BlobsByRootsRequest(BlockingFn),
DataColumnsByRootsRequest(BlockingFn),
@@ -464,6 +466,8 @@ pub enum WorkType {
Status,
BlocksByRangeRequest,
BlocksByRootsRequest,
PayloadEnvelopesByRangeRequest,
PayloadEnvelopesByRootRequest,
BlobsByRangeRequest,
BlobsByRootsRequest,
DataColumnsByRootsRequest,
@@ -522,6 +526,8 @@ impl<E: EthSpec> Work<E> {
Work::Status(_) => WorkType::Status,
Work::BlocksByRangeRequest(_) => WorkType::BlocksByRangeRequest,
Work::BlocksByRootsRequest(_) => WorkType::BlocksByRootsRequest,
Work::PayloadEnvelopesByRangeRequest(_) => WorkType::PayloadEnvelopesByRangeRequest,
Work::PayloadEnvelopesByRootRequest(_) => WorkType::PayloadEnvelopesByRootRequest,
Work::BlobsByRangeRequest(_) => WorkType::BlobsByRangeRequest,
Work::BlobsByRootsRequest(_) => WorkType::BlobsByRootsRequest,
Work::DataColumnsByRootsRequest(_) => WorkType::DataColumnsByRootsRequest,
@@ -969,6 +975,12 @@ impl<E: EthSpec> BeaconProcessor<E> {
Some(item)
} else if let Some(item) = work_queues.dcbrange_queue.pop() {
Some(item)
} else if let Some(item) = work_queues.payload_envelopes_brange_queue.pop()
{
Some(item)
} else if let Some(item) = work_queues.payload_envelopes_broots_queue.pop()
{
Some(item)
// Check slashings after all other consensus messages so we prioritize
// following head.
//
@@ -1155,6 +1167,12 @@ impl<E: EthSpec> BeaconProcessor<E> {
Work::BlocksByRootsRequest { .. } => {
work_queues.block_broots_queue.push(work, work_id)
}
Work::PayloadEnvelopesByRangeRequest { .. } => work_queues
.payload_envelopes_brange_queue
.push(work, work_id),
Work::PayloadEnvelopesByRootRequest { .. } => work_queues
.payload_envelopes_broots_queue
.push(work, work_id),
Work::BlobsByRangeRequest { .. } => {
work_queues.blob_brange_queue.push(work, work_id)
}
@@ -1270,6 +1288,12 @@ impl<E: EthSpec> BeaconProcessor<E> {
WorkType::Status => work_queues.status_queue.len(),
WorkType::BlocksByRangeRequest => work_queues.block_brange_queue.len(),
WorkType::BlocksByRootsRequest => work_queues.block_broots_queue.len(),
WorkType::PayloadEnvelopesByRangeRequest => {
work_queues.payload_envelopes_brange_queue.len()
}
WorkType::PayloadEnvelopesByRootRequest => {
work_queues.payload_envelopes_broots_queue.len()
}
WorkType::BlobsByRangeRequest => work_queues.blob_brange_queue.len(),
WorkType::BlobsByRootsRequest => work_queues.blob_broots_queue.len(),
WorkType::DataColumnsByRootsRequest => work_queues.dcbroots_queue.len(),
@@ -1456,9 +1480,10 @@ impl<E: EthSpec> BeaconProcessor<E> {
| Work::DataColumnsByRangeRequest(process_fn) => {
task_spawner.spawn_blocking(process_fn)
}
Work::BlocksByRangeRequest(work) | Work::BlocksByRootsRequest(work) => {
task_spawner.spawn_async(work)
}
Work::BlocksByRangeRequest(work)
| Work::BlocksByRootsRequest(work)
| Work::PayloadEnvelopesByRangeRequest(work)
| Work::PayloadEnvelopesByRootRequest(work) => task_spawner.spawn_async(work),
Work::ChainSegmentBackfill(process_fn) => {
if self.config.enable_backfill_rate_limiting {
task_spawner.spawn_blocking_with_rayon(RayonPoolType::LowPriority, process_fn)

View File

@@ -134,6 +134,8 @@ pub struct BeaconProcessorQueueLengths {
blob_brange_queue: usize,
dcbroots_queue: usize,
dcbrange_queue: usize,
payload_envelopes_brange_queue: usize,
payload_envelopes_broots_queue: usize,
gossip_bls_to_execution_change_queue: usize,
gossip_execution_payload_queue: usize,
gossip_execution_payload_bid_queue: usize,
@@ -204,6 +206,8 @@ impl BeaconProcessorQueueLengths {
blob_brange_queue: 1024,
dcbroots_queue: 1024,
dcbrange_queue: 1024,
payload_envelopes_brange_queue: 1024,
payload_envelopes_broots_queue: 1024,
gossip_bls_to_execution_change_queue: 16384,
// TODO(EIP-7732): verify 1024 is preferable. I used same value as `gossip_block_queue` and `gossip_blob_queue`
gossip_execution_payload_queue: 1024,
@@ -253,6 +257,8 @@ pub struct WorkQueues<E: EthSpec> {
pub status_queue: FifoQueue<Work<E>>,
pub block_brange_queue: FifoQueue<Work<E>>,
pub block_broots_queue: FifoQueue<Work<E>>,
pub payload_envelopes_brange_queue: FifoQueue<Work<E>>,
pub payload_envelopes_broots_queue: FifoQueue<Work<E>>,
pub blob_broots_queue: FifoQueue<Work<E>>,
pub blob_brange_queue: FifoQueue<Work<E>>,
pub dcbroots_queue: FifoQueue<Work<E>>,
@@ -323,6 +329,10 @@ impl<E: EthSpec> WorkQueues<E> {
let blob_brange_queue = FifoQueue::new(queue_lengths.blob_brange_queue);
let dcbroots_queue = FifoQueue::new(queue_lengths.dcbroots_queue);
let dcbrange_queue = FifoQueue::new(queue_lengths.dcbrange_queue);
let payload_envelopes_brange_queue =
FifoQueue::new(queue_lengths.payload_envelopes_brange_queue);
let payload_envelopes_broots_queue =
FifoQueue::new(queue_lengths.payload_envelopes_broots_queue);
let gossip_bls_to_execution_change_queue =
FifoQueue::new(queue_lengths.gossip_bls_to_execution_change_queue);
@@ -382,6 +392,8 @@ impl<E: EthSpec> WorkQueues<E> {
blob_brange_queue,
dcbroots_queue,
dcbrange_queue,
payload_envelopes_brange_queue,
payload_envelopes_broots_queue,
gossip_bls_to_execution_change_queue,
gossip_execution_payload_queue,
gossip_execution_payload_bid_queue,