24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-30 23:02:00 +02:00

Clean tables from remote pids when their node goes down

Conflicts:

	src/ejabberd_sm.erl
	src/mod_muc/mod_muc.erl
	src/web/mod_bosh.erl
This commit is contained in:
Evgeniy Khramtsov 2012-11-15 15:00:51 +10:00
parent 89ea1dd1c4
commit ff2050b301
4 changed files with 23 additions and 7 deletions

View File

@ -195,6 +195,7 @@ handle_info({node_down, Node}, State) ->
{noreply, State};
handle_info({nodedown, Node, _}, State) ->
?INFO_MSG("node ~p goes down", [Node]),
ejabberd_hooks:run(node_down, [Node]),
delete_node(?HASHTBL, Node),
delete_node(?HASHTBL_NEW, Node),
{noreply, State};

View File

@ -395,7 +395,12 @@ node_up(_Node) ->
node_down(Node) when Node == node() ->
copy_sessions(mnesia:dirty_first(session));
node_down(_) -> ok.
node_down(Node) ->
ets:select_delete(
session,
[{#session{sid = {'_', '$1'}, _ = '_'},
[{'==', {'node', '$1'}, Node}],
[true]}]).
copy_sessions('$end_of_table') -> ok;
copy_sessions(Key) ->

View File

@ -54,8 +54,8 @@
opts = [] :: list() | '_'}).
-record(muc_online_room,
{name_host = {<<"">>, <<"">>} :: {binary(), binary()} | '$1',
pid = self() :: pid() | '$2' | '_'}).
{name_host = {<<"">>, <<"">>} :: {binary(), binary()} | '$1' | '_',
pid = self() :: pid() | '$1' | '$2' | '_'}).
-record(muc_registered,
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary(), binary()}, binary()} | '$1',
@ -272,7 +272,12 @@ node_up(_Node) ->
node_down(Node) when Node == node() ->
copy_rooms(mnesia:dirty_first(muc_online_room));
node_down(_) -> ok.
node_down(Node) ->
ets:select_delete(
muc_online_room,
[{#muc_online_room{pid = '$1', _ = '_'},
[{'==', {'node', '$1'}, Node}],
[true]}]).
copy_rooms('$end_of_table') -> ok;
copy_rooms(Key) ->

View File

@ -45,8 +45,8 @@
-include("bosh.hrl").
-record(bosh, {sid = <<"">> :: binary() | '$1',
pid = self() :: pid() | '$2'}).
-record(bosh, {sid = <<"">> :: binary() | '$1' | '_',
pid = self() :: pid() | '$1' | '$2'}).
%%%----------------------------------------------------------------------
%%% API
@ -136,7 +136,12 @@ node_up(_Node) ->
node_down(Node) when Node == node() ->
copy_entries(mnesia:dirty_first(bosh));
node_down(_) -> ok.
node_down(Node) ->
ets:select_delete(
bosh,
[{#bosh{pid = '$1', _ = '_'},
[{'==', {'node', '$1'}, Node}],
[true]}]).
copy_entries('$end_of_table') -> ok;
copy_entries(Key) ->