diff options
Diffstat (limited to 'src/ejabberd_sm_redis.erl')
-rw-r--r-- | src/ejabberd_sm_redis.erl | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/ejabberd_sm_redis.erl b/src/ejabberd_sm_redis.erl index ec1fc1d1b..a93be86bb 100644 --- a/src/ejabberd_sm_redis.erl +++ b/src/ejabberd_sm_redis.erl @@ -40,6 +40,7 @@ -include("logger.hrl"). -define(SM_KEY, <<"ejabberd:sm">>). +-define(MIN_REDIS_VERSION, <<"3.2.0">>). -record(state, {}). %%%=================================================================== @@ -142,8 +143,10 @@ get_sessions(LUser, LServer) -> %%%=================================================================== init([]) -> ejabberd_redis:subscribe([?SM_KEY]), - clean_table(), - {ok, #state{}}. + case clean_table() of + ok -> {ok, #state{}}; + {error, Why} -> {stop, Why} + end. handle_call(_Request, _From, State) -> Reply = ok, @@ -240,7 +243,20 @@ clean_node_sessions(Node, Host, SHA) -> load_script() -> case misc:read_lua("redis_sm.lua") of {ok, Data} -> - ejabberd_redis:script_load(Data); + case ejabberd_redis:info(server) of + {ok, Info} -> + case proplists:get_value(redis_version, Info) of + V when V >= ?MIN_REDIS_VERSION -> + ejabberd_redis:script_load(Data); + V -> + ?CRITICAL_MSG("Unsupported Redis version: ~s. " + "The version must be ~s or above", + [V, ?MIN_REDIS_VERSION]), + {error, unsupported_redis_version} + end; + {error, _} = Err -> + Err + end; {error, _} = Err -> Err end. |