Commit Graph

59890 Commits

Author SHA1 Message Date
Michael Klishin 7e0627de71
4.1.4 release notes cosmetics 2025-08-27 20:33:45 -04:00
Michael Klishin 53a129bbdd
Release notes cosmetics 2025-08-27 20:33:33 -04:00
Michael Klishin a937c326f3
4.2.0 release notes updates for beta.2 2025-08-27 20:28:57 -04:00
Michael Klishin b99aca71fe
A 4.1.4 release notes update 2025-08-27 20:28:05 -04:00
Michael Klishin 8a4604a83f
4.1.4 release notes 2025-08-27 20:08:36 -04:00
Michael Klishin 88ea37b290
Shovel: use a constant for the runtime parameter component 2025-08-27 17:26:07 -04:00
David Ansari 81caabc85e
Merge pull request #14389 from rabbitmq/refuse-link
Detach link for link-level errors
2025-08-27 17:29:02 +02:00
David Ansari eef470df37 Detach link for link-level errors
## What?
Refuse or detach the link instead of ending the session for many
link-level errors, including the following:
* Source queue or target exchange doesn't exist during attach
* Trying to consume from an exclusive queue on a different connection
* Delivery of message to a target queue fails
* Wrong delivery-id
* Wrong settled flag
* Queue declaration fails for dynamic queues
* Publishing to internal exchange

 ## Why?
Because many errors are scoped to a single terminus, detaching just that link
preserves the rest of the session’s links - avoiding needless disruption of
other traffic. AMQP 1.0’s error model is hierarchical; RabbitMQ should escalate to
ending the session only for session-level faults or if the client keeps
using a destroyed link.

 ## How?
Refuse link as per figure 2.33
2025-08-27 09:49:22 +02:00
Michael Klishin 1fc7390fc6
Merge pull request #14434 from rabbitmq/mk-extract-dyn-shovel-supervisor
Shovel status: minor refactoring
2025-08-26 19:07:34 -04:00
Michael Klishin dee15f05a1
Shovel status: minor refactoring 2025-08-26 18:43:57 -04:00
Michael Klishin ab71a39fa8
Merge pull request #14428 from rabbitmq/local-shovels-requeue
Local shovel: handle unacked messages in queue down
2025-08-26 16:52:05 -04:00
Diana Parra Corbacho 68b98bfd3b Local shovels: ack messages not routed to any queue using exchanges 2025-08-26 20:24:30 +02:00
Michael Klishin 4688150a44
rabbitmq_shovel_management tests: whitelist expected exceptions in node logs 2025-08-26 13:37:50 -04:00
Michael Klishin 34befb6fe4
Merge pull request #14431 from rabbitmq/mk-bump-ra-to-2.17.1
Bump Ra to 2.17.1
2025-08-26 13:06:03 -04:00
Michael Klishin 88692efda1
Bump Ra to 2.17.1 2025-08-26 11:57:44 -04:00
Diana Parra Corbacho 1c72316d2e Local shovels: Handle multiple rejects on node down 2025-08-26 12:22:59 +02:00
Diana Parra Corbacho 0174f59c4e Local shovel: handle unacked messages in queue down
It affects messages routed through exchanges, when there is no target
queue configured in the shovel (it could be many queues as destination or none).
2025-08-26 11:27:14 +02:00
Michael Klishin bbb9aeaf0e
rabbit_shovel_operating_mode: coerce returned value to an atom 2025-08-25 19:59:59 -04:00
Michael Klishin c68ea370d2
rabbit_shovel_status: handle binary values 2025-08-25 19:43:10 -04:00
Michael Klishin fd1415b087
Merge pull request #14427 from rabbitmq/mk-shovel-library-mode-follow-up-1
Shovel: don't start top-level sups if running in library mode
2025-08-25 17:47:35 -04:00
Michael Klishin 5de3a57af3
Shovel: don't start top-level sups if running in library mode
References #14425
2025-08-25 17:22:21 -04:00
Michael Klishin 5a1bd25150
Merge pull request #14425 from rabbitmq/mk-shovel-library-mode
Shovel: introduce operating modes
2025-08-25 14:59:34 -04:00
Michael Klishin e61eb7a45e
More logging 2025-08-25 14:41:55 -04:00
Michael Klishin dbff137e4a
Address review feedback #14425 2025-08-25 14:14:45 -04:00
Michael Klishin 3043dc621f
Shovel: introduce operating modes
Sometimes you want a plugin to act as a library
and not an application. That is, for its modules
to be available at compile time and on a running
node but, say, the actual runtime parameter
handling and supervision of shovels to be
handled by another plugin.

