Merge branch 'pibd_peers_fix' into grim

# Conflicts:
#	servers/src/grin/seed.rs
This commit is contained in:
ardocrat
2026-05-01 12:36:43 +03:00
2 changed files with 22 additions and 27 deletions
+17 -25
View File
@@ -520,9 +520,6 @@ impl Desegmenter {
let mut elems_added = 0;
if let Some(mut next_output_idx) = self.next_required_output_segment_index() {
while (next_output_idx as usize) < total_output_segments {
if self.output_segment_cache.len() >= self.max_cached_segments {
break;
}
if elems_added == max_elements / 3 {
break;
}
@@ -547,9 +544,6 @@ impl Desegmenter {
elems_added = 0;
if let Some(mut next_rp_idx) = self.next_required_rangeproof_segment_index() {
while (next_rp_idx as usize) < total_rangeproof_segments {
if self.rangeproof_segment_cache.len() >= self.max_cached_segments {
break;
}
if elems_added == max_elements / 3 {
break;
}
@@ -573,9 +567,6 @@ impl Desegmenter {
elems_added = 0;
if let Some(mut next_kernel_idx) = self.next_required_kernel_segment_index() {
while (next_kernel_idx as usize) < total_kernel_segments {
if self.kernel_segment_cache.len() >= self.max_cached_segments {
break;
}
if elems_added == max_elements / 3 {
break;
}
@@ -592,6 +583,16 @@ impl Desegmenter {
}
}
// Explicitly add segment identifier to request if not exists.
let mut maybe_add_to_request = |seg_id: SegmentTypeIdentifier| {
if return_vec.iter().any(|i| i == &seg_id) {
if return_vec.len() >= max_elements {
return_vec.pop();
}
return_vec.push(seg_id);
}
};
// Ensure we explicitly ask for the next output segment.
if let Some(next_output_idx) = self.next_required_output_segment_index() {
let seg_id = SegmentIdentifier {
@@ -599,10 +600,8 @@ impl Desegmenter {
idx: next_output_idx,
};
if !self.has_output_segment_with_id(seg_id) {
if return_vec.len() >= max_elements {
return_vec.pop();
}
return_vec.push(SegmentTypeIdentifier::new(SegmentType::Output, seg_id));
let next_output_seg_id = SegmentTypeIdentifier::new(SegmentType::Output, seg_id);
maybe_add_to_request(next_output_seg_id);
}
}
@@ -613,10 +612,8 @@ impl Desegmenter {
idx: next_rp_idx,
};
if !self.has_rangeproof_segment_with_id(seg_id) {
if return_vec.len() >= max_elements {
return_vec.pop();
}
return_vec.push(SegmentTypeIdentifier::new(SegmentType::RangeProof, seg_id));
let next_proof_seg_id = SegmentTypeIdentifier::new(SegmentType::RangeProof, seg_id);
maybe_add_to_request(next_proof_seg_id);
}
}
@@ -628,14 +625,9 @@ impl Desegmenter {
height: self.default_kernel_segment_height,
idx: next_kernel_idx,
};
let next_kernel_seg_id = SegmentTypeIdentifier::new(SegmentType::Kernel, seg_id);
if !self.has_kernel_segment_with_id(seg_id)
&& !return_vec.iter().any(|x| x == &next_kernel_seg_id)
{
if return_vec.len() >= max_elements {
return_vec.pop();
}
return_vec.push(next_kernel_seg_id);
if !self.has_kernel_segment_with_id(seg_id) {
let next_kernel_seg_id = SegmentTypeIdentifier::new(SegmentType::Kernel, seg_id);
maybe_add_to_request(next_kernel_seg_id);
}
}
if return_vec.is_empty() && self.bitmap_cache.is_some() {
+5 -2
View File
@@ -240,7 +240,8 @@ fn monitor_peers(peers: Arc<p2p::Peers>, config: p2p::P2PConfig, tx: mpsc::Sende
.iter()
.filter(|p| {
peers.get_connected_peer(p.addr).is_none()
&& (enough_outbound && Utc::now().timestamp() - p.last_attempt >= max_attempt_delay)
&& (!enough_outbound
|| Utc::now().timestamp() - p.last_attempt >= max_attempt_delay)
})
.choose_multiple(&mut thread_rng(), max_peer_attempts / 2)
{
@@ -269,7 +270,9 @@ fn monitor_peers(peers: Arc<p2p::Peers>, config: p2p::P2PConfig, tx: mpsc::Sende
// check min 32 (max 128, if there are no healthy and unknown) random defunct peers no more often than 1 hour per peer.
for dp in defuncts
.iter()
.filter(|p| enough_outbound && Utc::now().timestamp() - p.last_attempt >= max_attempt_delay)
.filter(|p| {
!enough_outbound || Utc::now().timestamp() - p.last_attempt >= max_attempt_delay
})
.choose_multiple(&mut thread_rng(), max_peer_attempts - new_peers.len())
{
new_peers.push(&dp.addr);