summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-03-14 13:02:03 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-03-14 13:02:03 +0000
commit20b3190e58168699efa8e644fd6fae68bd6e1abd (patch)
tree3bb4292937e5d7a195736836608c02ef03b3635c
parentfb40d4bf283c74c00f73aa30f4f4baad52d027b7 (diff)
parent0751818deace20ec336a5bcf7c0d2f376896f85d (diff)
downloadrabbitmq-server-git-20b3190e58168699efa8e644fd6fae68bd6e1abd.tar.gz
Merge bug26043
-rwxr-xr-xscripts/rabbitmq-server2
-rw-r--r--src/rabbit.erl12
-rw-r--r--src/rabbit_msg_store.erl7
-rw-r--r--src/rabbit_node_monitor.erl7
4 files changed, 19 insertions, 9 deletions
diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server
index b430eec3fa..72811adc7b 100755
--- a/scripts/rabbitmq-server
+++ b/scripts/rabbitmq-server
@@ -81,6 +81,8 @@ case "$(uname -s)" in
fi
esac
+export RABBITMQ_CONFIG_FILE
+
RABBITMQ_EBIN_ROOT="${RABBITMQ_HOME}/ebin"
if ! ${ERL_DIR}erl -pa "$RABBITMQ_EBIN_ROOT" \
-boot "${CLEAN_BOOT_FILE}" \
diff --git a/src/rabbit.erl b/src/rabbit.erl
index bd4f1dbc88..fda3f51699 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -776,11 +776,15 @@ home_dir() ->
end.
config_files() ->
+ Abs = fun (F) ->
+ filename:absname(filename:rootname(F, ".config") ++ ".config")
+ end,
case init:get_argument(config) of
- {ok, Files} -> [filename:absname(
- filename:rootname(File, ".config") ++ ".config") ||
- [File] <- Files];
- error -> []
+ {ok, Files} -> [Abs(File) || [File] <- Files];
+ error -> case os:getenv("RABBITMQ_CONFIG_FILE") of
+ false -> [];
+ File -> [Abs(File) ++ " (not found)"]
+ end
end.
%% We don't want this in fhc since it references rabbit stuff. And we can't put
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl
index 9a4439a732..1562050c0e 100644
--- a/src/rabbit_msg_store.erl
+++ b/src/rabbit_msg_store.erl
@@ -781,6 +781,7 @@ handle_call({new_client_state, CRef, CPid, MsgOnDiskFun, CloseFDsFun}, _From,
clients = Clients,
gc_pid = GCPid }) ->
Clients1 = dict:store(CRef, {CPid, MsgOnDiskFun, CloseFDsFun}, Clients),
+ erlang:monitor(process, CPid),
reply({IndexState, IndexModule, Dir, GCPid, FileHandlesEts, FileSummaryEts,
CurFileCacheEts, FlyingEts},
State #msstate { clients = Clients1 });
@@ -804,8 +805,6 @@ handle_cast({client_dying, CRef},
handle_cast({client_delete, CRef},
State = #msstate { clients = Clients }) ->
- {CPid, _, _} = dict:fetch(CRef, Clients),
- credit_flow:peer_down(CPid),
State1 = State #msstate { clients = dict:erase(CRef, Clients) },
noreply(remove_message(CRef, CRef, clear_client(CRef, State1)));
@@ -888,6 +887,10 @@ handle_info(sync, State) ->
handle_info(timeout, State) ->
noreply(internal_sync(State));
+handle_info({'DOWN', _MRef, process, Pid, _Reason}, State) ->
+ credit_flow:peer_down(Pid),
+ noreply(State);
+
handle_info({'EXIT', _Pid, Reason}, State) ->
{stop, Reason, State}.
diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl
index 46dbd7b7a1..b9a7b44182 100644
--- a/src/rabbit_node_monitor.erl
+++ b/src/rabbit_node_monitor.erl
@@ -344,9 +344,10 @@ handle_dead_node(Node, State = #state{autoheal = Autoheal}) ->
case application:get_env(rabbit, cluster_partition_handling) of
{ok, pause_minority} ->
case majority() of
- true -> State;
- false -> await_cluster_recovery() %% Does not really return
- end;
+ true -> ok;
+ false -> await_cluster_recovery()
+ end,
+ State;
{ok, ignore} ->
State;
{ok, autoheal} ->