Skip to content

Commit 0fd3693

Browse files
committed
storage: fix services being nullified too late
If user tries to reconfigure vshard very often, it may happen, that service didn't manage to notice, that it's cancelled, before the new one is started. In such case the new fiber may encounter assertion failure and will be restarted several times. The approach, which makes the service nullification, when the current one is the one stored globally was chosen, since with blocking service cancellation reconfiguration of vshard may take huge amount of time. The commit doesn't have test, because it applies the same approach, which was introduced and tested for router in the previous commit. Closes of #9 NO_DOC=bugfix NO_TEST=<previous commit>
1 parent 01fa577 commit 0fd3693

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

vshard/storage/init.lua

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,12 +1099,12 @@ local function recovery_service_f(service)
10991099
end
11001100

11011101
local function recovery_f()
1102-
assert(not M.recovery_service)
11031102
local service = lservice_info.new('recovery')
11041103
M.recovery_service = service
11051104
local ok, err = pcall(recovery_service_f, service)
1106-
assert(M.recovery_service == service)
1107-
M.recovery_service = nil
1105+
if M.recovery_service == service then
1106+
M.recovery_service = nil
1107+
end
11081108
if not ok then
11091109
error(err)
11101110
end
@@ -2320,12 +2320,12 @@ local function gc_bucket_service_f(service)
23202320
end
23212321

23222322
local function gc_bucket_f()
2323-
assert(not M.gc_service)
23242323
local service = lservice_info.new('gc')
23252324
M.gc_service = service
23262325
local ok, err = pcall(gc_bucket_service_f, service)
2327-
assert(M.gc_service == service)
2328-
M.gc_service = nil
2326+
if M.gc_service == service then
2327+
M.gc_service = nil
2328+
end
23292329
if not ok then
23302330
error(err)
23312331
end
@@ -2907,12 +2907,12 @@ local function rebalancer_service_f(service)
29072907
end
29082908

29092909
local function rebalancer_f()
2910-
assert(not M.rebalancer_service)
29112910
local service = lservice_info.new('rebalancer')
29122911
M.rebalancer_service = service
29132912
local ok, err = pcall(rebalancer_service_f, service)
2914-
assert(M.rebalancer_service == service)
2915-
M.rebalancer_service = nil
2913+
if M.rebalancer_service == service then
2914+
M.rebalancer_service = nil
2915+
end
29162916
if not ok then
29172917
error(err)
29182918
end
@@ -3463,12 +3463,12 @@ local function instance_watch_service_f(service)
34633463
end
34643464

34653465
local function instance_watch_f()
3466-
assert(not M.instance_watch_service)
34673466
local service = lservice_info.new('instance_watch')
34683467
M.instance_watch_service = service
34693468
local ok, err = pcall(instance_watch_service_f, service)
3470-
assert(M.instance_watch_service == service)
3471-
M.instance_watch_service = nil
3469+
if M.instance_watch_service == service then
3470+
M.instance_watch_service = nil
3471+
end
34723472
if not ok then
34733473
error(err)
34743474
end

0 commit comments

Comments
 (0)