@@ -17,8 +17,9 @@ use commonware_storage::{
1717 FixedConfig as AConfig , VariableConfig as VariableAnyConfig ,
1818 } ,
1919 current:: {
20- ordered:: fixed:: Db as OCurrent , unordered:: fixed:: Db as UCurrent ,
21- FixedConfig as CConfig ,
20+ ordered:: { fixed:: Db as OCurrent , variable:: Db as OVCurrent } ,
21+ unordered:: { fixed:: Db as UCurrent , variable:: Db as UVCurrent } ,
22+ FixedConfig as CConfig , VariableConfig as VariableCurrentConfig ,
2223 } ,
2324 store:: LogStore ,
2425 } ,
@@ -41,6 +42,8 @@ enum Variant {
4142 AnyOrderedVariable ,
4243 CurrentUnorderedFixed ,
4344 CurrentOrderedFixed ,
45+ CurrentUnorderedVariable ,
46+ CurrentOrderedVariable ,
4447}
4548
4649impl Variant {
@@ -52,17 +55,21 @@ impl Variant {
5255 Self :: AnyOrderedVariable => "any::ordered::variable" ,
5356 Self :: CurrentUnorderedFixed => "current::unordered::fixed" ,
5457 Self :: CurrentOrderedFixed => "current::ordered::fixed" ,
58+ Self :: CurrentUnorderedVariable => "current::unordered::variable" ,
59+ Self :: CurrentOrderedVariable => "current::ordered::variable" ,
5560 }
5661 }
5762}
5863
59- const VARIANTS : [ Variant ; 6 ] = [
64+ const VARIANTS : [ Variant ; 8 ] = [
6065 Variant :: AnyUnorderedFixed ,
6166 Variant :: AnyOrderedFixed ,
6267 Variant :: AnyUnorderedVariable ,
6368 Variant :: AnyOrderedVariable ,
6469 Variant :: CurrentUnorderedFixed ,
6570 Variant :: CurrentOrderedFixed ,
71+ Variant :: CurrentUnorderedVariable ,
72+ Variant :: CurrentOrderedVariable ,
6673] ;
6774
6875const ITEMS_PER_BLOB : NonZeroU64 = NZU64 ! ( 50_000 ) ;
@@ -96,6 +103,8 @@ type OVAnyDb = OVariable<Context, Digest, Digest, Sha256, EightCap>;
96103
97104type UCurrentDb = UCurrent < Context , Digest , Digest , Sha256 , EightCap , CHUNK_SIZE > ;
98105type OCurrentDb = OCurrent < Context , Digest , Digest , Sha256 , EightCap , CHUNK_SIZE > ;
106+ type UVCurrentDb = UVCurrent < Context , Digest , Digest , Sha256 , EightCap , CHUNK_SIZE > ;
107+ type OVCurrentDb = OVCurrent < Context , Digest , Digest , Sha256 , EightCap , CHUNK_SIZE > ;
99108
100109/// Configuration for any QMDB.
101110fn any_cfg ( pool : ThreadPool ) -> AConfig < EightCap > {
@@ -147,6 +156,25 @@ fn variable_any_cfg(pool: ThreadPool) -> VariableAnyConfig<EightCap, ()> {
147156 }
148157}
149158
159+ /// Configuration for variable current QMDB.
160+ fn variable_current_cfg ( pool : ThreadPool ) -> VariableCurrentConfig < EightCap , ( ) > {
161+ VariableCurrentConfig :: < EightCap , ( ) > {
162+ mmr_journal_partition : format ! ( "journal_{PARTITION_SUFFIX}" ) ,
163+ mmr_metadata_partition : format ! ( "metadata_{PARTITION_SUFFIX}" ) ,
164+ mmr_items_per_blob : ITEMS_PER_BLOB ,
165+ mmr_write_buffer : WRITE_BUFFER_SIZE ,
166+ log_partition : format ! ( "log_journal_{PARTITION_SUFFIX}" ) ,
167+ log_codec_config : ( ) ,
168+ log_items_per_blob : ITEMS_PER_BLOB ,
169+ log_write_buffer : WRITE_BUFFER_SIZE ,
170+ log_compression : None ,
171+ bitmap_metadata_partition : format ! ( "bitmap_metadata_{PARTITION_SUFFIX}" ) ,
172+ translator : EightCap ,
173+ thread_pool : Some ( pool) ,
174+ buffer_pool : PoolRef :: new ( PAGE_SIZE , PAGE_CACHE_SIZE ) ,
175+ }
176+ }
177+
150178/// Get an unordered fixed Any QMDB instance in clean state.
151179async fn get_any_unordered_fixed ( ctx : Context ) -> UFixedDb {
152180 let pool = ctx. clone ( ) . create_pool ( THREADS ) . unwrap ( ) ;
@@ -193,6 +221,24 @@ async fn get_current_ordered_fixed(ctx: Context) -> OCurrentDb {
193221 . unwrap ( )
194222}
195223
224+ /// Get an unordered variable current QMDB instance.
225+ async fn get_current_unordered_variable ( ctx : Context ) -> UVCurrentDb {
226+ let pool = ctx. clone ( ) . create_pool ( THREADS ) . unwrap ( ) ;
227+ let variable_current_cfg = variable_current_cfg ( pool) ;
228+ UVCurrent :: < _ , _ , _ , Sha256 , EightCap , CHUNK_SIZE > :: init ( ctx, variable_current_cfg)
229+ . await
230+ . unwrap ( )
231+ }
232+
233+ /// Get an ordered variable current QMDB instance.
234+ async fn get_current_ordered_variable ( ctx : Context ) -> OVCurrentDb {
235+ let pool = ctx. clone ( ) . create_pool ( THREADS ) . unwrap ( ) ;
236+ let variable_current_cfg = variable_current_cfg ( pool) ;
237+ OVCurrent :: < _ , _ , _ , Sha256 , EightCap , CHUNK_SIZE > :: init ( ctx, variable_current_cfg)
238+ . await
239+ . unwrap ( )
240+ }
241+
196242/// Generate a large db with random data. The function seeds the db with exactly `num_elements`
197243/// elements by inserting them in order, each with a new random value. Then, it performs
198244/// `num_operations` over these elements, each selected uniformly at random for each operation. The
0 commit comments