Skip to content
This repository has been archived by the owner on Nov 17, 2020. It is now read-only.

Resolve interdependencies with rabbitmq-server #137

Closed
dumbbell opened this issue Sep 30, 2016 · 4 comments
Closed

Resolve interdependencies with rabbitmq-server #137

dumbbell opened this issue Sep 30, 2016 · 4 comments
Assignees

Comments

@dumbbell
Copy link
Member

Currently, there are many calls from modules in rabbitmq-common to modules in rabbitmq-server. The first problem was fixed in rabbitmq/rabbitmq-server#980. We still have the following incorrect calls:

src/rabbit_amqqueue.erl:727 `rabbit_amqqueue:ack/3` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:752 `rabbit_amqqueue:activate_limit_all/2` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:390 `rabbit_amqqueue:add_default_binding/1` calls undefined function `rabbit_binding:add/1`
src/rabbit_amqqueue.erl:769 `rabbit_amqqueue:basic_cancel/4` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:761 `rabbit_amqqueue:basic_consume/10` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:758 `rabbit_amqqueue:basic_get/4` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:888 `rabbit_amqqueue:cancel_sync_mirrors/1` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:676 `rabbit_amqqueue:consumers/1` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:755 `rabbit_amqqueue:credit/5` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:293 `rabbit_amqqueue:declare/6` calls undefined function `rabbit_amqqueue_sup_sup:start_queue_process/3`
src/rabbit_amqqueue.erl:293 `rabbit_amqqueue:declare/6` calls undefined function `rabbit_mirror_queue_misc:initial_queue_node/2`
src/rabbit_amqqueue.erl:293 `rabbit_amqqueue:declare/6` calls undefined function `rabbit_policy:set/1`
src/rabbit_amqqueue.erl:293 `rabbit_amqqueue:declare/6` calls undefined function `rabbit_queue_master_location_misc:get_location/1`
src/rabbit_amqqueue.erl:712 `rabbit_amqqueue:delete/3` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:957 `rabbit_amqqueue:delete_queue/1` calls undefined function `rabbit_binding:remove_transient_for_destination/1`
src/rabbit_amqqueue.erl:978 `rabbit_amqqueue:deliver/2` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:615 `rabbit_amqqueue:i_down/3` calls undefined function `rabbit_amqqueue_process:info_keys/0`
src/rabbit_amqqueue.erl:598 `rabbit_amqqueue:info/1` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:601 `rabbit_amqqueue:info/2` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:609 `rabbit_amqqueue:info_down/2` calls undefined function `rabbit_amqqueue_process:info_keys/0`
src/rabbit_amqqueue.erl:594 `rabbit_amqqueue:info_keys/0` calls undefined function `rabbit_amqqueue_process:info_keys/0`
src/rabbit_amqqueue.erl:319 `rabbit_amqqueue:internal_declare/2` calls undefined function `rabbit_policy:set/1`
src/rabbit_amqqueue.erl:806 `rabbit_amqqueue:internal_delete/1` calls undefined function `rabbit_binding:process_deletions/1`
src/rabbit_amqqueue.erl:794 `rabbit_amqqueue:internal_delete1/2` calls undefined function `rabbit_binding:remove_for_destination/2`
src/rabbit_amqqueue.erl:891 `rabbit_amqqueue:is_mirrored/1` calls undefined function `rabbit_mirror_queue_misc:is_mirrored/1`
src/rabbit_amqqueue.erl:862 `rabbit_amqqueue:node_permits_offline_promotion/1` calls undefined function `rabbit:is_running/0`
src/rabbit_amqqueue.erl:862 `rabbit_amqqueue:node_permits_offline_promotion/1` calls undefined function `rabbit_mnesia:cluster_nodes/1`
src/rabbit_amqqueue.erl:772 `rabbit_amqqueue:notify_decorators/1` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:934 `rabbit_amqqueue:on_node_down/1` calls undefined function `rabbit_binding:combine_deletions/2`
src/rabbit_amqqueue.erl:934 `rabbit_amqqueue:on_node_down/1` calls undefined function `rabbit_binding:new_deletions/0`
src/rabbit_amqqueue.erl:934 `rabbit_amqqueue:on_node_down/1` calls undefined function `rabbit_binding:process_deletions/1`
src/rabbit_amqqueue.erl:934 `rabbit_amqqueue:on_node_down/1` calls undefined function `rabbit_mnesia:is_process_alive/1`
src/rabbit_amqqueue.erl:380 `rabbit_amqqueue:policy_changed/2` calls undefined function `rabbit_mirror_queue_misc:update_mirrors/2`
src/rabbit_amqqueue.erl:723 `rabbit_amqqueue:purge/1` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:215 `rabbit_amqqueue:recover/0` calls undefined function `file_handle_cache:get_limit/0`
src/rabbit_amqqueue.erl:215 `rabbit_amqqueue:recover/0` calls undefined function `rabbit_log:warning/2`
src/rabbit_amqqueue.erl:277 `rabbit_amqqueue:recover_durable_queues/1` calls undefined function `rabbit_amqqueue_sup_sup:start_queue_process/3`
src/rabbit_amqqueue.erl:277 `rabbit_amqqueue:recover_durable_queues/1` calls undefined function `rabbit_log:error/2`
src/rabbit_amqqueue.erl:729 `rabbit_amqqueue:reject/4` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:725 `rabbit_amqqueue:requeue/3` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:792 `rabbit_amqqueue:resume/2` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:699 `rabbit_amqqueue:stat/1` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:886 `rabbit_amqqueue:sync_mirrors/1` calls undefined function `delegate:call/2`
src/rabbit_amqqueue.erl:884 `rabbit_amqqueue:update_mirroring/1` calls undefined function `delegate:cast/2`
src/rabbit_amqqueue.erl:427 `rabbit_amqqueue:with/4` calls undefined function `rabbit_mnesia:is_process_alive/1`
src/rabbit_auth_backend_internal.erl:168 `rabbit_auth_backend_internal:add_user/2` calls undefined function `rabbit_log:info/2`
src/rabbit_auth_backend_internal.erl:168 `rabbit_auth_backend_internal:add_user/2` calls undefined function `rabbit_password:hashing_mod/0`
src/rabbit_auth_backend_internal.erl:214 `rabbit_auth_backend_internal:change_password/2` calls undefined function `rabbit_log:info/2`
src/rabbit_auth_backend_internal.erl:214 `rabbit_auth_backend_internal:change_password/2` calls undefined function `rabbit_password:hashing_mod/0`
src/rabbit_auth_backend_internal.erl:233 `rabbit_auth_backend_internal:change_password_hash/2` calls undefined function `rabbit_password:hashing_mod/0`
src/rabbit_auth_backend_internal.erl:224 `rabbit_auth_backend_internal:clear_password/1` calls undefined function `rabbit_log:info/2`
src/rabbit_auth_backend_internal.erl:190 `rabbit_auth_backend_internal:delete_user/1` calls undefined function `rabbit_log:info/2`
src/rabbit_auth_backend_internal.erl:230 `rabbit_auth_backend_internal:hash_password/2` calls undefined function `rabbit_password:hash/2`
src/rabbit_auth_backend_internal.erl:91 `rabbit_auth_backend_internal:hashing_module_for_user/1` calls undefined function `rabbit_password:hashing_mod/1`
src/rabbit_auth_backend_internal.erl:360 `rabbit_auth_backend_internal:list_vhost_permissions/1` calls undefined function `rabbit_vhost:with/2`
src/rabbit_auth_backend_internal.erl:365 `rabbit_auth_backend_internal:list_vhost_permissions/3` calls undefined function `rabbit_vhost:with/2`
src/rabbit_auth_backend_internal.erl:253 `rabbit_auth_backend_internal:set_permissions/5` calls undefined function `rabbit_log:info/2`
src/rabbit_auth_backend_internal.erl:244 `rabbit_auth_backend_internal:set_tags/2` calls undefined function `rabbit_log:info/2`
src/rabbit_auth_backend_internal.erl:95 `rabbit_auth_backend_internal:user_login_authentication/2` calls undefined function `rabbit_password:salted_hash/3`
src/rabbit_basic.erl:161 `rabbit_basic:message/3` calls undefined function `rabbit_guid:gen/0`
src/rabbit_basic.erl:107 `rabbit_basic:publish/1` calls undefined function `rabbit_exchange:lookup/1`
src/rabbit_basic.erl:114 `rabbit_basic:publish/2` calls undefined function `rabbit_exchange:route/2`
src/rabbit_binary_generator.erl:224 `rabbit_binary_generator:lookup_amqp_exception/2` calls undefined function `rabbit_log:warning/2`
src/rabbit_channel.erl:1486 `rabbit_channel:basic_consume/8` calls undefined function `rabbit_limiter:is_active/1`
src/rabbit_channel.erl:1486 `rabbit_channel:basic_consume/8` calls undefined function `rabbit_limiter:pid/1`
src/rabbit_channel.erl:696 `rabbit_channel:check_resource_access/3` calls undefined function `rabbit_access_control:check_resource_access/3`
src/rabbit_channel.erl:1919 `rabbit_channel:coalesce_and_send/3` calls undefined function `dtree:is_empty/1`
src/rabbit_channel.erl:1919 `rabbit_channel:coalesce_and_send/3` calls undefined function `dtree:smallest/1`
src/rabbit_channel.erl:260 `rabbit_channel:deliver_reply/2` calls undefined function `delegate:invoke_no_result/2`
src/rabbit_channel.erl:271 `rabbit_channel:deliver_reply_local/3` calls undefined function `pg_local:in_group/2`
src/rabbit_channel.erl:421 `rabbit_channel:handle_call/3` calls undefined function `rabbit_trace:init/1`
src/rabbit_channel.erl:446 `rabbit_channel:handle_cast/2` calls undefined function `dtree:drop/2`
src/rabbit_channel.erl:446 `rabbit_channel:handle_cast/2` calls undefined function `dtree:take/3`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_binding:add/2`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_binding:remove/2`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:assert_equivalence/6`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:check_type/1`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:declare/6`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:delete/2`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:lookup/1`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:lookup_or_die/1`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_exchange:route/2`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_guid:binary/2`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_guid:gen_secure/0`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_limiter:is_active/1`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_limiter:limit_prefetch/3`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_limiter:pid/1`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_limiter:unlimit_prefetch/1`
src/rabbit_channel.erl:855 `rabbit_channel:handle_method/3` calls undefined function `rabbit_trace:tap_in/6`
src/rabbit_channel.erl:1547 `rabbit_channel:handle_publishing_queue_down/3` calls undefined function `dtree:take/2`
src/rabbit_channel.erl:1547 `rabbit_channel:handle_publishing_queue_down/3` calls undefined function `dtree:take_all/2`
src/rabbit_channel.erl:1959 `rabbit_channel:i/2` calls undefined function `dtree:size/1`
src/rabbit_channel.erl:1959 `rabbit_channel:i/2` calls undefined function `rabbit_limiter:get_prefetch_limit/1`
src/rabbit_channel.erl:351 `rabbit_channel:init/1` calls undefined function `dtree:empty/0`
src/rabbit_channel.erl:351 `rabbit_channel:init/1` calls undefined function `pg_local:join/2`
src/rabbit_channel.erl:351 `rabbit_channel:init/1` calls undefined function `rabbit_limiter:new/1`
src/rabbit_channel.erl:351 `rabbit_channel:init/1` calls undefined function `rabbit_trace:init/1`
src/rabbit_channel.erl:305 `rabbit_channel:list/0` calls undefined function `rabbit_mnesia:cluster_nodes/1`
src/rabbit_channel.erl:309 `rabbit_channel:list_local/0` calls undefined function `pg_local:get_members/1`
src/rabbit_channel.erl:626 `rabbit_channel:log/3` calls undefined function `rabbit_log:log/4`
src/rabbit_channel.erl:1938 `rabbit_channel:maybe_complete_tx/1` calls undefined function `dtree:is_empty/1`
src/rabbit_channel.erl:1792 `rabbit_channel:notify_limiter/2` calls undefined function `rabbit_limiter:ack/2`
src/rabbit_channel.erl:1792 `rabbit_channel:notify_limiter/2` calls undefined function `rabbit_limiter:is_active/1`
src/rabbit_channel.erl:1862 `rabbit_channel:process_routing_confirm/5` calls undefined function `dtree:insert/4`
src/rabbit_channel.erl:1853 `rabbit_channel:process_routing_mandatory/5` calls undefined function `dtree:insert/4`
src/rabbit_channel.erl:1680 `rabbit_channel:record_sent/4` calls undefined function `rabbit_trace:tap_out/5`
src/rabbit_channel.erl:1886 `rabbit_channel:send_confirms/1` calls undefined function `rabbit_node_monitor:pause_partition_guard/0`
src/rabbit_channel.erl:612 `rabbit_channel:terminate/2` calls undefined function `pg_local:leave/2`
src/rabbit_channel_interceptor.erl:41 `rabbit_channel_interceptor:init/1` calls undefined function `rabbit_registry:lookup_all/1`
src/rabbit_exchange_decorator.erl:88 `rabbit_exchange_decorator:list/0` calls undefined function `rabbit_registry:lookup_all/1`
src/rabbit_exchange_decorator.erl:103 `rabbit_exchange_decorator:maybe_recover/1` calls undefined function `rabbit_exchange:update_decorators/1`
src/rabbit_exchange_decorator.erl:93 `rabbit_exchange_decorator:register/2` calls undefined function `rabbit_exchange:list/0`
src/rabbit_exchange_decorator.erl:93 `rabbit_exchange_decorator:register/2` calls undefined function `rabbit_registry:register/3`
src/rabbit_exchange_decorator.erl:98 `rabbit_exchange_decorator:unregister/1` calls undefined function `rabbit_exchange:list/0`
src/rabbit_exchange_decorator.erl:98 `rabbit_exchange_decorator:unregister/1` calls undefined function `rabbit_registry:unregister/2`
src/rabbit_framing_amqp_0_8.erl:1618 `rabbit_framing_amqp_0_8:lookup_amqp_exception/1` calls undefined function `rabbit_log:warning/2`
src/rabbit_framing_amqp_0_9_1.erl:1208 `rabbit_framing_amqp_0_9_1:lookup_amqp_exception/1` calls undefined function `rabbit_log:warning/2`
src/rabbit_misc.erl:529 `rabbit_misc:execute_mnesia_transaction/1` calls undefined function `file_handle_cache_stats:update/1`
src/rabbit_misc.erl:529 `rabbit_misc:execute_mnesia_transaction/1` calls undefined function `mnesia_sync:sync/0`
src/rabbit_misc.erl:529 `rabbit_misc:execute_mnesia_transaction/1` calls undefined function `worker_pool:submit/2`
src/rabbit_misc.erl:526 `rabbit_misc:with_user_and_vhost/3` calls undefined function `rabbit_vhost:with/2`
src/rabbit_net.erl:260 `rabbit_net:accept_ack/2` calls undefined function `file_handle_cache:obtain/0`
src/rabbit_net.erl:260 `rabbit_net:accept_ack/2` calls undefined function `ranch:accept_ack/1`
src/rabbit_networking.erl:373 `rabbit_networking:close_connection/2` calls undefined function `rabbit_log:info/2`
src/rabbit_networking.erl:354 `rabbit_networking:connections/0` calls undefined function `rabbit_mnesia:cluster_nodes/1`
src/rabbit_networking.erl:358 `rabbit_networking:connections_local/0` calls undefined function `pg_local:get_members/1`
src/rabbit_networking.erl:434 `rabbit_networking:host_lookup_error/2` calls undefined function `rabbit_log:error/2`
src/rabbit_networking.erl:165 `rabbit_networking:log_poodle_fail/1` calls undefined function `rabbit_log:error/2`
src/rabbit_networking.erl:198 `rabbit_networking:make_verify_fun/3` calls undefined function `rabbit_log:error/2`
src/rabbit_networking.erl:343 `rabbit_networking:on_node_down/1` calls undefined function `rabbit_log:info/2`
src/rabbit_networking.erl:350 `rabbit_networking:register_connection/1` calls undefined function `pg_local:join/2`
src/rabbit_networking.erl:245 `rabbit_networking:tcp_listener_addresses/1` calls undefined function `rabbit_log:error/2`
src/rabbit_networking.erl:352 `rabbit_networking:unregister_connection/1` calls undefined function `pg_local:leave/2`
src/rabbit_nodes.erl:237 `rabbit_nodes:all_running/0` calls undefined function `rabbit_mnesia:cluster_nodes/1`
src/rabbit_nodes.erl:208 `rabbit_nodes:cluster_name/0` calls undefined function `rabbit_runtime_parameters:value_global/2`
src/rabbit_nodes.erl:107 `rabbit_nodes:dist_working_diagnostics/1` calls undefined function `rabbit:is_running/1`
src/rabbit_nodes.erl:218 `rabbit_nodes:set_cluster_name/1` calls undefined function `rabbit_runtime_parameters:set_global/2`
src/rabbit_queue_decorator.erl:45 `rabbit_queue_decorator:list/0` calls undefined function `rabbit_registry:lookup_all/1`
src/rabbit_queue_decorator.erl:47 `rabbit_queue_decorator:register/2` calls undefined function `rabbit_registry:register/3`
src/rabbit_queue_decorator.erl:52 `rabbit_queue_decorator:unregister/1` calls undefined function `rabbit_registry:unregister/2`
src/rabbit_reader.erl:1273 `rabbit_reader:auth_mechanism_to_module/2` calls undefined function `rabbit_registry:binary_to_type/1`
src/rabbit_reader.erl:1273 `rabbit_reader:auth_mechanism_to_module/2` calls undefined function `rabbit_registry:lookup_module/2`
src/rabbit_reader.erl:1291 `rabbit_reader:auth_mechanisms/1` calls undefined function `rabbit_registry:lookup_all/1`
src/rabbit_reader.erl:1300 `rabbit_reader:auth_phase/2` calls undefined function `rabbit_access_control:check_user_loopback/2`
src/rabbit_reader.erl:896 `rabbit_reader:create_channel/2` calls undefined function `rabbit_channel_sup_sup:start_channel/2`
src/rabbit_reader.erl:1132 `rabbit_reader:handle_method0/2` calls undefined function `rabbit_access_control:check_vhost_access/3`
src/rabbit_reader.erl:1132 `rabbit_reader:handle_method0/2` calls undefined function `rabbit_alarm:register/2`
src/rabbit_reader.erl:1132 `rabbit_reader:handle_method0/2` calls undefined function `rabbit_connection_helper_sup:start_channel_sup_sup/1`
src/rabbit_reader.erl:1132 `rabbit_reader:handle_method0/2` calls undefined function `rabbit_connection_helper_sup:start_queue_collector/2`
src/rabbit_reader.erl:1378 `rabbit_reader:i/2` calls undefined function `rabbit_ssl:peer_cert_issuer/1`
src/rabbit_reader.erl:1378 `rabbit_reader:i/2` calls undefined function `rabbit_ssl:peer_cert_subject/1`
src/rabbit_reader.erl:1378 `rabbit_reader:i/2` calls undefined function `rabbit_ssl:peer_cert_validity/1`
src/rabbit_reader.erl:308 `rabbit_reader:log/3` calls undefined function `rabbit_log:log/4`

Thus we need to move modules between both applications and probably need to rewrite a few things.

@dumbbell dumbbell added this to the 3.6.x milestone Sep 30, 2016
@dumbbell dumbbell self-assigned this Sep 30, 2016
@kjnilsson
Copy link
Contributor

Just a note to say that in the management branch(es) I have already moved delegate to rabbit_common

@dumbbell
Copy link
Member Author

I will probably do the same as part of this issue.

@dumbbell
Copy link
Member Author

dumbbell commented Sep 30, 2016

To clarify the scope of rabbitmq-common and this issue in particular, rabbitmq-common is used by:

  • RabbitMQ plugins;
  • rabbitmq-erlang-client.

For plugins, what is in rabbitmq-common vs. rabbitmq-server has little importance as they depend on the broker anyway.

However, the Erlang client depends on rabbitmq-common only. Or more exactly, it should depend on it exclusively. Unfortunately, it also makes calls into the broker directly or indirectly through a reverse dependency in rabbitmq-common.

Therefore, we must solve this issue from the Erlang client's point of view:

  • If an API is needed by the client, we need to find a way to make it contained in rabbitmq-common one way or another, or change the client to do it differently.
  • If an API is not needed by the client, the simplest solution is to move the module to rabbitmq-server.

An example is rabbit_amqqueue.erl: rabbit_amqqueue:notify_sent() and rabbit_amqqueue:notify_sent_queue_down() are used by amqp_channel.erl in the Erlang client even though these functions expect direct access to broker internal processes. The use case is RabbitMQ plugins acting as an AMQP client, like rabbitmq-shovel or rabbitmq-mqtt.

dumbbell added a commit that referenced this issue Sep 30, 2016
…ories

Modules which are not used by rabbitmq-common or rabbitmq-erlang-client
are moved to rabbitmq-server.

Modules which were in rabbitmq-server but were used in rabbitmq-common
are moved to rabbitmq-common.

References #137.
[#118490793]
dumbbell added a commit to rabbitmq/rabbitmq-server that referenced this issue Sep 30, 2016
…ories

Modules which are not used by rabbitmq-common or rabbitmq-erlang-client
are moved to rabbitmq-server.

Modules which were in rabbitmq-server but were used in rabbitmq-common
are moved to rabbitmq-common.

References rabbitmq/rabbitmq-common#137.
[#118490793]
dumbbell added a commit that referenced this issue Oct 11, 2016
…ories

Modules which are not used by rabbitmq-common or rabbitmq-erlang-client
are moved to rabbitmq-server.

Modules which were in rabbitmq-server but were used in rabbitmq-common
are moved to rabbitmq-common.

References #137.
[#118490793]
dumbbell added a commit to rabbitmq/rabbitmq-server that referenced this issue Oct 11, 2016
…ories

Modules which are not used by rabbitmq-common or rabbitmq-erlang-client
are moved to rabbitmq-server.

Modules which were in rabbitmq-server but were used in rabbitmq-common
are moved to rabbitmq-common.

References rabbitmq/rabbitmq-common#137.
[#118490793]
@michaelklishin michaelklishin removed this from the 3.6.x milestone Jan 3, 2017
@dumbbell
Copy link
Member Author

dumbbell commented Nov 3, 2017

Dependency circles between the broker, the client and rabbitmq-common were fixed in 3.6.x and 3.7.x.

@dumbbell dumbbell closed this as completed Nov 3, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants