11local fiber = require (' fiber' )
22local log = require (' log' )
3+ local trigger = require (' internal.trigger' )
34local vshard_consts = require (' vshard.consts' )
45local utils = require (' crud.common.utils' )
56local has_metrics_module , metrics = pcall (require , ' metrics' )
@@ -8,8 +9,8 @@ local SAFE_MODE_SPACE = '_crud_rebalance_safe_mode_local'
89
910local rebalance = {
1011 safe_mode = false ,
11- safe_mode_enable_hooks = {},
12- safe_mode_disable_hooks = {} ,
12+ -- Trigger is run with one argument: true if safe mode is enabled and false if disabled.
13+ on_safe_mode_toggle = trigger . new ( ' _crud.safe_mode_toggle ' ) ,
1314 _router_cache_last_clear_ts = 0 -- On module load we don't know when (and if) route cache was cleared.
1415}
1516
@@ -39,9 +40,8 @@ local function _safe_mode_enable()
3940 end
4041 rebalance .safe_mode = true
4142
42- for hook , _ in pairs (rebalance .safe_mode_enable_hooks ) do
43- pcall (hook )
44- end
43+ -- This function is running inside on_commit trigger, need pcall to protect from errors in external code.
44+ pcall (rebalance .on_safe_mode_toggle .run , rebalance .on_safe_mode_toggle , true )
4545
4646 log .info (' Rebalance safe mode enabled' )
4747end
@@ -52,9 +52,8 @@ local function _safe_mode_disable()
5252 box .space ._bucket :on_replace (safe_mode_bucket_trigger )
5353 rebalance .safe_mode = false
5454
55- for hook , _ in pairs (rebalance .safe_mode_disable_hooks ) do
56- pcall (hook )
57- end
55+ -- This function is running inside on_commit trigger, need pcall to protect from errors in external code.
56+ pcall (rebalance .on_safe_mode_toggle .run , rebalance .on_safe_mode_toggle , false )
5857
5958 log .info (' Rebalance safe mode disabled' )
6059end
@@ -130,22 +129,6 @@ function rebalance.init()
130129 end
131130end
132131
133- function rebalance .register_safe_mode_enable_hook (func )
134- rebalance .safe_mode_enable_hooks [func ] = true
135- end
136-
137- function rebalance .remove_safe_mode_enable_hook (func )
138- rebalance .safe_mode_enable_hooks [func ] = nil
139- end
140-
141- function rebalance .register_safe_mode_disable_hook (func )
142- rebalance .safe_mode_disable_hooks [func ] = true
143- end
144-
145- function rebalance .remove_safe_mode_disable_hook (func )
146- rebalance .safe_mode_disable_hooks [func ] = nil
147- end
148-
149132function rebalance .safe_mode_status ()
150133 return rebalance .safe_mode
151134end
0 commit comments