From 86c695268ecf9e4dc2f0bf43a35f871fa72bab0f Mon Sep 17 00:00:00 2001 From: Yueh-Hsuan Chiang <93241502+yhchiang-sol@users.noreply.github.com> Date: Wed, 16 Mar 2022 11:47:49 -0700 Subject: [PATCH] (LedgerStore) Improve the function API of new_cf_descriptor (#23696) As we start adding more options into BlockstoreOptions, it's better to allow new_cf_descriptor to take the reference to BlockstoreOptions so that we can avoid future function API changes on new_cf_descriptor. --- ledger/src/blockstore_db.rs | 77 +++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index 29d6455d2e..d2bff0769f 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -410,35 +410,29 @@ impl Rocks { oldest_slot: &OldestSlot, ) -> Vec { use columns::*; - let access_type = &options.access_type; - let advanced_options = &options.advanced_options; let (cf_descriptor_shred_data, cf_descriptor_shred_code) = - new_cf_descriptor_pair_shreds::( - access_type, - oldest_slot, - advanced_options, - ); + new_cf_descriptor_pair_shreds::(options, oldest_slot); vec![ - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), cf_descriptor_shred_data, cf_descriptor_shred_code, - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), ] } @@ -1413,44 +1407,44 @@ impl CompactionFilterFactory for PurgedSlotFilterFactory } fn new_cf_descriptor( - access_type: &AccessType, + options: &BlockstoreOptions, oldest_slot: &OldestSlot, ) -> ColumnFamilyDescriptor { - ColumnFamilyDescriptor::new(C::NAME, get_cf_options::(access_type, oldest_slot)) + ColumnFamilyDescriptor::new(C::NAME, get_cf_options::(options, oldest_slot)) } fn get_cf_options( - access_type: &AccessType, + options: &BlockstoreOptions, oldest_slot: &OldestSlot, ) -> Options { - let mut options = Options::default(); + let mut cf_options = Options::default(); // 256 * 8 = 2GB. 6 of these columns should take at most 12GB of RAM - options.set_max_write_buffer_number(8); - options.set_write_buffer_size(MAX_WRITE_BUFFER_SIZE as usize); + cf_options.set_max_write_buffer_number(8); + cf_options.set_write_buffer_size(MAX_WRITE_BUFFER_SIZE as usize); let file_num_compaction_trigger = 4; // Recommend that this be around the size of level 0. Level 0 estimated size in stable state is // write_buffer_size * min_write_buffer_number_to_merge * level0_file_num_compaction_trigger // Source: https://docs.rs/rocksdb/0.6.0/rocksdb/struct.Options.html#method.set_level_zero_file_num_compaction_trigger let total_size_base = MAX_WRITE_BUFFER_SIZE * file_num_compaction_trigger; let file_size_base = total_size_base / 10; - options.set_level_zero_file_num_compaction_trigger(file_num_compaction_trigger as i32); - options.set_max_bytes_for_level_base(total_size_base); - options.set_target_file_size_base(file_size_base); + cf_options.set_level_zero_file_num_compaction_trigger(file_num_compaction_trigger as i32); + cf_options.set_max_bytes_for_level_base(total_size_base); + cf_options.set_target_file_size_base(file_size_base); - let disable_auto_compactions = should_disable_auto_compactions(access_type); + let disable_auto_compactions = should_disable_auto_compactions(&options.access_type); if disable_auto_compactions { - options.set_disable_auto_compactions(true); + cf_options.set_disable_auto_compactions(true); } if !disable_auto_compactions && !should_exclude_from_compaction(C::NAME) { - options.set_compaction_filter_factory(PurgedSlotFilterFactory:: { + cf_options.set_compaction_filter_factory(PurgedSlotFilterFactory:: { oldest_slot: oldest_slot.clone(), name: CString::new(format!("purged_slot_filter_factory({})", C::NAME)).unwrap(), _phantom: PhantomData::default(), }); } - options + cf_options } /// Creates and returns the column family descriptors for both data shreds and @@ -1462,14 +1456,13 @@ fn new_cf_descriptor_pair_shreds< D: 'static + Column + ColumnName, // Column Family for Data Shred C: 'static + Column + ColumnName, // Column Family for Coding Shred >( - access_type: &AccessType, + options: &BlockstoreOptions, oldest_slot: &OldestSlot, - advanced_options: &BlockstoreAdvancedOptions, ) -> (ColumnFamilyDescriptor, ColumnFamilyDescriptor) { - match &advanced_options.shred_storage_type { + match &options.advanced_options.shred_storage_type { ShredStorageType::RocksLevel => ( - new_cf_descriptor::(access_type, oldest_slot), - new_cf_descriptor::(access_type, oldest_slot), + new_cf_descriptor::(options, oldest_slot), + new_cf_descriptor::(options, oldest_slot), ), ShredStorageType::RocksFifo(fifo_options) => ( new_cf_descriptor_fifo::(&fifo_options.shred_data_cf_size),