summaryrefslogtreecommitdiff
path: root/src/mod_last_mnesia.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-04-23 16:37:58 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-04-23 16:37:58 +0300
commit9a93acc62af1a63e0e2b1b23cd60698cbd1f6f92 (patch)
tree0a9a4c0f773dc1f9a21dca1b1ed7ef283aaf8855 /src/mod_last_mnesia.erl
parentUse round-robin algorithm when selecting worker from DB pool (diff)
Improve Mnesia tables creation and transformation
Diffstat (limited to 'src/mod_last_mnesia.erl')
-rw-r--r--src/mod_last_mnesia.erl34
1 files changed, 14 insertions, 20 deletions
diff --git a/src/mod_last_mnesia.erl b/src/mod_last_mnesia.erl
index 1ca9fb11..ab8f4747 100644
--- a/src/mod_last_mnesia.erl
+++ b/src/mod_last_mnesia.erl
@@ -28,6 +28,7 @@
%% API
-export([init/2, import/2, get_last/2, store_last_info/4, remove_user/2]).
+-export([need_transform/1, transform/1]).
-include("mod_last.hrl").
-include("logger.hrl").
@@ -37,10 +38,8 @@
%%%===================================================================
init(_Host, _Opts) ->
ejabberd_mnesia:create(?MODULE, last_activity,
- [{disc_copies, [node()]},
- {attributes,
- record_info(fields, last_activity)}]),
- update_table().
+ [{disc_copies, [node()]},
+ {attributes, record_info(fields, last_activity)}]).
get_last(LUser, LServer) ->
case mnesia:dirty_read(last_activity, {LUser, LServer}) of
@@ -68,22 +67,17 @@ remove_user(LUser, LServer) ->
import(_LServer, #last_activity{} = LA) ->
mnesia:dirty_write(LA).
+need_transform(#last_activity{us = {U, S}, status = Status})
+ when is_list(U) orelse is_list(S) orelse is_list(Status) ->
+ ?INFO_MSG("Mnesia table 'last_activity' will be converted to binary", []),
+ true;
+need_transform(_) ->
+ false.
+
+transform(#last_activity{us = {U, S}, status = Status} = R) ->
+ R#last_activity{us = {iolist_to_binary(U), iolist_to_binary(S)},
+ status = iolist_to_binary(Status)}.
+
%%%===================================================================
%%% Internal functions
%%%===================================================================
-update_table() ->
- Fields = record_info(fields, last_activity),
- case mnesia:table_info(last_activity, attributes) of
- Fields ->
- ejabberd_config:convert_table_to_binary(
- last_activity, Fields, set,
- fun(#last_activity{us = {U, _}}) -> U end,
- fun(#last_activity{us = {U, S}, status = Status} = R) ->
- R#last_activity{us = {iolist_to_binary(U),
- iolist_to_binary(S)},
- status = iolist_to_binary(Status)}
- end);
- _ ->
- ?INFO_MSG("Recreating last_activity table", []),
- mnesia:transform_table(last_activity, ignore, Fields)
- end.