empiredan commented on code in PR #1108: URL: https://github.com/apache/incubator-pegasus/pull/1108#discussion_r953794855
########## src/server/pegasus_server_impl.cpp: ########## @@ -3007,6 +3013,96 @@ void pegasus_server_impl::reset_usage_scenario_options( target_opts->max_write_buffer_number = base_opts.max_write_buffer_number; } +void pegasus_server_impl::recalculate_data_cf_options( + const rocksdb::ColumnFamilyOptions &cur_data_cf_opts) +{ +#define UPDATE_NUMBER_OPTION_IF_NEEDED(option, value) \ + do { \ + auto _v = (value); \ + if (_v != cur_data_cf_opts.option) { \ + new_options[#option] = std::to_string(_v); \ + } \ + } while (0) + +#define UPDATE_BOOL_OPTION_IF_NEEDED(option, value) \ + do { \ + if ((value) != cur_data_cf_opts.option) { \ Review Comment: Should `(value)` be assigned to a variable (e.g. `auto _v = (value);`), just like what has been done in `UPDATE_NUMBER_OPTION_IF_NEEDED`, to avoid evaluating 2 times ? ########## src/server/pegasus_server_impl.cpp: ########## @@ -3007,6 +3013,96 @@ void pegasus_server_impl::reset_usage_scenario_options( target_opts->max_write_buffer_number = base_opts.max_write_buffer_number; } +void pegasus_server_impl::recalculate_data_cf_options( + const rocksdb::ColumnFamilyOptions &cur_data_cf_opts) +{ +#define UPDATE_NUMBER_OPTION_IF_NEEDED(option, value) \ + do { \ + auto _v = (value); \ + if (_v != cur_data_cf_opts.option) { \ + new_options[#option] = std::to_string(_v); \ + } \ + } while (0) + +#define UPDATE_BOOL_OPTION_IF_NEEDED(option, value) \ + do { \ + if ((value) != cur_data_cf_opts.option) { \ + if ((value)) { \ + new_options[#option] = "true"; \ + } else { \ + new_options[#option] = "false"; \ + } \ + } \ + } while (0) + +#define UPDATE_OPTION_IF_NOT_NEARBY(option, value) \ + do { \ + auto _v = (value); \ + if (!check_value_if_nearby(_v, cur_data_cf_opts.option)) { \ + new_options[#option] = std::to_string(get_random_nearby(_v)); \ + } \ + } while (0) + +#define UPDATE_OPTION_IF_NEEDED(option) UPDATE_NUMBER_OPTION_IF_NEEDED(option, _data_cf_opts.option) + + if (_table_data_cf_opts_recalculated) + return; Review Comment: ```c++ if (_table_data_cf_opts_recalculated) { return; } ``` ########## src/server/pegasus_server_impl.cpp: ########## @@ -3007,6 +3013,96 @@ void pegasus_server_impl::reset_usage_scenario_options( target_opts->max_write_buffer_number = base_opts.max_write_buffer_number; } +void pegasus_server_impl::recalculate_data_cf_options( + const rocksdb::ColumnFamilyOptions &cur_data_cf_opts) +{ +#define UPDATE_NUMBER_OPTION_IF_NEEDED(option, value) \ + do { \ + auto _v = (value); \ + if (_v != cur_data_cf_opts.option) { \ + new_options[#option] = std::to_string(_v); \ + } \ + } while (0) + +#define UPDATE_BOOL_OPTION_IF_NEEDED(option, value) \ + do { \ + if ((value) != cur_data_cf_opts.option) { \ + if ((value)) { \ + new_options[#option] = "true"; \ + } else { \ + new_options[#option] = "false"; \ + } \ + } \ + } while (0) + +#define UPDATE_OPTION_IF_NOT_NEARBY(option, value) \ + do { \ + auto _v = (value); \ + if (!check_value_if_nearby(_v, cur_data_cf_opts.option)) { \ + new_options[#option] = std::to_string(get_random_nearby(_v)); \ + } \ + } while (0) + +#define UPDATE_OPTION_IF_NEEDED(option) UPDATE_NUMBER_OPTION_IF_NEEDED(option, _data_cf_opts.option) + + if (_table_data_cf_opts_recalculated) + return; + std::unordered_map<std::string, std::string> new_options; + if (ROCKSDB_ENV_USAGE_SCENARIO_NORMAL == _usage_scenario || + ROCKSDB_ENV_USAGE_SCENARIO_PREFER_WRITE == _usage_scenario) { + if (ROCKSDB_ENV_USAGE_SCENARIO_NORMAL == _usage_scenario) { + UPDATE_OPTION_IF_NOT_NEARBY(write_buffer_size, _data_cf_opts.write_buffer_size); + UPDATE_OPTION_IF_NEEDED(level0_file_num_compaction_trigger); + } else { + uint64_t buffer_size = dsn::rand::next_u64(_data_cf_opts.write_buffer_size, + _data_cf_opts.write_buffer_size * 2); + if (!(cur_data_cf_opts.write_buffer_size >= _data_cf_opts.write_buffer_size && + cur_data_cf_opts.write_buffer_size <= _data_cf_opts.write_buffer_size * 2)) { Review Comment: ```c++ if (cur_data_cf_opts.write_buffer_size < _data_cf_opts.write_buffer_size || cur_data_cf_opts.write_buffer_size > _data_cf_opts.write_buffer_size * 2) ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@pegasus.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pegasus.apache.org For additional commands, e-mail: dev-h...@pegasus.apache.org