Skip to content

Commit 06573f3

Browse files
author
Maxim Uymin
committed
NOTASK: make tarantool-queue reloadable with moonlibs/package.reload
1 parent a8f5e6b commit 06573f3

File tree

6 files changed

+27
-8
lines changed

6 files changed

+27
-8
lines changed

queue/abstract/driver/fifottl.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ function tube.new(space, on_task_change, opts)
196196
}, { __index = method })
197197

198198
self.cond = qc.waiter()
199-
self.fiber = fiber.create(fifottl_fiber, self)
199+
self.fiber = util.background_fiber(fifottl_fiber, self)
200200
self.sync_chan = fiber.channel()
201201

202202
return self
@@ -412,7 +412,7 @@ function method.start(self)
412412
if self.fiber then
413413
return
414414
end
415-
self.fiber = fiber.create(fifottl_fiber, self)
415+
self.fiber = util.background_fiber(fifottl_fiber, self)
416416
end
417417

418418
function method.stop(self)

queue/abstract/driver/utubettl.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ function tube.new(space, on_task_change, opts)
383383
}, { __index = method })
384384

385385
self.cond = qc.waiter()
386-
self.fiber = fiber.create(utubettl_fiber, self)
386+
self.fiber = util.background_fiber(utubettl_fiber, self)
387387
self.sync_chan = fiber.channel(1)
388388

389389
return self
@@ -741,7 +741,7 @@ function method.start(self)
741741
if self.fiber then
742742
return
743743
end
744-
self.fiber = fiber.create(utubettl_fiber, self)
744+
self.fiber = util.background_fiber(utubettl_fiber, self)
745745
end
746746

747747
function method.stop(self)

queue/abstract/queue_session.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ end
171171

172172
--- Create an expiration fiber to cleanup expired sessions.
173173
local function create_expiration_fiber()
174-
local exp_fiber = fiber.create(function()
174+
local exp_fiber = util.background_fiber(function()
175175
fiber.self():name('queue_expiration_fiber')
176176
while true do
177177
if box.info.ro == false then

queue/abstract/queue_state.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
local log = require('log')
44
local fiber = require('fiber')
5+
local util = require('queue.util')
56

67
--[[ States switching scheme:
78
@@ -62,7 +63,7 @@ end
6263
local function create_state_fiber(on_state_change_cb)
6364
log.info('Started queue state fiber')
6465

65-
fiber.create(function()
66+
util.background_fiber(function()
6667
fiber.self():name('queue_state_fiber')
6768
while true do
6869
if current == queue_state.states.WAITING then

queue/init.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ local abstract = require('queue.abstract')
44
local queue_state = require('queue.abstract.queue_state')
55
local qc = require('queue.compat')
66
local queue = nil
7+
local util = require('queue.util')
78

89
-- load all core drivers
910
local core_drivers = {
@@ -107,7 +108,7 @@ local function wrap_box_cfg()
107108
cfg_mt.__call = cfg_call_wrapper
108109
else
109110
-- Wait for the rw state.
110-
fiber.new(rw_waiter)
111+
util.background_fiber(rw_waiter)
111112
end
112113
else
113114
error('The box.cfg type is unexpected: ' .. type(box.cfg))

queue/util.lua

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ local function event_time(tm)
3434
return tm
3535
end
3636

37+
local function background_fiber(func, ...)
38+
local fib = fiber.new(func, ...)
39+
fib:set_joinable(true)
40+
41+
if not package.reload then
42+
return fib
43+
end
44+
45+
package.reload:register(function()
46+
fib:cancel()
47+
fib:join()
48+
end)
49+
50+
return fib
51+
end
52+
3753
local util = {
3854
MAX_TIMEOUT = MAX_TIMEOUT,
3955
TIMEOUT_INFINITY = TIMEOUT_INFINITY
@@ -42,7 +58,8 @@ local util = {
4258
-- methods
4359
local method = {
4460
time = time,
45-
event_time = event_time
61+
event_time = event_time,
62+
background_fiber = background_fiber,
4663
}
4764

4865
return setmetatable(util, { __index = method })

0 commit comments

Comments
 (0)