From e3085a4d48bb664a5be9019fde8b19a127eed3fb Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Wed, 12 Sep 2012 15:08:39 +0200 Subject: [PATCH] put cleaning code to pubsub_debug --- src/mod_pubsub/pubsub_clean.erl | 57 --------------------------------- src/mod_pubsub/pubsub_debug.erl | 27 ++++++++++++++++ 2 files changed, 27 insertions(+), 57 deletions(-) delete mode 100644 src/mod_pubsub/pubsub_clean.erl diff --git a/src/mod_pubsub/pubsub_clean.erl b/src/mod_pubsub/pubsub_clean.erl deleted file mode 100644 index 43722f394..000000000 --- a/src/mod_pubsub/pubsub_clean.erl +++ /dev/null @@ -1,57 +0,0 @@ --module(pubsub_clean). - --define(TIMEOUT, 1000 * 600). - --export([start/0, loop/0, purge/0, offline/1]). - -start() -> - Pid = spawn(?MODULE, loop, []), - register(pubsub_clean, Pid), - Pid. - -loop() -> - receive purge -> purge() after ?TIMEOUT -> purge() end, - loop(). - -purge() -> - Sessions = lists:sum([mnesia:table_info(session, size) - | [rpc:call(N, mnesia, table_info, [session, size]) - || N <- nodes()]]), - Subscriptions = mnesia:table_info(pubsub_state, size), - if Subscriptions > Sessions + 500 -> - lists:foreach(fun (K) -> - [N] = mnesia:dirty_read({pubsub_node, K}), - I = element(3, N), - lists:foreach(fun (JID) -> - case - mnesia:dirty_read({pubsub_state, - {JID, - I}}) - of - [{pubsub_state, K, _, - _, _, - [{subscribed, - S}]}] -> - mnesia:dirty_delete({pubsub_subscription, - S}); - _ -> ok - end, - mnesia:dirty_delete({pubsub_state, - {JID, - I}}) - end, - offline(pubsub_debug:subscribed(I))) - end, - mnesia:dirty_all_keys(pubsub_node)); - true -> ok - end. - -offline(Jids) -> - lists:filter(fun ({U, S, <<"">>}) -> - ejabberd_sm:get_user_resources(U, S) == []; - ({U, S, R}) -> - not - lists:member(R, ejabberd_sm:get_user_resources(U, S)) - end, - Jids).%%ejabberd_cluster:get_node({LUser, LServer}) - diff --git a/src/mod_pubsub/pubsub_debug.erl b/src/mod_pubsub/pubsub_debug.erl index 3d4740433..5734a0932 100644 --- a/src/mod_pubsub/pubsub_debug.erl +++ b/src/mod_pubsub/pubsub_debug.erl @@ -107,6 +107,16 @@ subscribed(NodeId) -> || S <- states(NodeId), S#pubsub_state.subscriptions =/= []]. +offline_subscribers(NodeId) -> + lists:filter(fun ({U, S, <<"">>}) -> + ejabberd_sm:get_user_resources(U, S) == []; + ({U, S, R}) -> + not + lists:member(R, ejabberd_sm:get_user_resources(U, S)) + end, + subscribed(NodeId)). + + owners(NodeId) -> [stateid(S) || S <- states(NodeId), @@ -254,3 +264,20 @@ pep_subscriptions(LUser, LServer, LResource) -> end; _ -> [] end. + +purge_offline_subscriptions() -> + lists:foreach(fun (K) -> + [N] = mnesia:dirty_read({pubsub_node, K}), + I = element(3, N), + lists:foreach(fun (JID) -> + case mnesia:dirty_read({pubsub_state, {JID, I}}) of + [{pubsub_state, K, _, _, _, [{subscribed, S}]}] -> + mnesia:dirty_delete({pubsub_subscription, S}); + _ -> + ok + end, + mnesia:dirty_delete({pubsub_state, {JID, I}}) + end, + offline_subscribers(I)) + end, + mnesia:dirty_all_keys(pubsub_node)).