Giter Club home page Giter Club logo

rabbitmq-common's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rabbitmq-common's Issues

gen_server2 stats do not allow the process to hibernate

The implementation of the new gen_server2 stats (RabbitMQ >= 3.6.7) wakes up the process before it has the chance to go into hibernation (mailbox messages). The stats timer should be stopped when pre_hibernate is being handled, and restarted in post_hibernate.

rabbitmq-common dep conflict with qdate ?

Hi,

I have an erlang.mk project which has been using amqp_client and qdate happily for a long time. On a recent 'make distclean' I am suddenly getting the following -

===> Errors generating release
Duplicated modules:
ec_semver_parser specified in erlware_commons and rabbit_common
ec_semver specified in erlware_commons and rabbit_common

qdate pulls in erlware_commons and amqp_client pulls in rabbit_common.

@essen suggests this is a bona fide naming conflict; it looks to me the issue may have been introduced on the rabbitmq-common side.

Is this something that could/should be fixed ?

Thank you -

Codegen scripts don't work with Python 3

Many systems today come with Python 3 being the default "python". But the codegen scripts don't work with it. We should support both Python 2 and 3.

Patch incoming.

Expose options in rabbit_json

The current implementation exposes only:

decode(JSON) ->
    jsx:decode(JSON, [return_maps]).

The JSX library supports different parameters for decode and encode functions

It is useful to expose all these interfaces for future implementations and also for plugins that use the rabbit_json.

I am working on this issue on rabbitmq-autocluster, and I had to add use jsx:decode directly. See this comment .

This is what I have in mind to do:

-spec decode(jsx:json_text()) -> jsx:json_term().
decode(JSON) ->
    decode(JSON, []).


-spec decode(jsx:json_text(), jsx_to_term:config()) -> jsx:json_term().
decode(JSON, Opts) ->
    jsx:decode(JSON, Opts).

There is a little side effect:

Currently, the other RabbitMQ modules use this interface:

rabbit_json:try_decode(Defn) %% this interface implicitly uses  `[return_maps]`

and it should be replaced with:

rabbit_json:try_decode(Defn, [return_maps]) 

I already tried to modify the interface by adding [return_maps], then ran the unit tests on the management ui and they passed

Add an option to suppress test console output

make tests with common test are producing a lot of garbage console output. There will be html logs generated and most of this output is useless. This output can be sent to log file and console can be filled with dots or some nicer messages, which will still keep travis happy, but won't frustrate developers.

Precondition_failed formatting error with unicode queue name

precondition_failed raises an badarg error when the queue name is in unicode:

