-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RabbitMQ 3.13.0 nodes with peer discovery enabled fails to start in an IPv6-only environment #10728
Comments
Hi! Thank you for the report. How do you specify the path to the inetrc file? The peer discovery subsystem starts a temporary intermediate node to query some properties of remote nodes. I suspect that this temporary node doesn't use this inetrc file. |
Here is the container log: https://8dff850f95026878e224-be64ab2c1211c8399b7ac2efe4751a63.ssl.cf2.rackcdn.com/911094/2/check/kolla-ansible-rocky9-multinode-ipv6/4952d5c/primary/logs/container_logs/rabbitmq.txt We just put erl_inetrc under /etc/rabbitmq/erl_inetrc with this content: https://8dff850f95026878e224-be64ab2c1211c8399b7ac2efe4751a63.ssl.cf2.rackcdn.com/911094/2/check/kolla-ansible-rocky9-multinode-ipv6/4952d5c/primary/logs/kolla_configs/rabbitmq/erl_inetrc Is there something more we should be doing? |
No, this is a limitation in the way that temporary node is started probably. I will try to reproduce locally. |
I'm sure you're right @dumbbell |
This may be worth delaying |
Currently RMQ 3.13 fails on ipv6 multinode scenario, use 3.12 from 2023.1 until [1] gets resolved. [1]: rabbitmq/rabbitmq-server#10728 Change-Id: If11710e99cf2e340e558d68e2071c1bb16825e55
* Update kolla-ansible from branch 'master' to f65e4257dd8574c31b0a2a451f4a254e8f273160 - Merge "CI: Use 2023.2 image for rabbitmq on ipv6 scenario" - CI: Use 2023.2 image for rabbitmq on ipv6 scenario Currently RMQ 3.13 fails on ipv6 multinode scenario, use 3.12 from 2023.1 until [1] gets resolved. [1]: rabbitmq/rabbitmq-server#10728 Change-Id: If11710e99cf2e340e558d68e2071c1bb16825e55
I'm starting to look at this issue today, bu I can't find where this Could you please share the output of the following two commands?
|
we set this via the environment, see the jinja template here: https://github.com/openstack/kolla-ansible/blob/master/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 (line 10) I don't currently have shell access to the CI env where this fails, but as you can see from the git history this part of the code didn't change since 2019, so here are the commands you wanted the output from, from a similar environment, but with a slightly older rmq release.
and the other command (your command missed a ' at the end):
HTH in the debugging process. |
Thank you very much! Yes, it definitely helps. I fixed the command in my comment, thanks. |
As a side question, why do you set both This won’t change the debuggint or fix anything, I’m just curious. |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
@mnasiadka, @artificial-intelligence: I prepared a patch in pull request #10759. I’m not sure yet how to create a testcase for this. Could you please give it a try in your environment? |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
@dumbbell I'm afraid we have no experience in building a package with that PR content - is there an option you would make an rpm or deb package available for testing? |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
@mnasiadka: Sure. I took a shortcut and replaced the https://people.freebsd.org/~dumbbell/rabbitmq/rabbitmq-server_3.13.0-1_all.deb |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
I used the new ported code and it didn't solve my problem. The error message is as follows:
my erl_inetrc:
For other configurations, see: #10840 |
@dormanze: Thank you for testing! The patch was not ready anyway and should not have been merged. I reverted it and will work on an improved patch. |
@dumbbell Thank you for your reply. Please let me know if you need me to cooperate with uploading any configuration. |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
Hi @dumbbell , any progress on this issue? We desperately need to adapt to 3.13. If there is a fix, please let me know in time to cooperate with the verification. Thank you very much. |
@dormanze it's incredibly rude to nudge open source maintainers to hurry up to deliver a fix in a tool you very likely do not pay for, and never have. We have a PR ready but it has shown an improvement only in some environments. If you are desperately in need of a fix, you are welcome to contribute it, pay for commercial support, or patiently wait for the maintainers to do it. |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
@dormanze: The bug fix is probably ok, but I'm still working on the testsuite to have more confidence. It is challenging to test the part of peer discovery that triggered the regression @mnasiadka and you hit. The current test I have for IPv6 looks good, but having the equivalent for TLS inter-node communication is slightly harder to get right. Your specific error is interesting. You used single quotes to quote the |
I verified the addition of the double quotes and my problem was indeed solved. Thank you very much.@dumbbell |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728.
I’ve merged the patch to the If you have a chance, please test the |
[Why] As shown in #10728, in an IPv6-only environment, `kernel` name resolution must be configured through an inetrc file. The temporary hidden node must be configured exactly like the main node (and all nodes in the cluster in fact) to allow communication. Thus we must pass the same inetrc file to that temporary hidden node. This wasn’t the case before this patch. [How] We query the main node’s kernel to see if there is any inetrc file set and we use the same on the temporary hidden node’s command line. While here, extract the handling of the `proto_dist` module from the TLS code. This parameter may be used outside of TLS like this IPv6-only environment. V2: Accept `inetrc` filenames as atoms, not only lists. `kernel` seems to accept them. This makes a better user experience for users used to Bourne shell quoting not knowing that single quotes have a special meaning in Erlang. Fixes #10728. (cherry picked from commit 8425afa)
The patch was integrated into the 3.13.x release branch and will be part of RabbitMQ 3.13.2. |
Describe the bug
In OpenStack Kolla-Ansible we support ipv6-only OpenStack deployments, including RabbitMQ.
The following config worked up until RMQ 3.13:
https://8dff850f95026878e224-be64ab2c1211c8399b7ac2efe4751a63.ssl.cf2.rackcdn.com/911094/2/check/kolla-ansible-rocky9-multinode-ipv6/4952d5c/primary/logs/kolla_configs/rabbitmq/rabbitmq.conf
https://8dff850f95026878e224-be64ab2c1211c8399b7ac2efe4751a63.ssl.cf2.rackcdn.com/911094/2/check/kolla-ansible-rocky9-multinode-ipv6/4952d5c/primary/logs/kolla_configs/rabbitmq/index.html
Logs and crash dump here: https://8dff850f95026878e224-be64ab2c1211c8399b7ac2efe4751a63.ssl.cf2.rackcdn.com/911094/2/check/kolla-ansible-rocky9-multinode-ipv6/4952d5c/primary/logs/kolla/rabbitmq/index.html
Reproduction steps
...
Expected behavior
Runs correctly
Additional context
No response
The text was updated successfully, but these errors were encountered: