From 6972d08fe0523787c96d98a84f878c14b1076a81 Mon Sep 17 00:00:00 2001 From: GanZiheng Date: Wed, 15 Jun 2022 18:13:48 +0800 Subject: [PATCH] memtable: update memtable view (#154) * update memtable view Signed-off-by: GanZiheng --- src/memtable.rs | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/src/memtable.rs b/src/memtable.rs index 21f60fa9..1c44114b 100644 --- a/src/memtable.rs +++ b/src/memtable.rs @@ -1,7 +1,5 @@ use std::{ collections::VecDeque, - mem::{self, ManuallyDrop, MaybeUninit}, - ptr, sync::{atomic::AtomicBool, Arc, RwLock}, }; @@ -17,8 +15,6 @@ use crate::{ AgateOptions, Result, }; -const MEMTABLE_VIEW_MAX: usize = 20; - /// MemTableInner guards WAL and max_version. /// These data will only be modified on memtable put. /// Therefore, separating wal and max_version enables @@ -153,23 +149,12 @@ impl Drop for MemTable { } pub struct MemTablesView { - tables: ManuallyDrop<[Skiplist; MEMTABLE_VIEW_MAX]>, - len: usize, + tables: Vec>, } impl MemTablesView { pub fn tables(&self) -> &[Skiplist] { - &self.tables[0..self.len] - } -} - -impl Drop for MemTablesView { - fn drop(&mut self) { - for i in 0..self.len { - unsafe { - ptr::drop_in_place(&mut self.tables[i]); - } - } + &self.tables[..] } } @@ -186,17 +171,16 @@ impl MemTables { /// Get view of all current memtables pub fn view(&self) -> MemTablesView { // Maybe flush is better. - assert!(self.immutable.len() < MEMTABLE_VIEW_MAX); - let mut array: [MaybeUninit>; MEMTABLE_VIEW_MAX] = - unsafe { MaybeUninit::uninit().assume_init() }; - array[0] = MaybeUninit::new(self.mutable.skl.clone()); - for (i, s) in self.immutable.iter().enumerate() { - array[i + 1] = MaybeUninit::new(s.skl.clone()); - } - MemTablesView { - tables: unsafe { ManuallyDrop::new(mem::transmute(array)) }, - len: self.immutable.len() + 1, + let len = self.immutable.len() + 1; + + let mut tables: Vec> = Vec::with_capacity(len); + + tables.push(self.mutable.skl.clone()); + for s in self.immutable.iter() { + tables.push(s.skl.clone()); } + + MemTablesView { tables } } /// Get mutable memtable