mirror of
https://github.com/processone/ejabberd.git
synced 2024-07-06 23:22:36 +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};
|
{noreply, State};
|
||||||
handle_info({nodedown, Node, _}, State) ->
|
handle_info({nodedown, Node, _}, State) ->
|
||||||
?INFO_MSG("node ~p goes down", [Node]),
|
?INFO_MSG("node ~p goes down", [Node]),
|
||||||
|
ejabberd_hooks:run(node_down, [Node]),
|
||||||
delete_node(?HASHTBL, Node),
|
delete_node(?HASHTBL, Node),
|
||||||
delete_node(?HASHTBL_NEW, Node),
|
delete_node(?HASHTBL_NEW, Node),
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
|
@ -395,7 +395,12 @@ node_up(_Node) ->
|
||||||
|
|
||||||
node_down(Node) when Node == node() ->
|
node_down(Node) when Node == node() ->
|
||||||
copy_sessions(mnesia:dirty_first(session));
|
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('$end_of_table') -> ok;
|
||||||
copy_sessions(Key) ->
|
copy_sessions(Key) ->
|
||||||
|
|
|
@ -54,8 +54,8 @@
|
||||||
opts = [] :: list() | '_'}).
|
opts = [] :: list() | '_'}).
|
||||||
|
|
||||||
-record(muc_online_room,
|
-record(muc_online_room,
|
||||||
{name_host = {<<"">>, <<"">>} :: {binary(), binary()} | '$1',
|
{name_host = {<<"">>, <<"">>} :: {binary(), binary()} | '$1' | '_',
|
||||||
pid = self() :: pid() | '$2' | '_'}).
|
pid = self() :: pid() | '$1' | '$2' | '_'}).
|
||||||
|
|
||||||
-record(muc_registered,
|
-record(muc_registered,
|
||||||
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary(), binary()}, binary()} | '$1',
|
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary(), binary()}, binary()} | '$1',
|
||||||
|
@ -272,7 +272,12 @@ node_up(_Node) ->
|
||||||
|
|
||||||
node_down(Node) when Node == node() ->
|
node_down(Node) when Node == node() ->
|
||||||
copy_rooms(mnesia:dirty_first(muc_online_room));
|
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('$end_of_table') -> ok;
|
||||||
copy_rooms(Key) ->
|
copy_rooms(Key) ->
|
||||||
|
|
|
@ -45,8 +45,8 @@
|
||||||
|
|
||||||
-include("bosh.hrl").
|
-include("bosh.hrl").
|
||||||
|
|
||||||
-record(bosh, {sid = <<"">> :: binary() | '$1',
|
-record(bosh, {sid = <<"">> :: binary() | '$1' | '_',
|
||||||
pid = self() :: pid() | '$2'}).
|
pid = self() :: pid() | '$1' | '$2'}).
|
||||||
|
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% API
|
%%% API
|
||||||
|
@ -136,7 +136,12 @@ node_up(_Node) ->
|
||||||
|
|
||||||
node_down(Node) when Node == node() ->
|
node_down(Node) when Node == node() ->
|
||||||
copy_entries(mnesia:dirty_first(bosh));
|
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('$end_of_table') -> ok;
|
||||||
copy_entries(Key) ->
|
copy_entries(Key) ->
|
||||||
|
|
Loading…
Reference in New Issue
Block a user