Skip to content

Commit

Permalink
Towards working connection re-registration after (inter-node) network…
Browse files Browse the repository at this point in the history
… splits
  • Loading branch information
michaelklishin committed Jul 6, 2016
1 parent 548df73 commit e5858e9
Showing 1 changed file with 89 additions and 0 deletions.
89 changes: 89 additions & 0 deletions src/rabbit_connection_tracker.erl
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
%% The contents of this file are subject to the Mozilla Public License
%% Version 1.1 (the "License"); you may not use this file except in
%% compliance with the License. You may obtain a copy of the License
%% at http://www.mozilla.org/MPL/
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and
%% limitations under the License.
%%
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is GoPivotal, Inc.
%% Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved.
%%

-module(rabbit_connection_tracker).

%% Abstracts away how tracked connection records are stored
%% and queried.
%%
%% See also:
%%
%% * rabbit_connection_tracking_handler
%% * rabbit_reader
%% * rabbit_event

-behaviour(gen_server2).

%% API
-export([start_link/0, reregister/0]).

%% gen_fsm callbacks
-export([init/1,
handle_call/3,
handle_cast/2,
handle_info/2,
terminate/2,
code_change/3]).

-define(SERVER, ?MODULE).


%%%===================================================================
%%% API
%%%===================================================================

start_link() ->
gen_server2:start_link({local, ?SERVER}, ?MODULE, [], []).

reregister() ->
gen_server2:cast({local, ?SERVER}, reregister).

%%%===================================================================
%%% gen_server callbacks
%%%===================================================================

init([]) ->
{ok, {}}.

handle_call(_Req, _From, State) ->
{noreply, State}.

handle_cast(reregister, State) ->
rabbit_log:info("Connection tracker: asked to re-register client connections"),
case rabbit_networking:connections_local() of
[] -> ok;
Cs ->
[reregister_connection(C) || C <- Cs],
ok
end,
rabbit_log:info("Done re-registering client connections"),
{noreply, State}.

handle_info(_Req, State) ->
{noreply, State}.

terminate(_Reason, _State) ->
ok.

code_change(_OldVsn, State, _Extra) ->
{ok, State}.

%%%===================================================================
%%% Internal functions
%%%===================================================================

reregister_connection(Conn) ->
Conn ! reregister.

0 comments on commit e5858e9

Please sign in to comment.