diff options
author | Matthias Radestock <matthias@lshift.net> | 2009-01-04 11:26:57 +0000 |
---|---|---|
committer | Matthias Radestock <matthias@lshift.net> | 2009-01-04 11:26:57 +0000 |
commit | 0e47200c11c7c1849e2a5aef44509496118ca819 (patch) | |
tree | 19dd0991c86990409ad86edba2db41127191c2d9 | |
parent | 25c7fce0665be4a7dca8d67827ef88e606477178 (diff) | |
parent | cd69f807e6546b115c92728ef38ced6a1978577f (diff) | |
download | rabbitmq-server-0e47200c11c7c1849e2a5aef44509496118ca819.tar.gz |
merge default into v1_5_1
All the changes made on 'default' so far should go into v1_5_1. Which
is lucky since we don't have to cherry pick.
-rw-r--r-- | ebin/rabbit.app | 11 | ||||
-rwxr-xr-x | scripts/rabbitmq-server | 4 | ||||
-rw-r--r-- | src/rabbit_channel.erl | 13 | ||||
-rw-r--r-- | src/rabbit_exchange.erl | 20 |
4 files changed, 35 insertions, 13 deletions
diff --git a/ebin/rabbit.app b/ebin/rabbit.app index 93abd456..70a13208 100644 --- a/ebin/rabbit.app +++ b/ebin/rabbit.app @@ -2,9 +2,9 @@ [{description, "RabbitMQ"}, {id, "RabbitMQ"}, {vsn, "%%VERSION%%"}, - {modules, [rabbit, - buffering_proxy, + {modules, [buffering_proxy, rabbit_access_control, + rabbit_alarm, rabbit_amqqueue, rabbit_amqqueue_process, rabbit_amqqueue_sup, @@ -12,20 +12,25 @@ rabbit_binary_parser, rabbit_channel, rabbit_control, + rabbit, rabbit_error_logger, + rabbit_error_logger_file_h, rabbit_exchange, - rabbit_framing, rabbit_framing_channel, + rabbit_framing, rabbit_heartbeat, rabbit_load, rabbit_log, + rabbit_memsup_linux, rabbit_misc, rabbit_mnesia, + rabbit_multi, rabbit_networking, rabbit_node_monitor, rabbit_persister, rabbit_reader, rabbit_router, + rabbit_sasl_report_file_h, rabbit_sup, rabbit_tests, rabbit_tracer, diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server index bb65d64d..572262c9 100755 --- a/scripts/rabbitmq-server +++ b/scripts/rabbitmq-server @@ -38,8 +38,8 @@ [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=0.0.0.0 [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT} [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=5672 -[ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_ERL_ARGS=${SERVER_ERL_ARGS} -[ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_ERL_ARGS="+K true +A30 \ +[ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS} +[ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS="+K true +A30 \ -kernel inet_default_listen_options [{nodelay,true},{sndbuf,16384},{recbuf,4096}] \ -kernel inet_default_connect_options [{nodelay,true}]" [ "x" = "x$RABBITMQ_CLUSTER_CONFIG_FILE" ] && RABBITMQ_CLUSTER_CONFIG_FILE=${CLUSTER_CONFIG_FILE} diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index 5d7fde90..ca2782c7 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -111,20 +111,23 @@ init(ProxyPid, [ReaderPid, WriterPid, Username, VHost]) -> consumer_mapping = dict:new()}. handle_message({method, Method, Content}, State) -> - case (catch handle_method(Method, Content, State)) of + try handle_method(Method, Content, State) of {reply, Reply, NewState} -> ok = rabbit_writer:send_command(NewState#ch.writer_pid, Reply), NewState; {noreply, NewState} -> NewState; stop -> - exit(normal); - {'EXIT', {amqp, Error, Explanation, none}} -> + exit(normal) + catch + exit:{amqp, Error, Explanation, none} -> terminate({amqp, Error, Explanation, rabbit_misc:method_record_type(Method)}, State); - {'EXIT', Reason} -> - terminate(Reason, State) + exit:normal -> + terminate(normal, State); + _:Reason -> + terminate({Reason, erlang:get_stacktrace()}, State) end; handle_message(terminate, State) -> diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 299747d1..925c335c 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -238,7 +238,19 @@ route(#exchange{name = Name, type = topic}, RoutingKey) -> %% TODO: This causes a full scan for each entry %% with the same exchange (see bug 19336) topic_matches(BindingKey, RoutingKey)]), - lookup_qpids(mnesia:async_dirty(fun qlc:e/1, [Query])); + lookup_qpids( + try + mnesia:async_dirty(fun qlc:e/1, [Query]) + catch exit:{aborted, {badarg, _}} -> + %% work around OTP-7025, which was fixed in R12B-1, by + %% falling back on a less efficient method + [QName || #route{binding = #binding{queue_name = QName, + key = BindingKey}} <- + mnesia:dirty_match_object( + #route{binding = #binding{exchange_name = Name, + _ = '_'}}), + topic_matches(BindingKey, RoutingKey)] + end); route(X = #exchange{type = fanout}, _) -> route_internal(X, '_'); @@ -256,8 +268,10 @@ route_internal(#exchange{name = Name}, RoutingKey) -> lookup_qpids(Queues) -> sets:fold( fun(Key, Acc) -> - [#amqqueue{pid = QPid}] = mnesia:dirty_read({amqqueue, Key}), - [QPid | Acc] + case mnesia:dirty_read({amqqueue, Key}) of + [#amqqueue{pid = QPid}] -> [QPid | Acc]; + [] -> Acc + end end, [], sets:from_list(Queues)). %% TODO: Should all of the route and binding management not be |