33// (found in the LICENSE-* files in the repository)
44
55use crate :: key:: InternalKey ;
6+ use crate :: tree:: inner:: MemtableId ;
67use crate :: {
78 value:: { InternalValue , SeqNo , UserValue } ,
89 ValueType ,
@@ -14,8 +15,10 @@ use std::sync::atomic::AtomicU64;
1415/// The memtable serves as an intermediary, ephemeral, sorted storage for new items
1516///
1617/// When the Memtable exceeds some size, it should be flushed to a table.
17- #[ derive( Default ) ]
1818pub struct Memtable {
19+ #[ doc( hidden) ]
20+ pub id : MemtableId ,
21+
1922 /// The actual content, stored in a lock-free skiplist.
2023 #[ doc( hidden) ]
2124 pub items : SkipMap < InternalKey , UserValue > ,
@@ -32,6 +35,17 @@ pub struct Memtable {
3235}
3336
3437impl Memtable {
38+ #[ doc( hidden) ]
39+ #[ must_use]
40+ pub fn new ( id : MemtableId ) -> Self {
41+ Self {
42+ id,
43+ items : SkipMap :: default ( ) ,
44+ approximate_size : AtomicU64 :: default ( ) ,
45+ highest_seqno : AtomicU64 :: default ( ) ,
46+ }
47+ }
48+
3549 /// Clears the memtable.
3650 pub fn clear ( & mut self ) {
3751 self . items . clear ( ) ;
@@ -161,7 +175,7 @@ mod tests {
161175 #[ test]
162176 #[ expect( clippy:: unwrap_used) ]
163177 fn memtable_mvcc_point_read ( ) {
164- let memtable = Memtable :: default ( ) ;
178+ let memtable = Memtable :: new ( 0 ) ;
165179
166180 memtable. insert ( InternalValue :: from_components (
167181 * b"hello-key-999991" ,
@@ -204,7 +218,7 @@ mod tests {
204218
205219 #[ test]
206220 fn memtable_get ( ) {
207- let memtable = Memtable :: default ( ) ;
221+ let memtable = Memtable :: new ( 0 ) ;
208222
209223 let value =
210224 InternalValue :: from_components ( b"abc" . to_vec ( ) , b"abc" . to_vec ( ) , 0 , ValueType :: Value ) ;
@@ -216,7 +230,7 @@ mod tests {
216230
217231 #[ test]
218232 fn memtable_get_highest_seqno ( ) {
219- let memtable = Memtable :: default ( ) ;
233+ let memtable = Memtable :: new ( 0 ) ;
220234
221235 memtable. insert ( InternalValue :: from_components (
222236 b"abc" . to_vec ( ) ,
@@ -262,7 +276,7 @@ mod tests {
262276
263277 #[ test]
264278 fn memtable_get_prefix ( ) {
265- let memtable = Memtable :: default ( ) ;
279+ let memtable = Memtable :: new ( 0 ) ;
266280
267281 memtable. insert ( InternalValue :: from_components (
268282 b"abc0" . to_vec ( ) ,
@@ -300,7 +314,7 @@ mod tests {
300314
301315 #[ test]
302316 fn memtable_get_old_version ( ) {
303- let memtable = Memtable :: default ( ) ;
317+ let memtable = Memtable :: new ( 0 ) ;
304318
305319 memtable. insert ( InternalValue :: from_components (
306320 b"abc" . to_vec ( ) ,
0 commit comments