@ -17,6 +17,7 @@
# include "rocksdb/options.h"
# include "rocksdb/options.h"
# include "util/testharness.h"
# include "util/testharness.h"
# include "utilities/options/convenience.h"
using GFLAGS : : ParseCommandLineFlags ;
using GFLAGS : : ParseCommandLineFlags ;
DEFINE_bool ( enable_print , false , " Print options generated to console. " ) ;
DEFINE_bool ( enable_print , false , " Print options generated to console. " ) ;
@ -77,8 +78,8 @@ TEST(OptionsTest, LooseCondition) {
PrintAndGetOptions ( 128 * 1024 * 1024 , 4 , 8 ) ;
PrintAndGetOptions ( 128 * 1024 * 1024 , 4 , 8 ) ;
}
}
TEST ( OptionsTest , GetOptionsFromStrings Test ) {
TEST ( OptionsTest , GetOptionsFromMap Test ) {
std : : unordered_map < std : : string , std : : string > options_map = {
std : : unordered_map < std : : string , std : : string > cf_ options_map = {
{ " write_buffer_size " , " 1 " } ,
{ " write_buffer_size " , " 1 " } ,
{ " max_write_buffer_number " , " 2 " } ,
{ " max_write_buffer_number " , " 2 " } ,
{ " min_write_buffer_number_to_merge " , " 3 " } ,
{ " min_write_buffer_number_to_merge " , " 3 " } ,
@ -120,7 +121,10 @@ TEST(OptionsTest, GetOptionsFromStringsTest) {
{ " memtable_prefix_bloom_huge_page_tlb_size " , " 28 " } ,
{ " memtable_prefix_bloom_huge_page_tlb_size " , " 28 " } ,
{ " bloom_locality " , " 29 " } ,
{ " bloom_locality " , " 29 " } ,
{ " max_successive_merges " , " 30 " } ,
{ " max_successive_merges " , " 30 " } ,
{ " min_partial_merge_operands " , " 31 " } ,
{ " min_partial_merge_operands " , " 31 " }
} ;
std : : unordered_map < std : : string , std : : string > db_options_map = {
{ " create_if_missing " , " false " } ,
{ " create_if_missing " , " false " } ,
{ " create_missing_column_families " , " true " } ,
{ " create_missing_column_families " , " true " } ,
{ " error_if_exists " , " false " } ,
{ " error_if_exists " , " false " } ,
@ -154,98 +158,146 @@ TEST(OptionsTest, GetOptionsFromStringsTest) {
{ " bytes_per_sync " , " 47 " } ,
{ " bytes_per_sync " , " 47 " } ,
} ;
} ;
Options base_opt ;
ColumnFamilyOptions base_cf_opt ;
Options new_opt ;
ColumnFamilyOptions new_cf_opt ;
ASSERT_TRUE ( GetOptionsFromStrings ( base_opt , options_map , & new_opt ) ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromMap (
ASSERT_EQ ( new_opt . write_buffer_size , 1U ) ;
base_cf_opt , cf_options_map , & new_cf_opt ) ) ;
ASSERT_EQ ( new_opt . max_write_buffer_number , 2 ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 1U ) ;
ASSERT_EQ ( new_opt . min_write_buffer_number_to_merge , 3 ) ;
ASSERT_EQ ( new_cf_opt . max_write_buffer_number , 2 ) ;
ASSERT_EQ ( new_opt . compression , kSnappyCompression ) ;
ASSERT_EQ ( new_cf_opt . min_write_buffer_number_to_merge , 3 ) ;
ASSERT_EQ ( new_opt . compression_per_level . size ( ) , 6U ) ;
ASSERT_EQ ( new_cf_opt . compression , kSnappyCompression ) ;
ASSERT_EQ ( new_opt . compression_per_level [ 0 ] , kNoCompression ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level . size ( ) , 6U ) ;
ASSERT_EQ ( new_opt . compression_per_level [ 1 ] , kSnappyCompression ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level [ 0 ] , kNoCompression ) ;
ASSERT_EQ ( new_opt . compression_per_level [ 2 ] , kZlibCompression ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level [ 1 ] , kSnappyCompression ) ;
ASSERT_EQ ( new_opt . compression_per_level [ 3 ] , kBZip2Compression ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level [ 2 ] , kZlibCompression ) ;
ASSERT_EQ ( new_opt . compression_per_level [ 4 ] , kLZ4Compression ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level [ 3 ] , kBZip2Compression ) ;
ASSERT_EQ ( new_opt . compression_per_level [ 5 ] , kLZ4HCCompression ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level [ 4 ] , kLZ4Compression ) ;
ASSERT_EQ ( new_opt . compression_opts . window_bits , 4 ) ;
ASSERT_EQ ( new_cf_opt . compression_per_level [ 5 ] , kLZ4HCCompression ) ;
ASSERT_EQ ( new_opt . compression_opts . level , 5 ) ;
ASSERT_EQ ( new_cf_opt . compression_opts . window_bits , 4 ) ;
ASSERT_EQ ( new_opt . compression_opts . strategy , 6 ) ;
ASSERT_EQ ( new_cf_opt . compression_opts . level , 5 ) ;
ASSERT_EQ ( new_opt . num_levels , 7 ) ;
ASSERT_EQ ( new_cf_opt . compression_opts . strategy , 6 ) ;
ASSERT_EQ ( new_opt . level0_file_num_compaction_trigger , 8 ) ;
ASSERT_EQ ( new_cf_opt . num_levels , 7 ) ;
ASSERT_EQ ( new_opt . level0_slowdown_writes_trigger , 9 ) ;
ASSERT_EQ ( new_cf_opt . level0_file_num_compaction_trigger , 8 ) ;
ASSERT_EQ ( new_opt . level0_stop_writes_trigger , 10 ) ;
ASSERT_EQ ( new_cf_opt . level0_slowdown_writes_trigger , 9 ) ;
ASSERT_EQ ( new_opt . max_mem_compaction_level , 11 ) ;
ASSERT_EQ ( new_cf_opt . level0_stop_writes_trigger , 10 ) ;
ASSERT_EQ ( new_opt . target_file_size_base , static_cast < uint64_t > ( 12 ) ) ;
ASSERT_EQ ( new_cf_opt . max_mem_compaction_level , 11 ) ;
ASSERT_EQ ( new_opt . target_file_size_multiplier , 13 ) ;
ASSERT_EQ ( new_cf_opt . target_file_size_base , static_cast < uint64_t > ( 12 ) ) ;
ASSERT_EQ ( new_opt . max_bytes_for_level_base , 14U ) ;
ASSERT_EQ ( new_cf_opt . target_file_size_multiplier , 13 ) ;
ASSERT_EQ ( new_opt . max_bytes_for_level_multiplier , 15 ) ;
ASSERT_EQ ( new_cf_opt . max_bytes_for_level_base , 14U ) ;
ASSERT_EQ ( new_opt . max_bytes_for_level_multiplier_additional . size ( ) , 3U ) ;
ASSERT_EQ ( new_cf_opt . max_bytes_for_level_multiplier , 15 ) ;
ASSERT_EQ ( new_opt . max_bytes_for_level_multiplier_additional [ 0 ] , 16 ) ;
ASSERT_EQ ( new_cf_opt . max_bytes_for_level_multiplier_additional . size ( ) , 3U ) ;
ASSERT_EQ ( new_opt . max_bytes_for_level_multiplier_additional [ 1 ] , 17 ) ;
ASSERT_EQ ( new_cf_opt . max_bytes_for_level_multiplier_additional [ 0 ] , 16 ) ;
ASSERT_EQ ( new_opt . max_bytes_for_level_multiplier_additional [ 2 ] , 18 ) ;
ASSERT_EQ ( new_cf_opt . max_bytes_for_level_multiplier_additional [ 1 ] , 17 ) ;
ASSERT_EQ ( new_opt . expanded_compaction_factor , 19 ) ;
ASSERT_EQ ( new_cf_opt . max_bytes_for_level_multiplier_additional [ 2 ] , 18 ) ;
ASSERT_EQ ( new_opt . source_compaction_factor , 20 ) ;
ASSERT_EQ ( new_cf_opt . expanded_compaction_factor , 19 ) ;
ASSERT_EQ ( new_opt . max_grandparent_overlap_factor , 21 ) ;
ASSERT_EQ ( new_cf_opt . source_compaction_factor , 20 ) ;
ASSERT_EQ ( new_opt . soft_rate_limit , 1.1 ) ;
ASSERT_EQ ( new_cf_opt . max_grandparent_overlap_factor , 21 ) ;
ASSERT_EQ ( new_opt . hard_rate_limit , 2.1 ) ;
ASSERT_EQ ( new_cf_opt . soft_rate_limit , 1.1 ) ;
ASSERT_EQ ( new_opt . arena_block_size , 22U ) ;
ASSERT_EQ ( new_cf_opt . hard_rate_limit , 2.1 ) ;
ASSERT_EQ ( new_opt . disable_auto_compactions , true ) ;
ASSERT_EQ ( new_cf_opt . arena_block_size , 22U ) ;
ASSERT_EQ ( new_opt . purge_redundant_kvs_while_flush , true ) ;
ASSERT_EQ ( new_cf_opt . disable_auto_compactions , true ) ;
ASSERT_EQ ( new_opt . compaction_style , kCompactionStyleLevel ) ;
ASSERT_EQ ( new_cf_opt . purge_redundant_kvs_while_flush , true ) ;
ASSERT_EQ ( new_opt . verify_checksums_in_compaction , false ) ;
ASSERT_EQ ( new_cf_opt . compaction_style , kCompactionStyleLevel ) ;
ASSERT_EQ ( new_opt . compaction_options_fifo . max_table_files_size ,
ASSERT_EQ ( new_cf_opt . verify_checksums_in_compaction , false ) ;
ASSERT_EQ ( new_cf_opt . compaction_options_fifo . max_table_files_size ,
static_cast < uint64_t > ( 23 ) ) ;
static_cast < uint64_t > ( 23 ) ) ;
ASSERT_EQ ( new_opt . filter_deletes , false ) ;
ASSERT_EQ ( new_cf_ opt . filter_deletes , false ) ;
ASSERT_EQ ( new_opt . max_sequential_skip_in_iterations ,
ASSERT_EQ ( new_cf_ opt . max_sequential_skip_in_iterations ,
static_cast < uint64_t > ( 24 ) ) ;
static_cast < uint64_t > ( 24 ) ) ;
ASSERT_EQ ( new_opt . inplace_update_support , true ) ;
ASSERT_EQ ( new_cf_opt . inplace_update_support , true ) ;
ASSERT_EQ ( new_opt . inplace_update_num_locks , 25U ) ;
ASSERT_EQ ( new_cf_opt . inplace_update_num_locks , 25U ) ;
ASSERT_EQ ( new_opt . memtable_prefix_bloom_bits , 26U ) ;
ASSERT_EQ ( new_cf_opt . memtable_prefix_bloom_bits , 26U ) ;
ASSERT_EQ ( new_opt . memtable_prefix_bloom_probes , 27U ) ;
ASSERT_EQ ( new_cf_opt . memtable_prefix_bloom_probes , 27U ) ;
ASSERT_EQ ( new_opt . memtable_prefix_bloom_huge_page_tlb_size , 28U ) ;
ASSERT_EQ ( new_cf_opt . memtable_prefix_bloom_huge_page_tlb_size , 28U ) ;
ASSERT_EQ ( new_opt . bloom_locality , 29U ) ;
ASSERT_EQ ( new_cf_opt . bloom_locality , 29U ) ;
ASSERT_EQ ( new_opt . max_successive_merges , 30U ) ;
ASSERT_EQ ( new_cf_opt . max_successive_merges , 30U ) ;
ASSERT_EQ ( new_opt . min_partial_merge_operands , 31U ) ;
ASSERT_EQ ( new_cf_opt . min_partial_merge_operands , 31U ) ;
ASSERT_EQ ( new_opt . create_if_missing , false ) ;
ASSERT_EQ ( new_opt . create_missing_column_families , true ) ;
cf_options_map [ " write_buffer_size " ] = " hello " ;
ASSERT_EQ ( new_opt . error_if_exists , false ) ;
ASSERT_TRUE ( ! GetColumnFamilyOptionsFromMap (
ASSERT_EQ ( new_opt . paranoid_checks , true ) ;
base_cf_opt , cf_options_map , & new_cf_opt ) ) ;
ASSERT_EQ ( new_opt . max_open_files , 32 ) ;
cf_options_map [ " write_buffer_size " ] = " 1 " ;
ASSERT_EQ ( new_opt . max_total_wal_size , static_cast < uint64_t > ( 33 ) ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromMap (
ASSERT_EQ ( new_opt . disableDataSync , false ) ;
base_cf_opt , cf_options_map , & new_cf_opt ) ) ;
ASSERT_EQ ( new_opt . use_fsync , true ) ;
cf_options_map [ " unknown_option " ] = " 1 " ;
ASSERT_EQ ( new_opt . db_log_dir , " /db_log_dir " ) ;
ASSERT_TRUE ( ! GetColumnFamilyOptionsFromMap (
ASSERT_EQ ( new_opt . wal_dir , " /wal_dir " ) ;
base_cf_opt , cf_options_map , & new_cf_opt ) ) ;
ASSERT_EQ ( new_opt . delete_obsolete_files_period_micros ,
DBOptions base_db_opt ;
DBOptions new_db_opt ;
ASSERT_TRUE ( GetDBOptionsFromMap ( base_db_opt , db_options_map , & new_db_opt ) ) ;
ASSERT_EQ ( new_db_opt . create_if_missing , false ) ;
ASSERT_EQ ( new_db_opt . create_missing_column_families , true ) ;
ASSERT_EQ ( new_db_opt . error_if_exists , false ) ;
ASSERT_EQ ( new_db_opt . paranoid_checks , true ) ;
ASSERT_EQ ( new_db_opt . max_open_files , 32 ) ;
ASSERT_EQ ( new_db_opt . max_total_wal_size , static_cast < uint64_t > ( 33 ) ) ;
ASSERT_EQ ( new_db_opt . disableDataSync , false ) ;
ASSERT_EQ ( new_db_opt . use_fsync , true ) ;
ASSERT_EQ ( new_db_opt . db_log_dir , " /db_log_dir " ) ;
ASSERT_EQ ( new_db_opt . wal_dir , " /wal_dir " ) ;
ASSERT_EQ ( new_db_opt . delete_obsolete_files_period_micros ,
static_cast < uint64_t > ( 34 ) ) ;
static_cast < uint64_t > ( 34 ) ) ;
ASSERT_EQ ( new_opt . max_background_compactions , 35 ) ;
ASSERT_EQ ( new_db_opt . max_background_compactions , 35 ) ;
ASSERT_EQ ( new_opt . max_background_flushes , 36 ) ;
ASSERT_EQ ( new_db_opt . max_background_flushes , 36 ) ;
ASSERT_EQ ( new_opt . max_log_file_size , 37U ) ;
ASSERT_EQ ( new_db_opt . max_log_file_size , 37U ) ;
ASSERT_EQ ( new_opt . log_file_time_to_roll , 38U ) ;
ASSERT_EQ ( new_db_opt . log_file_time_to_roll , 38U ) ;
ASSERT_EQ ( new_opt . keep_log_file_num , 39U ) ;
ASSERT_EQ ( new_db_opt . keep_log_file_num , 39U ) ;
ASSERT_EQ ( new_opt . max_manifest_file_size , static_cast < uint64_t > ( 40 ) ) ;
ASSERT_EQ ( new_db_opt . max_manifest_file_size , static_cast < uint64_t > ( 40 ) ) ;
ASSERT_EQ ( new_opt . table_cache_numshardbits , 41 ) ;
ASSERT_EQ ( new_db_opt . table_cache_numshardbits , 41 ) ;
ASSERT_EQ ( new_opt . table_cache_remove_scan_count_limit , 42 ) ;
ASSERT_EQ ( new_db_opt . table_cache_remove_scan_count_limit , 42 ) ;
ASSERT_EQ ( new_opt . WAL_ttl_seconds , static_cast < uint64_t > ( 43 ) ) ;
ASSERT_EQ ( new_db_opt . WAL_ttl_seconds , static_cast < uint64_t > ( 43 ) ) ;
ASSERT_EQ ( new_opt . WAL_size_limit_MB , static_cast < uint64_t > ( 44 ) ) ;
ASSERT_EQ ( new_db_opt . WAL_size_limit_MB , static_cast < uint64_t > ( 44 ) ) ;
ASSERT_EQ ( new_opt . manifest_preallocation_size , 45U ) ;
ASSERT_EQ ( new_db_opt . manifest_preallocation_size , 45U ) ;
ASSERT_EQ ( new_opt . allow_os_buffer , false ) ;
ASSERT_EQ ( new_db_opt . allow_os_buffer , false ) ;
ASSERT_EQ ( new_opt . allow_mmap_reads , true ) ;
ASSERT_EQ ( new_db_opt . allow_mmap_reads , true ) ;
ASSERT_EQ ( new_opt . allow_mmap_writes , false ) ;
ASSERT_EQ ( new_db_opt . allow_mmap_writes , false ) ;
ASSERT_EQ ( new_opt . is_fd_close_on_exec , true ) ;
ASSERT_EQ ( new_db_opt . is_fd_close_on_exec , true ) ;
ASSERT_EQ ( new_opt . skip_log_error_on_recovery , false ) ;
ASSERT_EQ ( new_db_opt . skip_log_error_on_recovery , false ) ;
ASSERT_EQ ( new_opt . stats_dump_period_sec , 46U ) ;
ASSERT_EQ ( new_db_opt . stats_dump_period_sec , 46U ) ;
ASSERT_EQ ( new_opt . advise_random_on_open , true ) ;
ASSERT_EQ ( new_db_opt . advise_random_on_open , true ) ;
ASSERT_EQ ( new_opt . use_adaptive_mutex , false ) ;
ASSERT_EQ ( new_db_opt . use_adaptive_mutex , false ) ;
ASSERT_EQ ( new_opt . bytes_per_sync , static_cast < uint64_t > ( 47 ) ) ;
ASSERT_EQ ( new_db_opt . bytes_per_sync , static_cast < uint64_t > ( 47 ) ) ;
}
options_map [ " write_buffer_size " ] = " hello " ;
TEST ( OptionsTest , GetOptionsFromStringTest ) {
ASSERT_TRUE ( ! GetOptionsFromStrings ( base_opt , options_map , & new_opt ) ) ;
ColumnFamilyOptions base_cf_opt ;
options_map [ " write_buffer_size " ] = " 1 " ;
ColumnFamilyOptions new_cf_opt ;
ASSERT_TRUE ( GetOptionsFromStrings ( base_opt , options_map , & new_opt ) ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt , " " , & new_cf_opt ) ) ;
options_map [ " unknown_option " ] = " 1 " ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt ,
ASSERT_TRUE ( ! GetOptionsFromStrings ( base_opt , options_map , & new_opt ) ) ;
" write_buffer_size=5 " , & new_cf_opt ) ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 5 ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=6; " , & new_cf_opt ) ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 6 ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size = 7 " , & new_cf_opt ) ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 7 ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size = 8 ; " , & new_cf_opt ) ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 8 ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=9;max_write_buffer_number=10 " , & new_cf_opt ) ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 9 ) ;
ASSERT_EQ ( new_cf_opt . max_write_buffer_number , 10 ) ;
ASSERT_TRUE ( GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=11; max_write_buffer_number = 12 ; " ,
& new_cf_opt ) ) ;
ASSERT_EQ ( new_cf_opt . write_buffer_size , 11 ) ;
ASSERT_EQ ( new_cf_opt . max_write_buffer_number , 12 ) ;
// Wrong name "max_write_buffer_number_"
ASSERT_TRUE ( ! GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=13;max_write_buffer_number_=14; " ,
& new_cf_opt ) ) ;
// Wrong key/value pair
ASSERT_TRUE ( ! GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=13;max_write_buffer_number; " , & new_cf_opt ) ) ;
// Error Paring value
ASSERT_TRUE ( ! GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=13;max_write_buffer_number=; " , & new_cf_opt ) ) ;
// Missing option name
ASSERT_TRUE ( ! GetColumnFamilyOptionsFromString ( base_cf_opt ,
" write_buffer_size=13; =100; " , & new_cf_opt ) ) ;
}
}
} // namespace rocksdb
} // namespace rocksdb