@@ -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