mirror of
https://github.com/processone/ejabberd.git
synced 2024-10-01 14:44:07 +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:
parent
89ea1dd1c4
commit
ff2050b301
@ -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};
|
||||
|
@ -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) ->
|
||||
|
@ -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) ->
|
||||
|
@ -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) ->
|
||||
|
Loading…
Reference in New Issue
Block a user