-
Notifications
You must be signed in to change notification settings - Fork 746
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add individual by_range sync requests #6497
base: unstable
Are you sure you want to change the base?
Conversation
// practice | ||
// | ||
// rig.expect_chain_segment(); | ||
// rig.expect_chain_segment(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I want to migrate the range sync tests to the event-driven format but would prefer to do so in a separate PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks really good overall!
@@ -43,12 +47,50 @@ pub struct DataColumnsByRootRequestId { | |||
pub requester: DataColumnsByRootRequester, | |||
} | |||
|
|||
#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)] | |||
pub struct BlocksByRangeRequestId { | |||
pub id: Id, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i'm understanding this is the sub-request id and requester.id
is the meta-request id, can we rename one of them? it's sort of confusing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What name(s) do you have in mind? I can add docs otherwise
{ | ||
return Err(LookupVerifyError::UnrequestedSlot(item.slot())); | ||
} | ||
// TODO: Should check if index is within bounds |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As in the blob index? might as well throw that check in now right
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed in 5fa2912
@@ -211,21 +208,9 @@ pub struct SyncNetworkContext<T: BeaconChainTypes> { | |||
|
|||
/// Small enumeration to make dealing with block and blob requests easier. | |||
pub enum BlockOrBlob<E: EthSpec> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Might be time to rename this.. maybe RangeBlockComponent
because it should be the wrapper for the return type of RangeBlockComponentRequest
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed in 5fa2912
"epoch" => epoch, | ||
"peer" => %peer_id, | ||
); | ||
let _blocks_req_id = self.send_blocks_by_range_request(peer_id, request.clone(), id)?; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The _blocks_req_id
here is unused and blobs_req_id
is only used to check if a blobs request was made. I don't see these send_
methods used anywhere else so I think we can return Result<(), ..>
rather than Result<BlocksByRangeRequestId, ..>
for blocks. Maybe a bool for blobs. Looks like for custody columns, we care about the count requested but not particular ids
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In a future PR RangeBlockComponentsRequest
will track individual requests by ID. Left this variable named but unused as a hint that it should be used.
None | ||
} | ||
} | ||
|
||
/// Received a blocks by range or blobs by range response for a request that couples blocks ' | ||
/// and blobs. | ||
pub fn range_block_and_blob_response( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
another rename suggestion range_block_component_response
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed in 5fa2912
if let Err(e) = { | ||
let request = entry.get_mut(); | ||
match block_or_blob { | ||
BlockOrBlob::Block(resp) => match resp { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can do this here and for blobs and columns as well
resp.map(|(blocks, _)| {
request.add_blocks(blocks);
})
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed in 5fa2912
df1a6c7
to
5fa2912
Compare
Issue Addressed
Part of
To address PeerDAS sync issues we need to make individual by_range requests within a batch retriable. We should adopt the same pattern for lookup sync where each request (block/blobs/columns) is tracked individually within a "meta" request that group them all and handles retry logic.
Proposed Changes
second step is to add individual request accumulators for
blocks_by_range
,blobs_by_range
, anddata_columns_by_range
. This will allow each request to progress independently and be retried separately.Most of the logic is just piping, excuse the large diff. This PR does not change the logic of how requests are handled or retried. This will be done in a future PR changing the logic of
RangeBlockComponentsRequest
.Before
SyncRequestId::RangeBlockAndBlobs
SyncNetworkContext::range_block_components_requests
Vec<RpcBlock>
, and insert intorange_sync
Now
SyncRequestId::RangeBlockAndBlobs
SyncNetworkContext:: blocks_by_range_requests
Vec<SignedBlock>
, and insert intoSyncNetworkContext::components_by_range_requests
Vec<RpcBlock>
, and insert intorange_sync