mirror of
https://github.com/processone/ejabberd
synced 2025-10-04 18:29:20 +02:00
Use cache in front of Redis/SQL RAM backends
This commit is contained in:
parent
aa7d5df6a0
commit
e40baf0bda
26 changed files with 1155 additions and 384 deletions
|
@ -31,11 +31,10 @@
|
|||
%% API
|
||||
-export([init/0,
|
||||
set_session/1,
|
||||
delete_session/4,
|
||||
delete_session/1,
|
||||
get_sessions/0,
|
||||
get_sessions/1,
|
||||
get_sessions/2,
|
||||
get_sessions/3]).
|
||||
get_sessions/2]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
-include("ejabberd_sm.hrl").
|
||||
|
@ -81,30 +80,21 @@ set_session(#session{sid = {Now, Pid}, usr = {U, LServer, R},
|
|||
ok ->
|
||||
ok;
|
||||
Err ->
|
||||
?ERROR_MSG("failed to update 'sm' table: ~p", [Err])
|
||||
?ERROR_MSG("failed to update 'sm' table: ~p", [Err]),
|
||||
{error, db_failure}
|
||||
end.
|
||||
|
||||
delete_session(_LUser, LServer, _LResource, {Now, Pid}) ->
|
||||
delete_session(#session{usr = {_, LServer, _}, sid = {Now, Pid}}) ->
|
||||
TS = now_to_timestamp(Now),
|
||||
PidS = list_to_binary(erlang:pid_to_list(Pid)),
|
||||
case ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("select @(usec)d, @(pid)s, @(node)s, @(username)s,"
|
||||
" @(resource)s, @(priority)s, @(info)s "
|
||||
"from sm where usec=%(TS)d and pid=%(PidS)s")) of
|
||||
{selected, [Row]} ->
|
||||
ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("delete from sm"
|
||||
" where usec=%(TS)d and pid=%(PidS)s")),
|
||||
try {ok, row_to_session(LServer, Row)}
|
||||
catch _:{bad_node, _} -> {error, notfound}
|
||||
end;
|
||||
{selected, []} ->
|
||||
{error, notfound};
|
||||
?SQL("delete from sm where usec=%(TS)d and pid=%(PidS)s")) of
|
||||
{updated, _} ->
|
||||
ok;
|
||||
Err ->
|
||||
?ERROR_MSG("failed to delete from 'sm' table: ~p", [Err]),
|
||||
{error, notfound}
|
||||
{error, db_failure}
|
||||
end.
|
||||
|
||||
get_sessions() ->
|
||||
|
@ -137,33 +127,15 @@ get_sessions(LUser, LServer) ->
|
|||
" @(resource)s, @(priority)s, @(info)s from sm"
|
||||
" where username=%(LUser)s")) of
|
||||
{selected, Rows} ->
|
||||
lists:flatmap(
|
||||
fun(Row) ->
|
||||
try [row_to_session(LServer, Row)]
|
||||
catch _:{bad_node, _} -> []
|
||||
end
|
||||
end, Rows);
|
||||
{ok, lists:flatmap(
|
||||
fun(Row) ->
|
||||
try [row_to_session(LServer, Row)]
|
||||
catch _:{bad_node, _} -> []
|
||||
end
|
||||
end, Rows)};
|
||||
Err ->
|
||||
?ERROR_MSG("failed to select from 'sm' table: ~p", [Err]),
|
||||
[]
|
||||
end.
|
||||
|
||||
get_sessions(LUser, LServer, LResource) ->
|
||||
case ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("select @(usec)d, @(pid)s, @(node)s, @(username)s,"
|
||||
" @(resource)s, @(priority)s, @(info)s from sm"
|
||||
" where username=%(LUser)s and resource=%(LResource)s")) of
|
||||
{selected, Rows} ->
|
||||
lists:flatmap(
|
||||
fun(Row) ->
|
||||
try [row_to_session(LServer, Row)]
|
||||
catch _:{bad_node, _} -> []
|
||||
end
|
||||
end, Rows);
|
||||
Err ->
|
||||
?ERROR_MSG("failed to select from 'sm' table: ~p", [Err]),
|
||||
[]
|
||||
{error, db_failure}
|
||||
end.
|
||||
|
||||
%%%===================================================================
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue