diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2014-01-17 14:26:34 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2014-01-17 14:26:34 +0000 |
| commit | 11f359b49e3449e891def6d4be19ff3c20f29ab7 (patch) | |
| tree | 4d56279c02c12dea10bc036da3308c7ad5d87c6b /src | |
| parent | 910581a849499be0cec89bf9cd8f0ad044aa66b2 (diff) | |
| parent | 86b381b24e150d7c1ff2c239ba57086235654f21 (diff) | |
| download | rabbitmq-server-git-11f359b49e3449e891def6d4be19ff3c20f29ab7.tar.gz | |
Merge bug 25952
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_error_logger_file_h.erl | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/rabbit_error_logger_file_h.erl b/src/rabbit_error_logger_file_h.erl index d59641b0d1..9421b52e83 100644 --- a/src/rabbit_error_logger_file_h.erl +++ b/src/rabbit_error_logger_file_h.erl @@ -79,6 +79,25 @@ init_file(File, PrevHandler) -> %% filter out "application: foo; exited: stopped; type: temporary" handle_event({info_report, _, {_, std_info, _}}, State) -> {ok, State}; +%% When a node restarts quickly it is possible the rest of the cluster +%% will not have had the chance to remove its queues from +%% Mnesia. That's why rabbit_amqqueue:recover/0 invokes +%% on_node_down(node()). But before we get there we can receive lots +%% of messages intended for the old version of the node. The emulator +%% logs an event for every one of those messages; in extremis this can +%% bring the server to its knees just logging "Discarding..." +%% again and again. So just log the first one, then go silent. +handle_event(Event = {error, _, {emulator, _, ["Discarding message" ++ _]}}, + State) -> + case get(discarding_message_seen) of + true -> {ok, State}; + undefined -> put(discarding_message_seen, true), + error_logger_file_h:handle_event(Event, State) + end; +%% Clear this state if we log anything else (but not a progress report). +handle_event(Event = {info_msg, _, _}, State) -> + erase(discarding_message_seen), + error_logger_file_h:handle_event(Event, State); handle_event(Event, State) -> error_logger_file_h:handle_event(Event, State). |