Since we do not currently have a concept of
"library plugins" or "library dependencies",
this approach demonstrates one example of how
some plugins can be used as libraries.
2025-08-25 13:37:49 -04:00
D Corbacho e4bc525b5e
Merge pull request #14421 from rabbitmq/local-shovel-default-user-pass
Local shovels: Set default user/pass for uris like "amqp://"
2025-08-25 12:36:47 +02:00
Diana Parra Corbacho f990f7e271 Local shovels: Set default user/pass for uris like "amqp://" 2025-08-25 11:34:57 +02:00
Michael Klishin 7be4189deb
Merge pull request #14418 from rabbitmq/dependabot/maven/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_spring_boot/main/prod-deps-78890361d1
[skip ci] Bump the prod-deps group across 2 directories with 1 update
2025-08-23 22:44:55 -04:00
Michael Klishin 307b61f94b
Merge pull request #14415 from rabbitmq/shovel-10-delete-after
Shovel amqp1.0: fix delete after validation
2025-08-23 22:44:40 -04:00
dependabot[bot] 7a51ce7c88
[skip ci] Bump the prod-deps group across 2 directories with 1 update
Bumps the prod-deps group with 1 update in the /deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_spring_boot directory: [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot).
Bumps the prod-deps group with 1 update in the /deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_spring_boot_kotlin directory: [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot).


