Skip to content

Commit 9ff105b

Browse files
0x501DLeonidVas
authored andcommitted
session: move inactive_sessions to space
Queue states needs inactive_sessions on both master and replica nodes. Part of #120
1 parent 89033ad commit 9ff105b

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

queue/abstract/queue_session.lua

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ local str_type = qc.str_type
1010

1111
local queue_session = {}
1212

13-
-- Sessions that don't have any active connections.
14-
local inactive_sessions = {}
15-
1613
--- Create everything that's needed to work with "shared" sessions.
1714
local function identification_init()
1815
local queue_session_ids = box.space._queue_session_ids
@@ -36,16 +33,36 @@ local function identification_init()
3633
unique = false
3734
})
3835
end
36+
37+
local queue_inactive_sessions = box.space._queue_inactive_sessions
38+
if queue_inactive_sessions == nil then
39+
queue_inactive_sessions = box.schema.create_space('_queue_inactive_sessions', {
40+
temporary = false,
41+
format = {
42+
{ name = 'uuid', type = str_type() },
43+
{ name = 'exp_time', type = num_type() }
44+
}
45+
})
46+
47+
queue_inactive_sessions:create_index('uuid', {
48+
type = 'tree',
49+
parts = { 1, str_type() },
50+
unique = true
51+
})
52+
end
3953
end
4054

4155
local function cleanup_inactive_sessions()
4256
local cur_time = util.time()
43-
for session_uuid, exp_time in pairs(inactive_sessions) do
57+
58+
for _, val in box.space._queue_inactive_sessions:pairs() do
59+
local session_uuid = val[1]
60+
local exp_time = val[2]
4461
if cur_time >= exp_time then
4562
if queue_session._on_session_remove ~= nil then
4663
queue_session._on_session_remove(session_uuid)
4764
end
48-
inactive_sessions[session_uuid] = nil
65+
box.space._queue_inactive_sessions:delete{session_uuid}
4966
end
5067
end
5168
end
@@ -75,6 +92,7 @@ end
7592
-- an error will be thrown.
7693
local function identify(conn_id, session_uuid)
7794
local queue_session_ids = box.space._queue_session_ids
95+
local queue_inactive_sessions = box.space._queue_inactive_sessions
7896
local session_ids = queue_session_ids:get(conn_id)
7997
local cur_uuid = session_ids and session_ids[2]
8098

@@ -95,7 +113,8 @@ local function identify(conn_id, session_uuid)
95113
-- Check that a session with this uuid exists.
96114
local ids_by_uuid = queue_session_ids.index.uuid:select(
97115
session_uuid, { limit = 1 })[1]
98-
if ids_by_uuid == nil and inactive_sessions[session_uuid] == nil then
116+
local inactive_session = queue_inactive_sessions:get(session_uuid)
117+
if ids_by_uuid == nil and inactive_session == nil then
99118
error('The UUID ' .. uuid.frombin(session_uuid):str() ..
100119
' is unknown.')
101120
end
@@ -110,7 +129,7 @@ local function identify(conn_id, session_uuid)
110129
end
111130

112131
-- Exclude the session from inactive.
113-
inactive_sessions[cur_uuid] = nil
132+
queue_inactive_sessions:delete{cur_uuid}
114133

115134
return cur_uuid
116135
end
@@ -126,6 +145,7 @@ end
126145
-- release its tasks if necessary.
127146
local function disconnect(conn_id)
128147
local queue_session_ids = box.space._queue_session_ids
148+
local queue_inactive_sessions = box.space._queue_inactive_sessions
129149
local session_uuid = queue_session.identify(conn_id)
130150

131151
queue_session_ids:delete{conn_id}
@@ -137,7 +157,7 @@ local function disconnect(conn_id)
137157
if session_ids == nil then
138158
local ttr = queue_session.cfg['ttr'] or 0
139159
if ttr > 0 then
140-
inactive_sessions[session_uuid] = util.event_time(ttr)
160+
queue_inactive_sessions:insert{session_uuid, util.event_time(ttr)}
141161
elseif queue_session._on_session_remove ~= nil then
142162
queue_session._on_session_remove(session_uuid)
143163
end
@@ -147,6 +167,8 @@ end
147167
local function grant(user)
148168
box.schema.user.grant(user, 'read, write', 'space', '_queue_session_ids',
149169
{ if_not_exists = true })
170+
box.schema.user.grant(user, 'read, write', 'space', '_queue_inactive_sessions',
171+
{ if_not_exists = true })
150172
end
151173

152174
local function start()

0 commit comments

Comments
 (0)