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

Reply via email to