Skip to content

Commit 15f2332

Browse files
committed
[TNTP-2109] Use internal.trigger instead of custom hooks
1 parent 6654ca2 commit 15f2332

File tree

3 files changed

+29
-43
lines changed

3 files changed

+29
-43
lines changed

crud/common/call.lua

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,22 @@ end
4343

4444
local call_on_storage = rebalance.safe_mode and call_on_storage_safe or call_on_storage_fast
4545

46-
local function safe_mode_enable()
47-
call_on_storage = call_on_storage_safe
48-
49-
for fb_id, fb in pairs(fiber.info()) do
50-
local fibers_killed = 0
51-
if fb.name:startswith(CRUD_CALL_FUNC_NAME .. '/fast/') and not safe_mode_allowed_fast_methods[fb.name] then
52-
fiber.kill(fb_id)
53-
fibers_killed = fibers_killed + 1
46+
rebalance.on_safe_mode_toggle(function(is_enabled)
47+
if is_enabled then
48+
call_on_storage = call_on_storage_safe
49+
50+
for fb_id, fb in pairs(fiber.info()) do
51+
local fibers_killed = 0
52+
if fb.name:startswith(CRUD_CALL_FUNC_NAME .. '/fast/') and not safe_mode_allowed_fast_methods[fb.name] then
53+
fiber.kill(fb_id)
54+
fibers_killed = fibers_killed + 1
55+
end
56+
log.debug('Killed %d fibers with fast-mode crud requests.', fibers_killed)
5457
end
55-
log.debug('Killed %d fibers with fast-mode crud requests.', fibers_killed)
58+
else
59+
call_on_storage = call_on_storage_fast
5660
end
57-
end
58-
59-
local function safe_mode_disable()
60-
call_on_storage = call_on_storage_fast
61-
end
62-
63-
rebalance.register_safe_mode_enable_hook(safe_mode_enable)
64-
rebalance.register_safe_mode_disable_hook(safe_mode_disable)
61+
end)
6562

6663
call.storage_api = {[CALL_FUNC_NAME] = call_on_storage}
6764

crud/common/rebalance.lua

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
local fiber = require('fiber')
22
local log = require('log')
3+
local trigger = require('internal.trigger')
34
local vshard_consts = require('vshard.consts')
45
local utils = require('crud.common.utils')
56
local has_metrics_module, metrics = pcall(require, 'metrics')
@@ -8,8 +9,8 @@ local SAFE_MODE_SPACE = '_crud_rebalance_safe_mode_local'
89

910
local 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')
4747
end
@@ -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')
6059
end
@@ -130,22 +129,6 @@ function rebalance.init()
130129
end
131130
end
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-
149132
function rebalance.safe_mode_status()
150133
return rebalance.safe_mode
151134
end

crud/common/sharding/bucket_ref_unref.lua

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,14 @@ function M.set_safe_mode_status(safe_mode_status)
172172
end
173173

174174
if not hooks_registered then
175-
rebalance.register_safe_mode_enable_hook(set_safe_mode)
176-
rebalance.register_safe_mode_disable_hook(set_fast_mode)
175+
rebalance.on_safe_mode_toggle(function(is_enabled)
176+
if is_enabled then
177+
set_safe_mode()
178+
else
179+
set_fast_mode()
180+
end
181+
end)
182+
177183
hooks_registered = true
178184
end
179185
end

0 commit comments

Comments
 (0)