mirror of
https://github.com/processone/ejabberd.git
synced 2024-07-14 23:44:18 +02:00
Get rid of pg2 in cluster nodes
This commit is contained in:
parent
2f16a160c0
commit
658ab235ba
|
@ -68,7 +68,8 @@ start(normal, _Args) ->
|
||||||
%ejabberd_debug:fprof_start(),
|
%ejabberd_debug:fprof_start(),
|
||||||
maybe_add_nameservers(),
|
maybe_add_nameservers(),
|
||||||
start_modules(),
|
start_modules(),
|
||||||
ejabberd_cluster:announce(),
|
{ok, Pid} = ejabberd_cluster:start(),
|
||||||
|
ejabberd_cluster:announce(Pid),
|
||||||
ejabberd_node_groups:start(),
|
ejabberd_node_groups:start(),
|
||||||
ejabberd_listener:start_listeners(),
|
ejabberd_listener:start_listeners(),
|
||||||
?INFO_MSG("ejabberd ~s is started in the node ~p", [?VERSION, node()]),
|
?INFO_MSG("ejabberd ~s is started in the node ~p", [?VERSION, node()]),
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
-behaviour(gen_server).
|
-behaviour(gen_server).
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([start_link/0, get_node/1, get_node_new/1, announce/0, shutdown/0,
|
-export([start_link/0, get_node/1, get_node_new/1, announce/1, shutdown/0,
|
||||||
node_id/0, get_node_by_id/1, get_nodes/0, rehash_timeout/0]).
|
node_id/0, get_node_by_id/1, get_nodes/0, rehash_timeout/0, start/0]).
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
||||||
|
@ -33,8 +33,17 @@
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
%% API
|
%% API
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
|
start() ->
|
||||||
|
ChildSpec = {?MODULE,
|
||||||
|
{?MODULE, start_link, []},
|
||||||
|
permanent,
|
||||||
|
brutal_kill,
|
||||||
|
worker,
|
||||||
|
[?MODULE]},
|
||||||
|
supervisor:start_child(ejabberd_sup, ChildSpec).
|
||||||
|
|
||||||
start_link() ->
|
start_link() ->
|
||||||
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
gen_server:start_link(?MODULE, [], []).
|
||||||
|
|
||||||
get_node(Key) ->
|
get_node(Key) ->
|
||||||
Hash = erlang:phash2(Key),
|
Hash = erlang:phash2(Key),
|
||||||
|
@ -48,8 +57,8 @@ get_nodes() ->
|
||||||
%% TODO
|
%% TODO
|
||||||
mnesia:system_info(running_db_nodes).
|
mnesia:system_info(running_db_nodes).
|
||||||
|
|
||||||
announce() ->
|
announce(Pid) ->
|
||||||
gen_server:call(?MODULE, announce, infinity).
|
gen_server:call(Pid, announce, infinity).
|
||||||
|
|
||||||
node_id() ->
|
node_id() ->
|
||||||
integer_to_list(erlang:phash2(node())).
|
integer_to_list(erlang:phash2(node())).
|
||||||
|
@ -90,8 +99,7 @@ init([]) ->
|
||||||
ets:new(?HASHTBL, [named_table, public, ordered_set]),
|
ets:new(?HASHTBL, [named_table, public, ordered_set]),
|
||||||
ets:new(?HASHTBL_NEW, [named_table, public, ordered_set]),
|
ets:new(?HASHTBL_NEW, [named_table, public, ordered_set]),
|
||||||
register_node(),
|
register_node(),
|
||||||
pg2:create(?MODULE),
|
AllNodes = get_nodes(),
|
||||||
AllNodes = cluster_group(),
|
|
||||||
OtherNodes = case AllNodes of
|
OtherNodes = case AllNodes of
|
||||||
[_MyNode] ->
|
[_MyNode] ->
|
||||||
AllNodes;
|
AllNodes;
|
||||||
|
@ -103,7 +111,7 @@ init([]) ->
|
||||||
{ok, #state{}}.
|
{ok, #state{}}.
|
||||||
|
|
||||||
handle_call(announce, _From, State) ->
|
handle_call(announce, _From, State) ->
|
||||||
case global:set_lock(?LOCK, cluster_group(), 0) of
|
case global:set_lock(?LOCK, get_nodes(), 0) of
|
||||||
false ->
|
false ->
|
||||||
?INFO_MSG("Another node is recently attached to "
|
?INFO_MSG("Another node is recently attached to "
|
||||||
"the cluster and is being rebalanced. "
|
"the cluster and is being rebalanced. "
|
||||||
|
@ -111,13 +119,13 @@ handle_call(announce, _From, State) ->
|
||||||
"before starting this node. "
|
"before starting this node. "
|
||||||
"This may take serveral minutes. "
|
"This may take serveral minutes. "
|
||||||
"Please, be patient.", []),
|
"Please, be patient.", []),
|
||||||
global:set_lock(?LOCK, cluster_group(), infinity);
|
global:set_lock(?LOCK, get_nodes(), infinity);
|
||||||
true ->
|
true ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
case cluster_group() of
|
case get_nodes() of
|
||||||
[_MyNode] ->
|
[_MyNode] ->
|
||||||
join_cluster_group(),
|
register(?MODULE, self()),
|
||||||
global:del_lock(?LOCK);
|
global:del_lock(?LOCK);
|
||||||
Nodes ->
|
Nodes ->
|
||||||
OtherNodes = Nodes -- [node()],
|
OtherNodes = Nodes -- [node()],
|
||||||
|
@ -127,7 +135,7 @@ handle_call(announce, _From, State) ->
|
||||||
OtherNodes, ?MODULE,
|
OtherNodes, ?MODULE,
|
||||||
{node_ready, node()}, ?REHASH_TIMEOUT),
|
{node_ready, node()}, ?REHASH_TIMEOUT),
|
||||||
append_node(?HASHTBL, node()),
|
append_node(?HASHTBL, node()),
|
||||||
join_cluster_group(),
|
register(?MODULE, self()),
|
||||||
gen_server:abcast(OtherNodes -- BadNodes,
|
gen_server:abcast(OtherNodes -- BadNodes,
|
||||||
?MODULE, {node_ready, node()}),
|
?MODULE, {node_ready, node()}),
|
||||||
erlang:send_after(?MIGRATE_TIMEOUT, self(), del_lock)
|
erlang:send_after(?MIGRATE_TIMEOUT, self(), del_lock)
|
||||||
|
@ -214,9 +222,3 @@ get_node_by_hash(Tab, Hash) ->
|
||||||
|
|
||||||
register_node() ->
|
register_node() ->
|
||||||
global:register_name(list_to_atom(node_id()), self()).
|
global:register_name(list_to_atom(node_id()), self()).
|
||||||
|
|
||||||
cluster_group() ->
|
|
||||||
[node() | [node(P) || P <- pg2:get_members(?MODULE)]].
|
|
||||||
|
|
||||||
join_cluster_group() ->
|
|
||||||
pg2:join(?MODULE, whereis(?MODULE)).
|
|
||||||
|
|
|
@ -178,13 +178,6 @@ init([]) ->
|
||||||
infinity,
|
infinity,
|
||||||
supervisor,
|
supervisor,
|
||||||
[ejabberd_tmp_sup]},
|
[ejabberd_tmp_sup]},
|
||||||
Cluster =
|
|
||||||
{ejabberd_cluster,
|
|
||||||
{ejabberd_cluster, start_link, []},
|
|
||||||
permanent,
|
|
||||||
brutal_kill,
|
|
||||||
worker,
|
|
||||||
[ejabberd_cluster]},
|
|
||||||
CacheTabSupervisor =
|
CacheTabSupervisor =
|
||||||
{cache_tab_sup,
|
{cache_tab_sup,
|
||||||
{cache_tab_sup, start_link, []},
|
{cache_tab_sup, start_link, []},
|
||||||
|
@ -194,7 +187,6 @@ init([]) ->
|
||||||
[cache_tab_sup]},
|
[cache_tab_sup]},
|
||||||
{ok, {{one_for_one, 10, 1},
|
{ok, {{one_for_one, 10, 1},
|
||||||
[Hooks,
|
[Hooks,
|
||||||
Cluster,
|
|
||||||
SystemMonitor,
|
SystemMonitor,
|
||||||
Router,
|
Router,
|
||||||
SM,
|
SM,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user