diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-04-23 16:37:58 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-04-23 16:37:58 +0300 |
commit | 9a93acc62af1a63e0e2b1b23cd60698cbd1f6f92 (patch) | |
tree | 0a9a4c0f773dc1f9a21dca1b1ed7ef283aaf8855 /src/mod_last_mnesia.erl | |
parent | Use 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.erl | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src/mod_last_mnesia.erl b/src/mod_last_mnesia.erl index 1ca9fb112..ab8f47478 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. |