From 205d80036d7d3424e1e7a4c711752e7a8214c454 Mon Sep 17 00:00:00 2001 From: GFX9 Date: Fri, 26 Apr 2024 16:23:42 +0800 Subject: [PATCH] refactor: add more ino in unreachable && fix redundant codes Signed-off-by: GFX9 --- crates/curp/src/server/raw_curp/log.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/crates/curp/src/server/raw_curp/log.rs b/crates/curp/src/server/raw_curp/log.rs index b8c0750b8..164b42aeb 100644 --- a/crates/curp/src/server/raw_curp/log.rs +++ b/crates/curp/src/server/raw_curp/log.rs @@ -129,10 +129,16 @@ impl LogEntryVecDeque { self.batch_index.push_back(0); // placeholder self.last_batch_size += entry_size; - while self.last_batch_size > self.batch_limit { + while self.last_batch_size >= self.batch_limit { if let Some(cur_batch_index) = self.batch_index.get_mut(self.first_entry_at_last_batch) { *cur_batch_index = self.entries.len() - 1 - self.first_entry_at_last_batch; + + if self.last_batch_size == self.batch_limit { + // self.last_batch_size == self.batch_limit means the last index must be included in `get_range` + *cur_batch_index += 1; + } + if let Some(cur_entry_size) = self.entry_size.get(self.first_entry_at_last_batch) { self.last_batch_size -= *cur_entry_size; } @@ -160,11 +166,11 @@ impl LogEntryVecDeque { let _ = self .batch_index .pop_front() - .unwrap_or_else(|| unreachable!()); + .unwrap_or_else(|| unreachable!("The batch_index cannot be empty")); let _ = self .entry_size .pop_front() - .unwrap_or_else(|| unreachable!()); + .unwrap_or_else(|| unreachable!("The pop_front cannot be empty")); self.entries.pop_front() } else { None @@ -198,9 +204,7 @@ impl LogEntryVecDeque { #[allow(clippy::range_plus_one)] fn get_range_by_batch(&self, left: usize) -> Range { #![allow(clippy::indexing_slicing)] - if left >= self.batch_index.len() { - left..self.entries.len() - } else if self.entry_size[left] > self.batch_limit { + if self.entry_size[left] > self.batch_limit { left..left + 1 } else if self.batch_index[left] == 0 { left..self.entries.len() @@ -218,10 +222,7 @@ impl LogEntryVecDeque { /// check whether the log entry range [li,..) exceeds the batch limit or not fn has_next_batch(&self, left: usize) -> bool { if let Some(&offset) = self.batch_index.get(left) { - offset != 0 - || (self.first_entry_at_last_batch == left - && self.batch_limit == self.last_batch_size) - || left == self.batch_index.len() - 1 + offset != 0 || self.first_entry_at_last_batch > left } else { false } @@ -235,6 +236,7 @@ impl LogEntryVecDeque { self.last_batch_size = 0; self.first_entry_at_last_batch = 0; self.batch_index.clear(); + self.entry_size.clear(); let prev_entries = self.entries.clone(); self.entries.clear();