mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Send byrange responses in the correct requested range (#7611)
N/A For responding to by_range requests , we should ideally only respond with items in the range `req.start_slot()..req.start_slot() + req.count`. We were not filtering the generated response for blobs and data columns, only for blocks. This PR adds the filtering for the sidecars as well.
This commit is contained in:
@@ -945,12 +945,18 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
|
|||||||
match self.chain.get_blobs(&root) {
|
match self.chain.get_blobs(&root) {
|
||||||
Ok(blob_sidecar_list) => {
|
Ok(blob_sidecar_list) => {
|
||||||
for blob_sidecar in blob_sidecar_list.iter() {
|
for blob_sidecar in blob_sidecar_list.iter() {
|
||||||
blobs_sent += 1;
|
// Due to skip slots, blobs could be out of the range, we ensure they
|
||||||
self.send_network_message(NetworkMessage::SendResponse {
|
// are in the range before sending
|
||||||
peer_id,
|
if blob_sidecar.slot() >= request_start_slot
|
||||||
inbound_request_id,
|
&& blob_sidecar.slot() < request_start_slot + req.count
|
||||||
response: Response::BlobsByRange(Some(blob_sidecar.clone())),
|
{
|
||||||
});
|
blobs_sent += 1;
|
||||||
|
self.send_network_message(NetworkMessage::SendResponse {
|
||||||
|
peer_id,
|
||||||
|
inbound_request_id,
|
||||||
|
response: Response::BlobsByRange(Some(blob_sidecar.clone())),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@@ -1058,14 +1064,20 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
|
|||||||
for index in &req.columns {
|
for index in &req.columns {
|
||||||
match self.chain.get_data_column(&root, index) {
|
match self.chain.get_data_column(&root, index) {
|
||||||
Ok(Some(data_column_sidecar)) => {
|
Ok(Some(data_column_sidecar)) => {
|
||||||
data_columns_sent += 1;
|
// Due to skip slots, data columns could be out of the range, we ensure they
|
||||||
self.send_network_message(NetworkMessage::SendResponse {
|
// are in the range before sending
|
||||||
peer_id,
|
if data_column_sidecar.slot() >= request_start_slot
|
||||||
inbound_request_id,
|
&& data_column_sidecar.slot() < request_start_slot + req.count
|
||||||
response: Response::DataColumnsByRange(Some(
|
{
|
||||||
data_column_sidecar.clone(),
|
data_columns_sent += 1;
|
||||||
)),
|
self.send_network_message(NetworkMessage::SendResponse {
|
||||||
});
|
peer_id,
|
||||||
|
inbound_request_id,
|
||||||
|
response: Response::DataColumnsByRange(Some(
|
||||||
|
data_column_sidecar.clone(),
|
||||||
|
)),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(None) => {} // no-op
|
Ok(None) => {} // no-op
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user