mirror of
https://github.com/sigp/lighthouse.git
synced 2026-06-29 10:54:24 +00:00
Send IDONTWANT on publish to avoid downloading data we already have (#6513)
* Send `IDONTWANT` on publish to avoid downloading data we already have. * Merge branch 'unstable' into send-idontwant-on-publish * Move broadcast of `IDONTWANT` to after publishing.
This commit is contained in:
@@ -776,6 +776,11 @@ where
|
|||||||
return Err(PublishError::AllQueuesFull(recipient_peers.len()));
|
return Err(PublishError::AllQueuesFull(recipient_peers.len()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Broadcast IDONTWANT messages
|
||||||
|
if raw_message.raw_protobuf_len() > self.config.idontwant_message_size_threshold() {
|
||||||
|
self.send_idontwant(&raw_message, &msg_id, raw_message.source.as_ref());
|
||||||
|
}
|
||||||
|
|
||||||
tracing::debug!(message=%msg_id, "Published message");
|
tracing::debug!(message=%msg_id, "Published message");
|
||||||
|
|
||||||
if let Some(metrics) = self.metrics.as_mut() {
|
if let Some(metrics) = self.metrics.as_mut() {
|
||||||
@@ -1830,7 +1835,7 @@ where
|
|||||||
|
|
||||||
// Broadcast IDONTWANT messages
|
// Broadcast IDONTWANT messages
|
||||||
if raw_message.raw_protobuf_len() > self.config.idontwant_message_size_threshold() {
|
if raw_message.raw_protobuf_len() > self.config.idontwant_message_size_threshold() {
|
||||||
self.send_idontwant(&raw_message, &msg_id, propagation_source);
|
self.send_idontwant(&raw_message, &msg_id, Some(propagation_source));
|
||||||
}
|
}
|
||||||
|
|
||||||
tracing::debug!(
|
tracing::debug!(
|
||||||
@@ -2702,7 +2707,7 @@ where
|
|||||||
&mut self,
|
&mut self,
|
||||||
message: &RawMessage,
|
message: &RawMessage,
|
||||||
msg_id: &MessageId,
|
msg_id: &MessageId,
|
||||||
propagation_source: &PeerId,
|
propagation_source: Option<&PeerId>,
|
||||||
) {
|
) {
|
||||||
let Some(mesh_peers) = self.mesh.get(&message.topic) else {
|
let Some(mesh_peers) = self.mesh.get(&message.topic) else {
|
||||||
return;
|
return;
|
||||||
@@ -2713,8 +2718,8 @@ where
|
|||||||
let recipient_peers = mesh_peers
|
let recipient_peers = mesh_peers
|
||||||
.iter()
|
.iter()
|
||||||
.chain(iwant_peers.iter())
|
.chain(iwant_peers.iter())
|
||||||
.filter(|peer_id| {
|
.filter(|&peer_id| {
|
||||||
*peer_id != propagation_source && Some(*peer_id) != message.source.as_ref()
|
Some(peer_id) != propagation_source && Some(peer_id) != message.source.as_ref()
|
||||||
});
|
});
|
||||||
|
|
||||||
for peer_id in recipient_peers {
|
for peer_id in recipient_peers {
|
||||||
|
|||||||
Reference in New Issue
Block a user