From 67556064fa1cd1ada97c78f4b591ff7d6ab1d8b2 Mon Sep 17 00:00:00 2001 From: Kermit Date: Fri, 12 Apr 2024 22:51:59 +0800 Subject: [PATCH 1/2] remove box of iters --- src/iterators/merge.rs | 10 ++++------ src/iterators/merge/heap.rs | 2 +- src/memtable/iterator.rs | 4 ++-- src/memtable/mutable.rs | 5 ++--- src/sst/sstables.rs | 14 +++++--------- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/iterators/merge.rs b/src/iterators/merge.rs index fe75ce7..36f7109 100644 --- a/src/iterators/merge.rs +++ b/src/iterators/merge.rs @@ -18,7 +18,7 @@ mod heap; /// iterators, prefer the one with smaller index. pub type MergeIterator = NoDuplication>; -pub async fn create_merge_iter(iters: impl Stream>) -> MergeIterator +pub async fn create_merge_iter(iters: impl Stream) -> MergeIterator where Item: Ord + Debug, I: Stream> + Unpin, @@ -27,7 +27,7 @@ where } pub async fn create_merge_iter_from_non_empty_iters( - iters: impl Stream>>, + iters: impl Stream>, ) -> MergeIterator where Item: Ord + Debug, @@ -49,7 +49,7 @@ where I: Stream> + Unpin, Item: Ord + Debug, { - pub async fn create(iters: impl Stream>) -> Self { + pub async fn create(iters: impl Stream) -> Self { let iters = iters .map(NonEmptyStream::try_new) .flat_map(FutureExt::into_stream) @@ -57,9 +57,7 @@ where Self::from_non_empty_iters(iters).await } - pub async fn from_non_empty_iters( - iters: impl Stream>>, - ) -> Self { + pub async fn from_non_empty_iters(iters: impl Stream>) -> Self { let iters: BinaryHeap<_> = iters .enumerate() .map(|(index, iter)| HeapWrapper { index, iter }) diff --git a/src/iterators/merge/heap.rs b/src/iterators/merge/heap.rs index 54240d9..492ce9d 100644 --- a/src/iterators/merge/heap.rs +++ b/src/iterators/merge/heap.rs @@ -3,7 +3,7 @@ use std::cmp; pub(super) struct HeapWrapper { pub index: usize, - pub iter: NonEmptyStream>, + pub iter: NonEmptyStream, } impl HeapWrapper diff --git a/src/memtable/iterator.rs b/src/memtable/iterator.rs index d9eca7a..2f499f0 100644 --- a/src/memtable/iterator.rs +++ b/src/memtable/iterator.rs @@ -29,8 +29,8 @@ type SkipMapRangeIter<'a> = map::Range<'a, [u8], BytesBound<'a>, Bytes, Bytes>; type SkipMapRangeEntry<'a> = map::Entry<'a, Bytes, Bytes>; -pub type NonEmptyMemTableIterRef<'a> = NonEmptyStream>>; -pub type MaybeEmptyMemTableIterRef<'a> = MaybeEmptyStream>>; +pub type NonEmptyMemTableIterRef<'a> = NonEmptyStream>; +pub type MaybeEmptyMemTableIterRef<'a> = MaybeEmptyStream>; #[cfg(test)] mod test { diff --git a/src/memtable/mutable.rs b/src/memtable/mutable.rs index 7c50605..0a606fa 100644 --- a/src/memtable/mutable.rs +++ b/src/memtable/mutable.rs @@ -112,13 +112,12 @@ impl MemTable { upper: Bound<&'a [u8]>, ) -> Result> { let iter = foo(&self.map, lower, upper); - // let range = (lower, upper); - // let iter = self.map.range(range); let iter = new_memtable_iter(iter); - NonEmptyStream::try_new(Box::new(iter)).await + NonEmptyStream::try_new(iter).await } } +// todo: remove it fn foo<'a, 'b>( m: &'a SkipMap, lower: Bound<&'b [u8]>, diff --git a/src/sst/sstables.rs b/src/sst/sstables.rs index b74d37e..3c433f6 100644 --- a/src/sst/sstables.rs +++ b/src/sst/sstables.rs @@ -98,7 +98,7 @@ where None } else { let iter = SsTableIterator::scan(table, lower, upper); - NonEmptyStream::try_new(Box::new(iter)).await.ok().flatten() + NonEmptyStream::try_new(iter).await.ok().flatten() } } }); @@ -106,14 +106,10 @@ where }; let levels = { - let iters = self - .levels - .iter() - .filter_map(move |(_, ids)| { - let tables = ids.iter().map(|id| self.sstables.get(id).unwrap()); - scan_sst_concat(tables, lower, upper).ok() - }) - .map(Box::new); + let iters = self.levels.iter().filter_map(move |(_, ids)| { + let tables = ids.iter().map(|id| self.sstables.get(id).unwrap()); + scan_sst_concat(tables, lower, upper).ok() + }); let iters = stream::iter(iters); create_merge_iter(iters).await }; From 7beeda4c68291aea13d47d02049b106e67d32cda Mon Sep 17 00:00:00 2001 From: Kermit Date: Fri, 12 Apr 2024 22:55:23 +0800 Subject: [PATCH 2/2] fix --- src/memtable/mutable.rs | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/memtable/mutable.rs b/src/memtable/mutable.rs index 0a606fa..2169054 100644 --- a/src/memtable/mutable.rs +++ b/src/memtable/mutable.rs @@ -111,25 +111,15 @@ impl MemTable { lower: Bound<&'a [u8]>, upper: Bound<&'a [u8]>, ) -> Result> { - let iter = foo(&self.map, lower, upper); + let iter = self.map.range(BytesBound { + start: lower, + end: upper, + }); let iter = new_memtable_iter(iter); NonEmptyStream::try_new(iter).await } } -// todo: remove it -fn foo<'a, 'b>( - m: &'a SkipMap, - lower: Bound<&'b [u8]>, - upper: Bound<&'b [u8]>, -) -> Range<'a, [u8], BytesBound<'b>, Bytes, Bytes> { - let iter = m.range(BytesBound { - start: lower, - end: upper, - }); - iter -} - #[cfg(test)] impl MemTable { pub fn for_testing_put_slice(&self, key: &[u8], value: &[u8]) -> Result<()> {