From 2ccc8f3e36f4ba4f859af5cc8eb6a5f632752574 Mon Sep 17 00:00:00 2001 From: Patrick Insinger Date: Tue, 5 Oct 2021 12:57:58 -0700 Subject: [PATCH] OrderedVec copy_prefix --- pageserver/src/layered_repository/inmemory_layer.rs | 7 +------ zenith_utils/src/ordered_vec.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/pageserver/src/layered_repository/inmemory_layer.rs b/pageserver/src/layered_repository/inmemory_layer.rs index 154954a9dc..4554f58589 100644 --- a/pageserver/src/layered_repository/inmemory_layer.rs +++ b/pageserver/src/layered_repository/inmemory_layer.rs @@ -775,12 +775,7 @@ impl InMemoryLayer { let end_lsn = self.end_lsn.unwrap(); - let mut before_segsizes = OrderedVec::default(); - for (lsn, size) in inner.segsizes.iter() { - if *lsn <= end_lsn { - before_segsizes.append(*lsn, *size); - } - } + let before_segsizes = inner.segsizes.copy_prefix(&Lsn(end_lsn.0 + 1)); let mut before_page_versions = inner.page_versions.ordered_iter(Some(end_lsn)); let mut frozen_layers: Vec> = Vec::new(); diff --git a/zenith_utils/src/ordered_vec.rs b/zenith_utils/src/ordered_vec.rs index 8d3c46afd0..dbef45bd23 100644 --- a/zenith_utils/src/ordered_vec.rs +++ b/zenith_utils/src/ordered_vec.rs @@ -91,6 +91,19 @@ impl OrderedVec { self.0.is_empty() } + pub fn copy_prefix(&self, key: &K) -> Self + where + K: Clone, + V: Clone, + { + let idx = match self.0.binary_search_by_key(key, extract_key) { + Ok(idx) => idx, + Err(idx) => idx, + }; + + OrderedVec(Vec::from(&self.0[..idx])) + } + pub fn copy_split(&self, key: &K) -> (Self, Self) where K: Clone,