aboutsummaryrefslogtreecommitdiffstats
path: root/lualib/lua_redis.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lualib/lua_redis.lua')
-rw-r--r--lualib/lua_redis.lua60
1 files changed, 34 insertions, 26 deletions
diff --git a/lualib/lua_redis.lua b/lualib/lua_redis.lua
index 2a43a915c..47da29899 100644
--- a/lualib/lua_redis.lua
+++ b/lualib/lua_redis.lua
@@ -39,25 +39,39 @@ local common_schema = ts.shape {
sentinel_password = ts.string:is_optional(),
}
-local config_schema = -- Allow separate read/write servers to allow usage in the `extra_fields`
-ts.shape({
+local read_schema = lutil.table_merge({
read_servers = ts.string + ts.array_of(ts.string),
-}, { extra_fields = common_schema }) +
- ts.shape({
- write_servers = ts.string + ts.array_of(ts.string),
- }, { extra_fields = common_schema }) +
- ts.shape({
- read_servers = ts.string + ts.array_of(ts.string),
- write_servers = ts.string + ts.array_of(ts.string),
- }, { extra_fields = common_schema }) +
- ts.shape({
- servers = ts.string + ts.array_of(ts.string),
- }, { extra_fields = common_schema }) +
- ts.shape({
- server = ts.string + ts.array_of(ts.string),
- }, { extra_fields = common_schema })
-
-exports.config_schema = config_schema
+}, common_schema)
+
+local write_schema = lutil.table_merge({
+ write_servers = ts.string + ts.array_of(ts.string),
+}, common_schema)
+
+local rw_schema = lutil.table_merge({
+ read_servers = ts.string + ts.array_of(ts.string),
+ write_servers = ts.string + ts.array_of(ts.string),
+}, common_schema)
+
+local servers_schema = lutil.table_merge({
+ servers = ts.string + ts.array_of(ts.string),
+}, common_schema)
+
+local server_schema = lutil.table_merge({
+ server = ts.string + ts.array_of(ts.string),
+}, common_schema)
+
+local generate_schema = function(external)
+ return ts.one_of {
+ ts.shape(external),
+ ts.shape(lutil.table_merge(read_schema, external)),
+ ts.shape(lutil.table_merge(write_schema, external)),
+ ts.shape(lutil.table_merge(rw_schema, external)),
+ ts.shape(lutil.table_merge(servers_schema, external)),
+ ts.shape(lutil.table_merge(server_schema, external)),
+ }
+end
+
+exports.generate_schema = generate_schema
local function redis_query_sentinel(ev_base, params, initialised)
local function flatten_redis_table(tbl)
@@ -1122,20 +1136,14 @@ local function script_set_loaded(script)
end
local function prepare_redis_call(script)
- local function merge_tables(t1, t2)
- for k, v in pairs(t2) do
- t1[k] = v
- end
- end
-
local servers = {}
local options = {}
if script.redis_params.read_servers then
- merge_tables(servers, script.redis_params.read_servers:all_upstreams())
+ lutil.table_merge(servers, script.redis_params.read_servers:all_upstreams())
end
if script.redis_params.write_servers then
- merge_tables(servers, script.redis_params.write_servers:all_upstreams())
+ lutil.table_merge(servers, script.redis_params.write_servers:all_upstreams())
end
-- Call load script on each server, set loaded flag