fun(A) when is_integer(A) andalso A >= 0 -> A end, ?MAXITEMS),
MaxSubsNode = gen_mod:get_opt(max_subscriptions_node, Opts,
fun(A) when is_integer(A) andalso A >= 0 -> A end, undefined),
- case gen_mod:db_type(ServerHost, ?MODULE) of
- mnesia -> init_mnesia(Host, ServerHost, Opts);
- _ -> ok
- end,
{Plugins, NodeTree, PepMapping} = init_plugins(Host, ServerHost, Opts),
DefaultModule = plugin(Host, hd(Plugins)),
BaseOptions = DefaultModule:options(),
end
end, Plugins).
-init_mnesia(Host, ServerHost, Opts) ->
- pubsub_index:init(Host, ServerHost, Opts),
- spawn(fun() ->
- %% maybe upgrade db. this can take time when upgrading existing
- %% data from ejabberd 2.1.x, so we don't want this to block
- %% calling gen_server:start
- pubsub_migrate:update_node_database(Host, ServerHost),
- pubsub_migrate:update_state_database(Host, ServerHost),
- pubsub_migrate:update_item_database(Host, ServerHost),
- pubsub_migrate:update_lastitem_database(Host, ServerHost)
- end).
-
%% @doc Call the init/1 function for each plugin declared in the config file.
%% The default plugin module is implicit.
%% <p>The Erlang code for the plugin is located in a module called
_ = '_'})).
update_state_database(_Host, _ServerHost) ->
- case catch mnesia:table_info(pubsub_state, attributes) of
- [stateid, nodeidx, items, affiliation, subscriptions] ->
- ?INFO_MSG("Upgrading pubsub states table...", []),
- F = fun ({pubsub_state, {{U,S,R}, NodeID}, _NodeIdx, Items, Aff, Sub}, Acc) ->
- JID = {U,S,R},
- Subs = case Sub of
- none ->
- [];
- [] ->
- [];
- _ ->
- SubID = pubsub_subscription:make_subid(),
- [{Sub, SubID}]
- end,
- NewState = #pubsub_state{stateid = {JID, NodeID},
- items = Items,
- affiliation = Aff,
- subscriptions = Subs},
- [NewState | Acc]
- end,
- {atomic, NewRecs} = mnesia:transaction(fun mnesia:foldl/3,
- [F, [], pubsub_state]),
- {atomic, ok} = mnesia:delete_table(pubsub_state),
- {atomic, ok} = ejabberd_mnesia:create(?MODULE, pubsub_state,
- [{disc_copies, [node()]},
- {attributes, record_info(fields, pubsub_state)}]),
- FNew = fun () ->
- lists:foreach(fun mnesia:write/1, NewRecs)
- end,
- case mnesia:transaction(FNew) of
- {atomic, Result} ->
- ?INFO_MSG("Pubsub states table upgraded: ~p",
- [Result]);
- {aborted, Reason} ->
- ?ERROR_MSG("Problem upgrading Pubsub states table:~n~p",
- [Reason])
- end;
- _ ->
- ok
- end,
+% useless starting from ejabberd 17.04
+% case catch mnesia:table_info(pubsub_state, attributes) of
+% [stateid, nodeidx, items, affiliation, subscriptions] ->
+% ?INFO_MSG("Upgrading pubsub states table...", []),
+% F = fun ({pubsub_state, {{U,S,R}, NodeID}, _NodeIdx, Items, Aff, Sub}, Acc) ->
+% JID = {U,S,R},
+% Subs = case Sub of
+% none ->
+% [];
+% [] ->
+% [];
+% _ ->
+% SubID = pubsub_subscription:make_subid(),
+% [{Sub, SubID}]
+% end,
+% NewState = #pubsub_state{stateid = {JID, NodeID},
+% items = Items,
+% affiliation = Aff,
+% subscriptions = Subs},
+% [NewState | Acc]
+% end,
+% {atomic, NewRecs} = mnesia:transaction(fun mnesia:foldl/3,
+% [F, [], pubsub_state]),
+% {atomic, ok} = mnesia:delete_table(pubsub_state),
+% {atomic, ok} = ejabberd_mnesia:create(?MODULE, pubsub_state,
+% [{disc_copies, [node()]},
+% {attributes, record_info(fields, pubsub_state)}]),
+% FNew = fun () ->
+% lists:foreach(fun mnesia:write/1, NewRecs)
+% end,
+% case mnesia:transaction(FNew) of
+% {atomic, Result} ->
+% ?INFO_MSG("Pubsub states table upgraded: ~p",
+% [Result]);
+% {aborted, Reason} ->
+% ?ERROR_MSG("Problem upgrading Pubsub states table:~n~p",
+% [Reason])
+% end;
+% _ ->
+% ok
+% end,
convert_list_subscriptions(),
convert_list_states().