Error: badarg
Stack trace: [{io_lib,format,
                  ["Channel error on connection ~p (~s, vhost: '~s', user: '~s'), channel ~p:~n~s~n",
                   [<0.507.0>,<<"127.0.0.1:50536 -> 127.0.0.1:5672">>,<<"/">>,
                    <<"test">>,1,
                    [111,112,101,114,97,116,105,111,110,32,"queue.declare",32,
                     99,97,117,115,101,100,32,97,32,99,104,97,110,110,101,108,
                     32,101,120,99,101,112,116,105,111,110,32,
                     "precondition_failed",58,32,
                     [91,
                      ["105",44,10,

this should be:
io_lib:format("operation ~s caused a channel exception ~s: ~ts", [M, N, E]);

as result:

=ERROR REPORT==== 24-Jan-2017::11:14:56 ===
Channel error on connection <0.462.0> (127.0.0.1:50816 -> 127.0.0.1:5672, vhost: '/', user: 'test'), channel 1:
operation queue.declare caused a channel exception precondition_failed: invalid arg 'x-queue-mode' 
for queue '卓匃屟尢桨' in vhost '/': invalid_queue_mode

Use erlang-lager/lager instead of basho/lager

basho/lager is unmaintained. A while ago, erlang-lager/lager project was started to continue progress on lager, including support for recent OTP versions and rebar3.

I noticed this doing a build of the umbrella project from master:

$ cd deps/lager
(19.3)lbakken@shostakovich ~/Projects/rabbitmq/umbrella_master/deps/lager (master *%=)                                                                                                                                                                                          
$ git remote -v                                                                                                                                                                                                                                                                 
origin  https://github.com/basho/lager (fetch)
origin  https://github.com/basho/lager (push)

rabbitmq-common depends on xmerl

Running a simple git-grep in rabbitmq-common shows it uses xmerl:

tiefling:rabbitmq-common jlouis$ gg xmerl
src/mochijson2.erl:197:            json_encode_string_unicode(xmerl_ucs:from_utf8(L), State, [?Q])
src/mochijson2.erl:204:            json_encode_string_unicode(xmerl_ucs:from_utf8(B), State, [?Q])
src/mochijson2.erl:297:                   [xmerl_ucs:to_utf8(C) | Acc];
src/mochijson2.erl:457:                [CodePoint] = xmerl_ucs:from_utf16be(<<C:16/big-unsigned-integer,
src/mochijson2.erl:459:                Acc1 = lists:reverse(xmerl_ucs:to_utf8(CodePoint), Acc),
src/mochijson2.erl:462:                Acc1 = lists:reverse(xmerl_ucs:to_utf8(C), Acc),
src/mochijson2.erl:713:        Expect = list_to_binary(xmerl_ucs:to_utf8(CodePoint)),
src/mochijson2.erl:748:    UTF8Seq = list_to_binary(xmerl_ucs:to_utf8(16#0001d120)),
src/mochijson2.erl:780:       iolist_to_binary(encode(list_to_atom(xmerl_ucs:to_utf8(16#0001d120))))),
src/mochijson2.erl:825:       json_bin_is_safe(list_to_binary(xmerl_ucs:to_utf8(16#0001d120)))),
src/mochijson2.erl:828:       xmerl_ucs:from_utf8(
src/mochijson2.erl:830:           decode(encode(list_to_atom(xmerl_ucs:to_utf8(16#0001d120))))))),
src/mochijson2.erl:836:       json_bin_is_safe(list_to_binary(xmerl_ucs:to_utf8([16#110000])))),
src/rabbit_binary_parser.erl:174:        xmerl_ucs:from_utf8(Bin),

But the .app file which is generated doesn't contain a reference to xmerl. The amqp_client now does and this avoids breaking releases, but this is a minor nitpick which could help getting fixed in order to make, e.g., dependency mappers more efficient.

Please update ranch_proxy_protocol for OTP21

Latest (3.7.7) depends on latest published ranch_proxy_protocol (1.5.0)
but this dep does not compile on OTP21 (emits warnings & has warnings_as_errors).

This is fixed on rpb's master since heroku/ranch_proxy_protocol@4e0f73a but not published yet.

This impacts everyone that uses latest amqp_client on latest OTP.
I'm here due to Phoenix + elixir1.6 and this error:

λ mix deps.compile ranch_proxy_protocol
===> Compiling ranch_proxy_protocol
===> Compiling src/ranch_proxy_ssl.erl failed
src/ranch_proxy_ssl.erl:90: ssl:ssl_accept/3: deprecated; use ssl:handshake/3 instead

** (Mix) Could not compile dependency :ranch_proxy_protocol, "/Users/pete/.mix/rebar3 bare compile --paths "/Users/pete/Documents/_panda/elixir_core.git/_build/dev/lib/*/ebin"" command failed. You can recompile this dependency with "mix deps.compile ranch_proxy_protocol", update it with "mix deps.update ranch_proxy_protocol" or clean it with "mix deps.clean ranch_proxy_protocol"

My current workaround:

# mix.exs
  defp deps do
    [
      # Remove :ranch_proxy_protocol once :rabbit_common depends on a version newer than 1.5.0
      # See https://github.com/heroku/ranch_proxy_protocol/pull/42
      {:ranch_proxy_protocol,
       override: true,
       git: "https://github.com/heroku/ranch_proxy_protocol.git",
       ref: "4e0f73a385f37cc6f277363695e91f4fc7a81f24"},
      {:amqp, "~> 1.0"},
      ...

I'm opening this issue to help identify what needs to be done for the different parties.

If the Rabbit team prefers to only depend on published packages, here's the issue that needs attention: heroku/ranch_proxy_protocol#43
Otherwise the above commit can be locked.

Thanks!

Transactions in rabbit_exchange_type callbacks

When looking at the rabbit_exchange_type behaviour, I noticed callbacks have a transaction parameter (which should be either transaction or none).

What is the rationale behind this and which callback shall I implement?

NOTE: the issue was edited as I figured out the original problem.

`delegate:cast/2` can cause binary heap growth in some scenarios

Under some conditions, the memory usage of binaries by mirror queues / gm processes causes the system to crash. This has been nailed down to the case when ack/nack are sent to the node hosting the queue slave. In that case, the only difference between sending ack/nack to master or slave is the call to delegate:cast, which will either send directly to the local process (publishing to master), or send to the remote delegate (publishing to slave).

A simple code refactor seems to deeply alleviate this problem, which I assume changes the handling of the binary references by the Erlang VM.

Use new logger

This project depends on lager right now. It'd be nice if it'd use the built in OTP logger instead, available since OTP22.

Segfault while printing errors to stderr with erlang 18.X

Looks like code at

format_stderr(Fmt, Args) ->

is incomptabile with erlang 18.X and its bugs. It causes every other unsuccessful rabbitmqctl run to segfault and dump core.

Erlang 18.X VM is really unhappy with things like:

./bin/erl -noshell -eval 'Port = open_port({fd, 0, 2}, [out]), port_command(Port, "a"), port_close(Port), erlang:halt(10)'

And I think OTP team don't currentl have solution themselves, because they use workarounds like erlang/otp@ba531a1 😄

So I think it's better to remove this troublesome piece of code from rabbitmq, because nobody knows then the erlang 18.X itself will be fixed. And because ops use this segfault as an excuse to stop digging into some other problems further 😄

Precondition failed when re-declaring classic queue.

Reproduce with the following Python code:

import logging
import pika

logging.basicConfig(level=logging.DEBUG)

with pika.BlockingConnection() as connection:
    channel = connection.channel()
    channel.queue_declare(queue='classic-queue')

with pika.BlockingConnection() as connection:
    channel = connection.channel()
    channel.queue_declare(queue='classic-queue', arguments={'x-queue-type': 'classic'})

.boot generation failed due to duplicate mochi* modules

Please help solve this problem. It appears when I try to create a new tag on Gitlab, but everything works locally

Release failed, during .boot generation:
        Duplicated modules: 
    	mochiweb_util specified in rabbit_common and mochiweb
    	mochinum specified in rabbit_common and mochiweb
    	mochijson2 specified in rabbit_common and mochiweb
The command '/bin/sh -c mix release --env=prod --no-tar' returned a non-zero code: 1

My deps:

[
      {:phoenix, "~> 1.3.4"}, 
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.4"},
      {:mariaex, "~> 0.8.4"},
      {:phoenix_html, "~> 2.13.0"}, #2.12.0
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 1.0"},
      {:plug_cowboy, "~> 1.0"},
      {:drab, "~> 0.10.1"}, #0.10.0
      {:ecto, "~> 2.2.1"},
      {:tzdata, "0.5.19"},
      {:timex, "3.4.2"},
      {:distillery, "~> 2.0", runtime: false},
      {:exoml, "0.0.2"},
      {:httpoison, "~> 1.3.0"},
      {:browser, "~> 0.4.3"},
      {:amqp, "~> 0.2.2"}
    ]

rabbit_misc.erl:19: can't find include file "rabbit_framing.hrl

I'm using rebar to compile, and add https://github.com/rabbitmq/rabbitmq-common.git to deps.

But:

/xx/deps/rabbit_common/src/rabbit_misc.erl:19: can't find include file "rabbit_framing.hrl"
Compiling /xx/deps/rabbit_common/src/rabbit_misc.erl failed:
ERROR: compile failed while processing /xx/deps/rabbit_common: rebar_abort
Makefile:13: recipe for target 'compile' failed
make: *** [compile] Error 1

While everything is ok , if make in deps/rabbitmq_common/.

Any pointers or suggestions would be greatly appreciated.

Use recon library to get process memory stats on Windows

#151483108

rabbitmq/rabbitmq-server#1270 introduced using wmic.exe to get the amount of memory used by erl.exe on Windows. #222 reverted this change and restored behavior to using erlang:memory().

This mailing list post provides a method to get memory use from the Erlang VM's allocator statistics. After some searching, it appears that this method in the recon library achieves the same result.

You can see here some comparison in memory reporting using several different methods. Note that the first value is from recon and the last two are from the code provided in the rabbitmq-users post. Those values also closely track what Task Manager showed in its output.

On Linux, the /proc/PID/statm file will be used, and ps for other Unix platforms.

Switch to a common JSON library that uses maps

Filing here because there is no better place than a shared internal library.

We've seen a number of cases where proplist really hurt correctness because we cannot tell the difference between an empty JSON object/proplist and an empty list (JSON array), e.g. rabbitmq/rabbitmq-management#75.

We therefore should switch to a JSON library that uses maps. Granted, this means requiring Erlang 17.5 or later, which we were planning on doing for 3.7.0 anyway. We should use the same library
across the board if we can.

Related: rabbitmq/rabbitmq-server#546.

Cannot build without umbrella

When cloning rabbitmq-common without umbrella (e.g. when building rabbitmq-cli), make in stable fails with:

src/rabbit_ct_broker_helpers.erl:20: can't find include lib "rabbit_common/include/rabbit.hrl"

Process memory reporting uses Erlang memory estimates by default

This bug report is for version 3.6.12 of rabbitmq-server/rabbitmq-common.

This information was gathered using rabbitmqctl eval on the same RabbitMQ test server that showed performance issues under load.

There seems to be an issue in vm_memory_monitor:get_process_memory() where it actually reports erlang:memory(total) if the config option vm_memory_calculation_strategy is unset. As soon as this config option is set, the get_process_memory() function begins to report consistently with get_ps_memory(). However rabbitmqctl status does report that vm_memory_calculation_strategy is set to rss even when unset which is the default behavior but not consistent with the memory reporting values. In my glance at the code, this seems to mean that it is falling back on Erlang due to a ps output parsing issue but cannot verify this due to the function not being exported to the main application. Please let me know if you need any more information or would like me to test anything else.

"hostname -s" is invalid on msys2

We'll have to take this into account when building on Windows -

lbakken@DSCH-WIN ~/development/rabbitmq/umbrella (master *=)
$ make FULL=1 BRANCH=master up
hostname: unknown option -- s
Try 'hostname --help' for more information.
make[1]: Entering directory '/home/lbakken/development/rabbitmq/umbrella/deps/amqp_client'
hostname: unknown option -- s
Try 'hostname --help' for more information.
make[2]: Entering directory '/home/lbakken/development/rabbitmq/umbrella/deps/rabbit_common'
make[1]: *** [erlang.mk:7577: /home/lbakken/development/rabbitmq/umbrella/.erlang.mk/recursive-deps-list.log] Interrupt
make: *** [erlang.mk:7638: /home/lbakken/development/rabbitmq/umbrella/.erlang.mk/recursive-deps-list.log] Interrupt

lbakken@DSCH-WIN ~/development/rabbitmq/umbrella (master=)
$ find . -type f \( -name Makefile -o -name '*.mk' \) -exec fgrep 'hostname -s' {} +
./deps/rabbitmq_ct_helpers/tools/tls-certs/Makefile:HOSTNAME := $(shell if [ "$$(uname)" = Darwin ]; then hostname -s; else hostname; fi)
./deps/rabbitmq_java_client/Makefile:     $(if $(MAIN_NODE),$(MAIN_NODE),$(RABBITMQ_NODENAME)@$$(hostname -s))
./deps/rabbit_common/mk/rabbitmq-run.mk:HOSTNAME := $(shell hostname -s)
./deps/rabbit_common/mk/rabbitmq-run.mk:                nodename="rabbit-$$n@$$(hostname -s)"; \
./deps/rabbit_common/mk/rabbitmq-run.mk:                nodename="rabbit-$$n@$$(hostname -s)"; \
./deps/rabbit_common/mk/rabbitmq-tools.mk:CT_LOGS_ARCHIVE ?= $(PROJECT)-ct-logs-$(subst _,-,$(subst -,,$(subst .,,$(patsubst ct_run.ct_$(PROJECT)@$(shell hostname -s).%,%,$(notdir $(lastword $(wildcard logs/ct_run.*))))))).tar.xz

Missing "sslsocket" causing build failure

Previously (as in within the last 2 weeks) I was able to have rabbitmq-common as a dependency of my plugin project and the build worked. Now, it doesn't appear to work, and certainly when checking out current master on it's own I get build failures. Entirely possible this is a bug in my local system, or that I'm missing a dependency, but I can't see anything obvious. Might be related to #8 given where the issues are occurring, but that's a complete guess.

Any thoughts?

root@ae0389c87456:/rabbit/rabbitmq-common# make
 DEP    rabbitmq_codegen
 GEN    include/rabbit_framing.hrl
 GEN    src/rabbit_framing_amqp_0_8.erl
 GEN    src/rabbit_framing_amqp_0_9_1.erl
 DEPEND rabbit_common.d
 ERLC   app_utils.erl credit_flow.erl gen_server2.erl mirrored_supervisor.erl mochijson2.erl pmon.erl priority_queue.erl rabbit_amqqueue.erl rabbit_auth_mechanism.erl rabbit_authn_backend.erl rabbit_authz_backend.erl rabbit_backing_queue.erl rabbit_basic.erl rabbit_binary_generator.erl rabbit_binary_parser.erl rabbit_channel.erl rabbit_channel_interceptor.erl rabbit_command_assembler.erl rabbit_control_misc.erl rabbit_event.erl rabbit_exchange_decorator.erl rabbit_exchange_type.erl rabbit_framing_amqp_0_8.erl rabbit_framing_amqp_0_9_1.erl rabbit_heartbeat.erl rabbit_misc.erl rabbit_msg_store_index.erl rabbit_net.erl rabbit_networking.erl rabbit_nodes.erl rabbit_password_hashing.erl rabbit_policy_validator.erl rabbit_queue_collector.erl rabbit_queue_decorator.erl rabbit_queue_master_locator.erl rabbit_reader.erl rabbit_runtime_parameter.erl rabbit_writer.erl ssl_compat.erl supervisor2.erl time_compat.erl
src/rabbit_net.erl:27: can't find include lib "ssl/src/ssl_api.hrl"
src/rabbit_net.erl:99: record sslsocket undefined
src/rabbit_net.erl:109: record sslsocket undefined
src/rabbit_net.erl:114: record sslsocket undefined
src/rabbit_net.erl:119: record sslsocket undefined
src/rabbit_net.erl:124: record sslsocket undefined
src/rabbit_net.erl:137: record sslsocket undefined
src/rabbit_net.erl:142: record sslsocket undefined
src/rabbit_net.erl:156: record sslsocket undefined
src/rabbit_net.erl:165: record sslsocket undefined
src/rabbit_net.erl:170: record sslsocket undefined
src/rabbit_net.erl:175: record sslsocket undefined
src/rabbit_net.erl:178: record sslsocket undefined
src/rabbit_net.erl:181: record sslsocket undefined
src/rabbit_net.erl:207: record sslsocket undefined
src/rabbit_net.erl:210: record sslsocket undefined
src/rabbit_net.erl:213: record sslsocket undefined
src/rabbit_net.erl:251: record sslsocket undefined
erlang.mk:4919: recipe for target 'ebin/rabbit_common.app' failed
make[1]: *** [ebin/rabbit_common.app] Error 1
erlang.mk:4756: recipe for target 'app' failed
make: *** [app] Error 2

Version 3.6.10 includes mochiweb_util modules

Hi,

I ran into a problem with this library today. Version 3.6.10 (and supposedly also 3.6.11, but not 3.7.0) includes modules such as mochinum. This creates obvious problems when you have other dependencies who pulls in the real application/library containing these files, since release building fails (due to the same module being included twice).

What is the best way of getting rid of this?

  • Option 1: Wait until 3.7.0 is released. If this is more than about 5 days in the future, I'm not going to wait, so in that case this is not an option.
  • Option 2: Wait until 3.6.12. Same as above.
  • Option 3: I can't use the hex.pm package due to the above problem, so I can roll my own version of the package with the fix from 3.7.0 backported.

I'm also somewhat perplexed that the fix is about 8 months old, but has not yet found its way into a stable production package. Is there a reason for this? And also that someone copied mochi* utils in like this without renaming them in the first place.

Feature: Allow using naming patterns when creating a dynamic queue

Right now, when declaring queues without name, a name is generated using rabbit_guid:gen_secure(). For the sake of identifying these generated queues, it could be useful to use a naming pattern (much like mktemp does) that allows for easy identifying it and still keeping it 'random'.

The main use case would be to identify queues set up by the shovel plugin with more ease.

Error can't find include file "rabbit_framing.hrl" when build with rebar3

When i build rabbitmq-common with rebar3 . I have this error . Some one help me
rebar3 compile
===> Verifying dependencies...
===> Package <<"rebar_gdb_plugin">> not found. Fetching registry updates and trying again...
===> Updating package registry...
===> Writing registry to /home/tamnb/.cache/rebar3/hex/default/registry
===> Generating package index...
===> [cloudi_service_oauth1:1.5.1] Only existing version of cloudi_service_db_riak is 1.3.3 which does not match constraint ~> 1.5.1. Using anyway, but it is not guaranteed to work.
===> Writing index to /home/tamnb/.cache/rebar3/hex/default/packages.idx
===> Plugin rebar_gdb_plugin not available. It will not be used.
===> Compiling rabbit_common
===> Compiling /home/tamnb/workspace_Erlang/my_project/_build/default/lib/rabbit_common/src/rabbit_misc.erl failed
/home/tamnb/workspace_Erlang/my_project/_build/default/lib/rabbit_common/src/rabbit_misc.erl:19: can't find include file "rabbit_framing.hrl"

This is my config
{erl_opts, [debug_info,{parse_transform, lager_transform}]}.
{deps, [{lager,"3.0.2",
{git,"https://github.com/basho/lager.git",{tag,"3.0.2"}}},
{protobuffs,"0.8.2",
{git,"https://github.com/basho/erlang_protobuffs.git",{tag,"0.8.2"}}},
{eredis,"1.0.8",
{git,"https://github.com/wooga/eredis.git",{tag,"v1.0.8"}}},
{jiffy,"0.14.7",
{git,"https://github.com/davisp/jiffy.git",{tag,"0.14.7"}}},
{cowboy, "1.0.4",
{git, "https://github.com/ninenines/cowboy.git",{tag,"1.0.4"}}},
{rabbit_common, ".",
{git, "git://github.com/jbrisbin/rabbit_common.git", "rabbitmq-3.5.6"}},
{amqp_client,".
",
{git,"https://github.com/rabbitmq/rabbitmq-erlang-client.git",{tag,"rabbitmq_v3_5_3"}}}
]}.

{relx, [{release, { my_project, "0.1.0" },
[my_project,
sasl]},

    {sys_config, "./config/sys.config"},
    {vm_args, "./config/vm.args"},

    {dev_mode, true},
    {include_erts, false},

    {extended_start_script, true}]

}.

{profiles, [{prod, [{relx, [{dev_mode, false},
{include_erts, true}]}]
}]
}.

Non-random random number in rabbit_nodes.erl

There was a lot of log records like epmd: node name already occupied epmd-starter-443584618, and the number was always the 443584618. Like in https://xkcd.com/221/ )

random:uniform/1 stores PRNG state in process dictionary, and if random:seed/3 wasn't called, it initializes from the same constant seed.

Integrate Looking Glass

When we run make run-broker we want to conditionally enable the Looking Glass tracer with trace pattern of our choosing. For example, make run-broker RABBITMQ_TRACER=rabbit_tracer:connections would trace all the connection processes. Then once tracing is done, make profile will build callgrind.out files that can then be opened with qcachegrind.

Resolve interdependencies with rabbitmq-server

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.

UndefinedFunctionError :rabbit_channel.do/2

I get this error in every version after 3.6.9 when building the app:

12:03:02.663 [error] GenServer #PID<0.843.0> terminating
** (UndefinedFunctionError) function :rabbit_channel.do/2 is undefined (module :rabbit_channel is not available)
    :rabbit_channel.do(#PID<0.837.0>, {:"connection.start", 0, 9, [{"capabilities", :table, 
[{"publisher_confirms", :bool, true}, {"exchange_exchange_bindings", :bool, true}, {"basic.nack", 
:bool, true}, {"consumer_cancel_notify", :bool, true}, {"connection.blocked", :bool, true}, 
{"consumer_priorities", :bool, true}, {"authentication_failure_close", :bool, true}, 
{"per_consumer_qos", :bool, true}, {"direct_reply_to", :bool, true}]}, {"cluster_name", :longstr, 
"[email protected]_not_set.invalid"}, {"copyright", :longstr, "Copyright (C) 2007-2017 
Pivotal Software, Inc."}, {"information", :longstr, "Licensed under the MPL.  See 
http://www.rabbitmq.com/"}, {"platform", :longstr, "Erlang/OTP 19.3"}, {"product", :longstr, 
"RabbitMQ"}, {"version", :longstr, "3.6.11"}], "AMQPLAIN PLAIN", "en_US"})
    (amqp_client) deps/amqp_client/src/amqp_channels_manager.erl:66: :amqp_channels_manager.process_channel_frame/4
    (amqp_client) deps/amqp_client/src/amqp_main_reader.erl:142: :amqp_main_reader.process_frame/4
    (amqp_client) deps/amqp_client/src/amqp_main_reader.erl:90: :amqp_main_reader.handle_data/2
    (stdlib) gen_server.erl:616: :gen_server.try_dispatch/4
    (stdlib) gen_server.erl:686: :gen_server.handle_msg/6
    (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: {:inet_async, #Port<0.25641>, 1, {:ok, <<1, 0, 0, 0, 0, 2, 1, 0, 10, 0, 10, 0, 9, 0, 0, 1, 
220, 12, 99, 97, 112, 97, 98, 105, 108, 105, 116, 105, 101, 115, 70, 0, 0, 0, 199, 18, 112, 117, 98, 108, 
105, 115, 104, 101, 114, 95, ...>>}}

Dialyzer warns some undefined functions

We have an application with rebar3.
We got the warnings in the case of dialyzer configuration like below.
The environment is Erlang/OTP 18.

{dialyzer, [{plt_apps, all_deps},
            {warnings, [error_handling,
                        race_conditions,
                        unknown,
                        unmatched_returns,
                        no_improper_lists]}]}.
0: Unknown type rabbit_amqqueue:name/0
0: Unknown type rabbit_binding:key/0
0: Unknown type rabbit_exchange:name/0
0: Unknown type rabbit_exchange:type/0
0: Unknown type rabbit_framing:amqp_class_id/0
0: Unknown type rabbit_framing:amqp_exception/0
0: Unknown type rabbit_framing:amqp_method_name/0
0: Unknown type rabbit_framing:amqp_property_record/0
0: Unknown type rabbit_framing:amqp_table/0
0: Unknown type rabbit_guid:guid/0
0: Unknown type rabbit_networking:hostname/0
0: Unknown type rabbit_networking:ip_port/0
0: Unknown type rabbit_router:routing_key/0
0: Unknown type set:set/0

I tried to solve them.
Then, I found that these types are defined in simplegeo/rabbitmq-server.

How to solve them ?

build error on alpine

Hello,

I'm trying to build my Elixir project on an alpine image.
When I call make I got:

 ERLC  
src/ssl_compat.erl:47: Warning: ssl:connection_info/1: removed in 20.0; use ssl:connection_information/[1,2] instead
src/ssl_compat.erl:67: Warning: ssl:connection_info/1: removed in 20.0; use ssl:connection_information/[1,2] instead
awk: bad regex '{modules,': Repetition not preceded by valid expression
make[1]: *** [Makefile:80: ebin/rabbit_common.app] Error 1
make: *** [erlang.mk:4913: app] Error 2

I think about a non-supported feature in awk. Do you think it can be simple to support that ?
Thanks,
Marc-Antoine

If test dependency fails to build, CT fails with undef.

Sometimes when test dependencies for plugins (rabbitmq_ct_helpers or rabbitmq_ct_client_helpers) fail to build, the test suite still starts and could fail with undef error.
It's not very clear from the test results what was wrong. And the build error can be lost make test output.
It probably makes sense to stop make test when test dependency could not be built.

Channel stats records aren't cleaned properly when connections are brutally killed

When rabbitmq-perf-test producers crashed with out-of-memory errors, 97 channels were left behind:

Error on AMQP connection <0.3361.0> (10.0.16.31:50086 -> 10.0.16.23:5672, vhost: '8961921b-36f6-48e0-9553-0351c7783376', user: '600878f0-8001-41e3-8198-986d941db2eb', state: running), channel 5:error while terminating:
killed

There were 97 instances of the above error in the rabbit log.

Coerce input user tags to atoms

New CLI sends user tags as binaries and those are store as-is. Unfortunately, other components (e.g. management) don't expect binaries. rabbit_auth_backend_internal:set_tags should convert the input (if necessary) into the correct type.

To reproduce:

With the "old" CLI:

./rabbitmqctl set_user_tags guest administrator management

Logs:

2016-11-10 17:03:12.737 [info] <0.1022.0> Setting user tags for user 'guest' to [administrator,management]

With new CLI:

./rabbitmqctl set_user_tags guest administrator management

Logs:

2016-11-10 17:03:06.971 [info] <0.1015.0> Setting user tags for user 'guest' to [<<"administrator">>,<<"management">>]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.