Skip to content

Commit 9132896

Browse files
internal: rework replicasets schema reload
This patch is the groundwork for vshard groups and custom routers support. After this patch, schema reload works per vshard router object. Test runs have shown that this patch do not affects the performance of crud requests. Part of #44
1 parent 2519df9 commit 9132896

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

crud/common/schema.lua

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,30 @@ local function call_reload_schema(replicasets)
4949
return true
5050
end
5151

52-
local reload_in_progress = false
53-
local reload_schema_cond = fiber.cond()
52+
local reload_in_progress = {}
53+
local reload_schema_cond = {}
5454

55-
local function reload_schema(replicasets)
56-
if reload_in_progress then
57-
if not reload_schema_cond:wait(const.RELOAD_SCHEMA_TIMEOUT) then
55+
local function reload_schema(vshard_router)
56+
local replicasets = vshard_router:routeall()
57+
local vshard_router_name = vshard_router.name
58+
59+
if reload_in_progress[vshard_router_name] == true then
60+
if not reload_schema_cond[vshard_router_name]:wait(const.RELOAD_SCHEMA_TIMEOUT) then
5861
return nil, ReloadSchemaError:new('Waiting for schema to be reloaded is timed out')
5962
end
6063
else
61-
reload_in_progress = true
64+
reload_in_progress[vshard_router_name] = true
65+
if reload_schema_cond[vshard_router_name] == nil then
66+
reload_schema_cond[vshard_router_name] = fiber.cond()
67+
end
6268

6369
local ok, err = call_reload_schema(replicasets)
6470
if not ok then
6571
return nil, err
6672
end
6773

68-
reload_schema_cond:broadcast()
69-
reload_in_progress = false
74+
reload_schema_cond[vshard_router_name]:broadcast()
75+
reload_in_progress[vshard_router_name] = false
7076
end
7177

7278
return true
@@ -92,7 +98,7 @@ function schema.wrap_func_reload(func, ...)
9298
end
9399

94100
local vshard_router = vshard.router.static
95-
local ok, reload_schema_err = reload_schema(vshard_router:routeall())
101+
local ok, reload_schema_err = reload_schema(vshard_router)
96102
if not ok then
97103
log.warn("Failed to reload schema: %s", reload_schema_err)
98104
break

0 commit comments

Comments
 (0)