pibd: save latest_block_height to request less data from db when checking progress (#3756)

This commit is contained in:
ard'O'crat 2023-06-20 11:13:15 +00:00 committed by GitHub
parent fd1410ebeb
commit 45ebc8ae50
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 7 deletions

View file

@ -68,6 +68,8 @@ pub struct Desegmenter {
/// Flag indicating there are no more segments to request /// Flag indicating there are no more segments to request
all_segments_complete: bool, all_segments_complete: bool,
latest_block_height: u64,
} }
impl Desegmenter { impl Desegmenter {
@ -104,6 +106,8 @@ impl Desegmenter {
bitmap_cache: None, bitmap_cache: None,
all_segments_complete: false, all_segments_complete: false,
latest_block_height: 0,
}; };
retval.calc_bitmap_mmr_sizes(); retval.calc_bitmap_mmr_sizes();
retval retval
@ -120,6 +124,7 @@ impl Desegmenter {
self.bitmap_mmr_size = 0; self.bitmap_mmr_size = 0;
self.bitmap_cache = None; self.bitmap_cache = None;
self.bitmap_accumulator = BitmapAccumulator::new(); self.bitmap_accumulator = BitmapAccumulator::new();
self.latest_block_height = 0;
self.calc_bitmap_mmr_sizes(); self.calc_bitmap_mmr_sizes();
} }
@ -140,9 +145,7 @@ impl Desegmenter {
/// Check progress, update status if needed, returns true if all required /// Check progress, update status if needed, returns true if all required
/// segments are in place /// segments are in place
pub fn check_progress(&self, status: Arc<SyncState>) -> Result<bool, Error> { pub fn check_progress(&mut self, status: Arc<SyncState>) -> Result<bool, Error> {
let mut latest_block_height = 0;
let local_output_mmr_size; let local_output_mmr_size;
let local_kernel_mmr_size; let local_kernel_mmr_size;
let local_rangeproof_mmr_size; let local_rangeproof_mmr_size;
@ -174,13 +177,13 @@ impl Desegmenter {
header_pmmr.get_first_header_with( header_pmmr.get_first_header_with(
latest_output_size, latest_output_size,
local_kernel_mmr_size, local_kernel_mmr_size,
latest_block_height, self.latest_block_height,
self.store.clone(), self.store.clone(),
) )
}; };
if let Some(h) = res { if let Some(h) = res {
latest_block_height = h.height; self.latest_block_height = h.height;
// TODO: Unwraps // TODO: Unwraps
let tip = Tip::from_header(&h); let tip = Tip::from_header(&h);
@ -192,7 +195,7 @@ impl Desegmenter {
false, false,
false, false,
completed_leaves, completed_leaves,
latest_block_height, self.latest_block_height,
&self.archive_header, &self.archive_header,
); );
if local_kernel_mmr_size == self.archive_header.kernel_mmr_size if local_kernel_mmr_size == self.archive_header.kernel_mmr_size

View file

@ -171,7 +171,7 @@ impl StateSync {
if self.continue_pibd() { if self.continue_pibd() {
let desegmenter = self.chain.desegmenter(&archive_header).unwrap(); let desegmenter = self.chain.desegmenter(&archive_header).unwrap();
// All segments in, validate // All segments in, validate
if let Some(d) = desegmenter.read().as_ref() { if let Some(d) = desegmenter.write().as_mut() {
if let Ok(true) = d.check_progress(self.sync_state.clone()) { if let Ok(true) = d.check_progress(self.sync_state.clone()) {
if let Err(e) = d.check_update_leaf_set_state() { if let Err(e) = d.check_update_leaf_set_state() {
error!("error updating PIBD leaf set: {}", e); error!("error updating PIBD leaf set: {}", e);