Skip to content

Commit 47317f9

Browse files
committed
pibd: fix check for next required kernel segment
1 parent 2ec7b4d commit 47317f9

1 file changed

Lines changed: 29 additions & 7 deletions

File tree

chain/src/txhashset/desegmenter.rs

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ impl Desegmenter {
479479
let mut return_vec = vec![];
480480
// First check for required bitmap elements
481481
if self.bitmap_cache.is_none() {
482+
debug!("no bitmap cache available");
482483
// Get current size of bitmap MMR
483484
let local_pmmr_size = self.bitmap_accumulator.readonly_pmmr().unpruned_size();
484485
// Get iterator over expected bitmap elements
@@ -498,6 +499,7 @@ impl Desegmenter {
498499
}
499500
}
500501
} else {
502+
debug!("bitmap cache available");
501503
// We have all required bitmap segments and have recreated our local
502504
// bitmap, now continue with other segments, evenly spreading requests
503505
// among MMRs
@@ -530,6 +532,10 @@ impl Desegmenter {
530532
let (_first, last) =
531533
output_id.segment_pos_range(self.archive_header.output_mmr_size);
532534
if last > local_output_mmr_size && !self.has_output_segment_with_id(output_id) {
535+
debug!(
536+
"push 1: {:?}, last: {} local size: {}",
537+
output_id, last, local_output_mmr_size
538+
);
533539
return_vec.push(SegmentTypeIdentifier::new(SegmentType::Output, output_id));
534540
elems_added += 1;
535541
}
@@ -559,6 +565,10 @@ impl Desegmenter {
559565
if last > local_rangeproof_mmr_size
560566
&& !self.has_rangeproof_segment_with_id(rp_id)
561567
{
568+
debug!(
569+
"push 2: {:?}. last: {} local size: {}",
570+
rp_id, last, local_output_mmr_size
571+
);
562572
return_vec.push(SegmentTypeIdentifier::new(SegmentType::RangeProof, rp_id));
563573
elems_added += 1;
564574
}
@@ -586,6 +596,10 @@ impl Desegmenter {
586596
let (_first, last) =
587597
k_id.segment_pos_range(self.archive_header.kernel_mmr_size);
588598
if last > local_kernel_mmr_size && !self.has_kernel_segment_with_id(k_id) {
599+
debug!(
600+
"push 3: {:?}, last: {} local size: {}",
601+
k_id, last, local_output_mmr_size
602+
);
589603
return_vec.push(SegmentTypeIdentifier::new(SegmentType::Kernel, k_id));
590604
elems_added += 1;
591605
}
@@ -608,6 +622,7 @@ impl Desegmenter {
608622
if return_vec.len() >= max_elements {
609623
return_vec.pop();
610624
}
625+
debug!("push 4: {:?}", seg_id);
611626
return_vec.push(next_kernel_seg_id);
612627
}
613628
}
@@ -1069,17 +1084,24 @@ impl Desegmenter {
10691084
)
10701085
};
10711086

1072-
// When resuming, we need to ensure we're getting the previous segment if needed
1073-
let theoretical_pmmr_size =
1074-
SegmentIdentifier::pmmr_size(cur_segment_count, self.default_kernel_segment_height);
1075-
if local_kernel_mmr_size < theoretical_pmmr_size {
1076-
cur_segment_count -= 1;
1077-
}
1078-
10791087
let total_segment_count = SegmentIdentifier::count_segments_required(
10801088
self.archive_header.kernel_mmr_size,
10811089
self.default_kernel_segment_height,
10821090
);
1091+
1092+
// When resuming, we need to ensure we're getting the previous segment if needed
1093+
if total_segment_count != cur_segment_count {
1094+
let theoretical_pmmr_size =
1095+
SegmentIdentifier::pmmr_size(cur_segment_count, self.default_kernel_segment_height);
1096+
if local_kernel_mmr_size < theoretical_pmmr_size {
1097+
debug!(
1098+
"theoretical_pmmr_size {} is bigger than the current mmr size {}",
1099+
theoretical_pmmr_size, local_kernel_mmr_size
1100+
);
1101+
cur_segment_count -= 1;
1102+
}
1103+
}
1104+
10831105
trace!(
10841106
"Next required kernel segment is {} of {}",
10851107
cur_segment_count,

0 commit comments

Comments
 (0)