From 9c6b95e1e1c90c7c63bf503dbb36faa29b47acf5 Mon Sep 17 00:00:00 2001 From: Jeff Biseda Date: Fri, 3 Dec 2021 22:36:46 -0800 Subject: [PATCH] fix distance calculation in get_closest_completion (#21601) --- core/src/repair_generic_traversal.rs | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/core/src/repair_generic_traversal.rs b/core/src/repair_generic_traversal.rs index 8509e23c0..8f35f6749 100644 --- a/core/src/repair_generic_traversal.rs +++ b/core/src/repair_generic_traversal.rs @@ -127,9 +127,36 @@ pub fn get_closest_completion( let shred_index = blockstore.get_index(slot).unwrap(); let dist = if let Some(shred_index) = shred_index { let shred_count = shred_index.data().num_shreds() as u64; - last_index - shred_count + if last_index.saturating_add(1) < shred_count { + datapoint_error!( + "repair_generic_traversal_error", + ( + "error", + format!( + "last_index + 1 < shred_count. last_index={} shred_count={}", + last_index, shred_count, + ), + String + ), + ); + } + last_index.saturating_add(1).saturating_sub(shred_count) } else { - last_index - slot_meta.consumed + if last_index < slot_meta.consumed { + datapoint_error!( + "repair_generic_traversal_error", + ( + "error", + format!( + "last_index < slot_meta.consumed. last_index={} slot_meta.consumed={}", + last_index, + slot_meta.consumed, + ), + String + ), + ); + } + last_index.saturating_sub(slot_meta.consumed) }; v.push((slot, dist)); processed_slots.insert(slot);