@@ -211,6 +211,28 @@ rocksdb_drop_index_wakeup_thread(THD* thd,
211
211
}
212
212
}
213
213
214
+ static my_bool rocksdb_pause_background_work = 0 ;
215
+ static mysql_mutex_t pause_background_work_mutex;
216
+
217
+ static void
218
+ rocksdb_set_pause_background_work (THD* thd,
219
+ struct st_mysql_sys_var * var,
220
+ void * var_ptr,
221
+ const void * save)
222
+ {
223
+ mysql_mutex_lock (&pause_background_work_mutex);
224
+ bool pause_requested = *static_cast <const bool *>(save);
225
+ if (rocksdb_pause_background_work != pause_requested) {
226
+ if (pause_requested) {
227
+ rdb->PauseBackgroundWork ();
228
+ } else {
229
+ rdb->ContinueBackgroundWork ();
230
+ }
231
+ rocksdb_pause_background_work = pause_requested;
232
+ }
233
+ mysql_mutex_unlock (&pause_background_work_mutex);
234
+ }
235
+
214
236
static void
215
237
set_compaction_options (THD* thd,
216
238
struct st_mysql_sys_var * var,
@@ -679,6 +701,12 @@ static MYSQL_SYSVAR_BOOL(signal_drop_index_thread,
679
701
" Wake up drop index thread" ,
680
702
NULL , rocksdb_drop_index_wakeup_thread, FALSE );
681
703
704
+ static MYSQL_SYSVAR_BOOL (pause_background_work,
705
+ rocksdb_pause_background_work,
706
+ PLUGIN_VAR_RQCMDARG,
707
+ " Disable all rocksdb background operations" ,
708
+ nullptr , rocksdb_set_pause_background_work, FALSE );
709
+
682
710
static MYSQL_SYSVAR_BOOL (strict_collation_check,
683
711
rocksdb_strict_collation_check,
684
712
PLUGIN_VAR_RQCMDARG,
@@ -840,6 +868,7 @@ static struct st_mysql_sys_var* rocksdb_system_variables[]= {
840
868
841
869
MYSQL_SYSVAR (compact_cf),
842
870
MYSQL_SYSVAR (signal_drop_index_thread),
871
+ MYSQL_SYSVAR (pause_background_work),
843
872
MYSQL_SYSVAR (strict_collation_check),
844
873
MYSQL_SYSVAR (strict_collation_exceptions),
845
874
MYSQL_SYSVAR (collect_sst_properties),
@@ -906,7 +935,8 @@ static PSI_stage_info *all_rocksdb_stages[]=
906
935
static PSI_mutex_key ex_key_mutex_example, ex_key_mutex_ROCKSDB_SHARE_mutex,
907
936
key_mutex_background, key_mutex_stop_background,
908
937
key_mutex_drop_index, key_drop_index_interrupt_mutex,
909
- key_mutex_snapshot, key_mutex_collation_exception_list;
938
+ key_mutex_snapshot, key_mutex_collation_exception_list,
939
+ key_mutex_pause_background_work;
910
940
911
941
static PSI_mutex_info all_rocksdb_mutexes[]=
912
942
{
@@ -919,6 +949,7 @@ static PSI_mutex_info all_rocksdb_mutexes[]=
919
949
{ &key_mutex_snapshot, " snapshot" , PSI_FLAG_GLOBAL},
920
950
{ &key_mutex_collation_exception_list, " collation_exception_list" ,
921
951
PSI_FLAG_GLOBAL},
952
+ { &key_mutex_pause_background_work, " pause background work" , PSI_FLAG_GLOBAL},
922
953
};
923
954
924
955
PSI_cond_key key_cond_stop, key_drop_index_interrupt_cond;
@@ -1919,6 +1950,8 @@ static int rocksdb_init_func(void *p)
1919
1950
mysql_mutex_init (key_mutex_snapshot, &snapshot_mutex, MY_MUTEX_INIT_FAST);
1920
1951
mysql_mutex_init (key_mutex_collation_exception_list,
1921
1952
&collation_exception_list_mutex, MY_MUTEX_INIT_FAST);
1953
+ mysql_mutex_init (key_mutex_pause_background_work,
1954
+ &pause_background_work_mutex, MY_MUTEX_INIT_FAST);
1922
1955
mysql_cond_init (key_cond_stop, &stop_cond, NULL );
1923
1956
(void ) my_hash_init (&rocksdb_open_tables,system_charset_info,32 ,0 ,0 ,
1924
1957
(my_hash_get_key) rocksdb_get_key,0 ,0 );
@@ -1947,6 +1980,8 @@ static int rocksdb_init_func(void *p)
1947
1980
HTON_CAN_RECREATE;
1948
1981
1949
1982
mysql_mutex_init (key_mutex_drop_index, &drop_index_mutex, MY_MUTEX_INIT_FAST);
1983
+ mysql_mutex_init (key_drop_index_interrupt_mutex, &drop_index_interrupt_mutex,
1984
+ MY_MUTEX_INIT_FAST);
1950
1985
mysql_mutex_init (key_drop_index_interrupt_mutex, &drop_index_interrupt_mutex,
1951
1986
MY_MUTEX_INIT_FAST);
1952
1987
mysql_cond_init (key_drop_index_interrupt_cond, &drop_index_interrupt_cond, NULL );
@@ -2148,6 +2183,10 @@ static int rocksdb_init_func(void *p)
2148
2183
2149
2184
collation_exception_list = split (rocksdb_strict_collation_exceptions, ' ,' );
2150
2185
2186
+ if (rocksdb_pause_background_work) {
2187
+ rdb->PauseBackgroundWork ();
2188
+ }
2189
+
2151
2190
sql_print_information (" RocksDB instance opened" );
2152
2191
DBUG_RETURN (0 );
2153
2192
}
@@ -2186,6 +2225,7 @@ static int rocksdb_done_func(void *p)
2186
2225
mysql_mutex_destroy (&collation_exception_list_mutex);
2187
2226
mysql_mutex_destroy (&snapshot_mutex);
2188
2227
mysql_mutex_destroy (&rocksdb_mutex);
2228
+ mysql_mutex_destroy (&pause_background_work_mutex);
2189
2229
2190
2230
ddl_manager.cleanup ();
2191
2231
binlog_manager.cleanup ();
0 commit comments