Updates `org.springframework.boot:spring-boot-starter-parent` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-parent` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-deps
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-23 18:31:14 +00:00
Diana Parra Corbacho b6d831b115 Shovel amqp1.0: fix delete after validation
Queue-length is not supported, so it should fail already during validation and
not shovel startup
2025-08-23 13:26:46 +02:00
Michael Klishin 425a9d604b
Merge pull request #14401 from rabbitmq/qq-drain-chunks
QQ: when invoking drain only shut down small batches at a time
2025-08-22 18:19:52 -04:00
Michael Klishin 42b3caa964
Cosmetics #14401 2025-08-21 19:08:31 -04:00
Karl Nilsson 87154f9b03 QQ: when invoking drain only shut down small batches at a time
Then wait for elections to complete before shutting further
members down.

This should help avoid election storms when enabling maintenance
mode.

Transfer khepri before queues to ensure meta data store is
ready to accept pid updates.

Some other state related tweaks.
2025-08-21 09:17:55 +01:00
Michael Klishin c7f6cad331
Shovel: ignore expected log exceptions in local_SUITE 2025-08-20 19:23:33 -04:00
Michael Klishin 4a2d2964af
Merge pull request #14410 from rabbitmq/set-max-open-files
Add RABBITMQ_MAX_OPEN_FILES variable to the startup script
2025-08-20 13:05:55 -04:00
Michael Klishin 0da03c901e
Merge pull request #14256 from rabbitmq/local-shovel
By @dcorbacho and me: introduce [cluster-]local shovels, adopt message containers for shovels
2025-08-20 11:26:26 -04:00
Michal Kuratczyk ad3fccf5eb
Add RABBITMQ_MAX_OPEN_FILES variable to the startup script
In some environments it may be tricky to run a command
before RabbitMQ is started. Kubernetes For example, upgrading
to Containerd 2.0 accidentally lowered the value of available
descriptors in GKE
(https://cloud.google.com/kubernetes-engine/docs/troubleshooting/known-issues#containerd-ulimit-reduced).
While this particular issue is resolved in newer GKE versions,
it was a good example of why a variable like this would be helpful.
Kubernetes-level solutions (on the node or with a daemonset) would
require a different level of access for users.
2025-08-20 15:28:54 +02:00
Jean-Sébastien Pédron 115623220c
Merge pull request #14407 from rabbitmq/fix-topic-permissions-definitions-import
rabbit_definitions: Import topic permissions after exchanges
2025-08-20 13:57:36 +02:00
Jean-Sébastien Pédron 5bcbfadcd6
rabbit_db_exchange: Relax conditions when creating an exchange with Khepri
[Why]
When the module wanted to create an exchange in Khepri, it used
`rabbit_khepri:create/2` which ensures that the tree node doesn't exist
before. If the tree node exists, it expects it to contain an exchange
record which is returned to the caller, indicating an exchange with that
name already exists.

However, there are several other resources stored under an exchange tree
node, like bindings and topic permissions.

In particular, during a definitions import, topic permissions used to be
imported before exchanges. This caused a crash because the write of the
topic permission automatically created a parent tree node for the
exchange it dpends on, but without an exchange record obviously (see
previous commit).

[How]
As an addition improvement to the previous commit, we change the
conditions: instead of matching on the fact the tree node doesn't exist,
the module also accepts that the tree node exists but has no payload.
Under any of these conditions, the exchange is considered to be new and
written to Khepri.
2025-08-20 12:05:59 +02:00
Jean-Sébastien Pédron 92c572e887
rabbit_definitions: Import topic permissions after exchanges
[Why]
Topic permissions depend on an exchange, in addition to a user and a
vhost like other permissions.

This fixes a bug where an exchange imported after a topic permission
that depends on it caused the following crash when Khepri is used:

    {case_clause,{error,{khepri,mismatching_node,
                                #{node_name => <<"exchange_name">>,
                                  node_props => #{payload_version => 1},
                                  node_path =>
                                      [rabbitmq,vhosts,<<"/">>,exchanges,
                                       <<"exchange_name">>],
                                  condition => {if_node_exists,false},
                                  node_is_target => true}}}}

The crash comes from the fact that the exchange code expect to either
create the tree node in Khepri for that exchange, or there is an
existing tree node holding an exchange tree node. Here, there was a tree
node created implicitly when the topic permission was stored, but that
tree node didn't have an exchange record (because the exchange was not
imported yet).

[How]
We simply swap the import of topic permissions and exchanges.
2025-08-20 11:52:38 +02:00
Michael Klishin b76e634e07
Merge pull request #14402 from rabbitmq/stream-close-connection-if-update-secret-fails
Close stream connection if secret update fails
2025-08-19 14:57:00 -04:00
Michael Klishin c77751e620
Merge pull request #14403 from rabbitmq/stream-close-connection-if-unauthorized-vhost-after-secret-update
Close stream connection if unauthorized vhost after secret update
2025-08-19 14:56:15 -04:00
Michael Klishin 173876c982
More log message edits #14403 2025-08-19 14:06:15 -04:00
Michael Klishin a9f7bf1fbc
Log virtual host name if updated token lacks the permissions for it #14403 2025-08-19 14:05:31 -04:00
Michael Klishin e7634679d1
More log message edits #14403 2025-08-19 13:58:47 -04:00
Michael Klishin 55d6419bcd
More log message edits #14403 2025-08-19 13:44:50 -04:00
Michael Klishin 147dfb0e70
Log message wording #14402
(cherry picked from commit 987f5519e6)
2025-08-19 13:17:36 -04:00
Michael Klishin 987f5519e6
Log message wording #14402 2025-08-19 13:09:57 -04:00
Arnaud Cogoluègnes ba8745ab4b
Close stream connection if vhost not authorized after secret update 2025-08-19 16:47:47 +02:00