summaryrefslogtreecommitdiff
path: root/src/mod_private_riak.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-05-22 10:34:57 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-05-22 10:34:57 +0300
commit3a96d72a7f8aec54ab19e1b88968b48d714ce01e (patch)
tree8ecd6478a5f061d41985aaae17b01598b847d53e /src/mod_private_riak.erl
parentDon't store messages via a single process (diff)
Implement cache for mod_private
Diffstat (limited to 'src/mod_private_riak.erl')
-rw-r--r--src/mod_private_riak.erl31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mod_private_riak.erl b/src/mod_private_riak.erl
index 5c518557..be175f07 100644
--- a/src/mod_private_riak.erl
+++ b/src/mod_private_riak.erl
@@ -27,7 +27,7 @@
-behaviour(mod_private).
%% API
--export([init/2, set_data/3, get_data/3, get_all_data/2, remove_user/2,
+-export([init/2, set_data/3, get_data/3, get_all_data/2, del_data/2,
import/3]).
-include("xmpp.hrl").
@@ -40,37 +40,42 @@ init(_Host, _Opts) ->
ok.
set_data(LUser, LServer, Data) ->
- lists:foreach(
- fun({XMLNS, El}) ->
+ lists:foldl(
+ fun(_, {error, _} = Err) ->
+ Err;
+ ({XMLNS, El}, _) ->
ejabberd_riak:put(#private_storage{usns = {LUser, LServer, XMLNS},
xml = El},
private_storage_schema(),
[{'2i', [{<<"us">>, {LUser, LServer}}]}])
- end, Data),
- {atomic, ok}.
+ end, ok, Data).
get_data(LUser, LServer, XMLNS) ->
case ejabberd_riak:get(private_storage, private_storage_schema(),
{LUser, LServer, XMLNS}) of
{ok, #private_storage{xml = El}} ->
{ok, El};
- _ ->
- error
+ {error, notfound} ->
+ error;
+ Err ->
+ Err
end.
get_all_data(LUser, LServer) ->
case ejabberd_riak:get_by_index(
private_storage, private_storage_schema(),
<<"us">>, {LUser, LServer}) of
+ {ok, []} ->
+ error;
{ok, Res} ->
- [El || #private_storage{xml = El} <- Res];
- _ ->
- []
+ {ok, [El || #private_storage{xml = El} <- Res]};
+ Err ->
+ Err
end.
-remove_user(LUser, LServer) ->
- {atomic, ejabberd_riak:delete_by_index(private_storage,
- <<"us">>, {LUser, LServer})}.
+del_data(LUser, LServer) ->
+ ejabberd_riak:delete_by_index(private_storage,
+ <<"us">>, {LUser, LServer}).
import(LServer, <<"private_storage">>,
[LUser, XMLNS, XML, _TimeStamp]) ->