Commit Graph

31435 Commits

Author SHA1 Message Date
David Ansari bb7ead235e Fix test case block_connack_timeout
The new client library version returns reason
`{shutdown, connack_timeout}` in the monitor message.

Delete the monitor since the test case already asserts on the
`{error, connack_timeout}` return value from emqtt:connect/1.
2025-09-02 08:36:06 +02:00
David Ansari bfa8f72033 Bump emqtt to v1.14.6 2025-09-02 08:36:06 +02:00
Michael Klishin 323ce94fd8
rabbitmq_shovel_prometheus: handle single atom shovel states
Namely, 'starting'.

Previously, a Prometheus scraping endpoint hit
just at the right moment (when a shovel was
in the 'starting' state) would produce
a function_clause exception.
2025-09-02 01:55:23 -04:00
Michael Klishin fa98e459fc
rabbitmq.conf.example: cosmetics 2025-09-01 12:26:25 -04:00
Michal Kuratczyk 1b4cff21b3
Skip local shovel tests when mixed with 3.13 (#14475) 2025-09-01 15:50:44 +02:00
David Ansari def157a105
Merge pull request #14438 from rabbitmq/stream-queue-leader-fix
Fix issue where leader is not returned after stream declaration
2025-09-01 15:32:22 +02:00
D Corbacho 0977ad2dde
Local shovels: skip tests in mixed-version (#14473)
Local shovels require rabbitmq_4_0_0 feature flag, so it can't run
in mixed-version clusters with 3.13.x
2025-09-01 13:25:51 +02:00
dependabot[bot] 225e3617d9
[skip ci] Bump org.apache.qpid:qpid-jms-client
Bumps the dev-deps group with 1 update in the /deps/rabbit/test/amqp_jms_SUITE_data directory: org.apache.qpid:qpid-jms-client.


Updates `org.apache.qpid:qpid-jms-client` from 2.7.0 to 2.8.0

---
updated-dependencies:
- dependency-name: org.apache.qpid:qpid-jms-client
  dependency-version: 2.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-30 18:02:44 +00:00
Michael Klishin 30fb9c1128
Re-arrange shovel test suites
* Use more descriptive names
 * Prefix unit test suites accordingly
 * Reuse await_credit/1
 * await_credit/1 in a flakey test
2025-08-29 18:34:51 -04:00
Karl Nilsson 4d7a3fed1e QQ: exclude delivery_limit from policy repair comparison.
As it cannot be updated as part of a policy when it is disabled (-1)
 it needs to be excluded from comparison
2025-08-29 09:49:07 +01:00
Michael Davis 9414209d67
rabbit_ff_controller: Raise log levels of first-time boot messages
These lines can be very useful for determining why a subset of feature
flags is/isn't being enabled on boot. They're currently at debug level.
However a first-time boot of an unclustered node is a rare event, so
these lines shouldn't be noisy.
2025-08-28 20:03:37 -04:00
Michael Klishin 9d7ee9639f
Merge pull request #14448 from rabbitmq/test-feature-flags-in-management-ui-in-main
New Selenium suite for testing feature flags in management UI
2025-08-28 10:24:44 -04:00
Péter Gömöri bfa38d00b0 Fix docs: list_unresponsive_queues queue-timeout is in seconds
The unit was changed in commit 829a918c
2025-08-28 14:06:05 +02:00
Marcial Rosales a809c3000e Test feature flags in management ui with selenium 2025-08-28 11:02:06 +02:00
Michael Klishin 88ea37b290
Shovel: use a constant for the runtime parameter component 2025-08-27 17:26:07 -04:00
Karl Nilsson e5891e24de Fix issue where leader is not returned after stream declaration
This would affect the meta data that is returned when declaring
a queue through AMQP.
2025-08-27 14:40:08 +01: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 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
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 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 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 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 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
Arnaud Cogoluègnes ba8745ab4b
Close stream connection if vhost not authorized after secret update 2025-08-19 16:47:47 +02:00
Michael Klishin ce8fa317cf
Merge branch 'main' into local-shovel
Peer Discovery AWS Integration Test / Integration Test (push) Has been cancelled Details
2025-08-19 10:44:39 -04:00
Arnaud Cogoluègnes 02449bd5d3
Close stream connection if secret update fails 2025-08-19 14:58:04 +02:00
Diana Parra Corbacho 212ae64c2d Local shovels: place behind rabbitmq_4.0.0 feature flag 2025-08-19 11:52:08 +02:00
Michael Klishin 03b28891d5
Make rabbit_ct_broker_helpers:configure_metadata_store/1 handle relative feature flag op lists
The function relies on such a relative list itself but
does not assume that a test suite could use it.
2025-08-18 20:33:16 -04:00
Michael Klishin 1d9c156829
rabbit.forced_feature_flags_on_init: document relative operations
{rel, ListToAdd, ListToSkip} values can be particularly
useful in certain suits.
2025-08-18 19:04:32 -04:00
Michael Klishin a1a49ff447
Doc cosmetics: mnevis => khepri_db 2025-08-18 19:00:13 -04:00
Michael Klishin d475a0e95f
Rename a Shovel key to 'shovel.local.max_credit' 2025-08-18 11:42:00 -04:00
Diana Parra Corbacho 4452872042 Local shovels: Update default credit 2025-08-18 16:50:31 +02:00
Diana Parra Corbacho a419ab3708 Shovels: re-order confirmation and unacked update 2025-08-18 16:40:03 +02:00
dependabot[bot] 3665ee3a03
[skip ci] bump the dev-deps group across 1 directory with 2 updates
Bumps the dev-deps group with 2 updates in the /deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_spring_boot_kotlin directory: [org.jetbrains.kotlin:kotlin-test](https://github.com/JetBrains/kotlin) and org.jetbrains.kotlin:kotlin-maven-allopen.


Updates `org.jetbrains.kotlin:kotlin-test` from 2.2.0 to 2.2.10
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.2.0...v2.2.10)

Updates `org.jetbrains.kotlin:kotlin-maven-allopen` from 2.2.0 to 2.2.10

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-test
  dependency-version: 2.2.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-deps
- dependency-name: org.jetbrains.kotlin:kotlin-maven-allopen
  dependency-version: 2.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: dev-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-16 18:08:59 +00:00
Michael Klishin 43f38ce546
rabbitmq_shovel.schema: remove an outdated link 2025-08-15 11:49:37 -04:00
Diana Parra Corbacho 6bb649a9df Local shovels: single acks
For some reason, multiple acknowledgments are really slow when using credit flow v2
2025-08-14 15:40:40 +02:00
Diana Parra Corbacho 382fac3e34 Local shovels: remove stashed credit request 2025-08-14 12:39:26 +02:00
Jean-Sébastien Pédron 4f1c6f0bde
clustering_recovery_SUITE: Add `recover_after_partition_with_leader` testcase
[Why]
The testcase tries to replicate the steps described in issue #12934.

[How]
It uses intermediate Erlang nodes between the common_test control node
and the RabbitMQ nodes, using `peer` standard_io communication. The goal
is to make sure the common_test control node doesn't interfere with the
nodes the RabbitMQ nodes can see, despite the blocking of the Erlang
distribution connection.

So far, I couldn't reproduce the problem reported in #12934. @mkuratczyk
couldn't either, so it might have been fixed as a side effect of another
change...

References #12934.
2025-08-14 12:10:52 +02:00
Luke Bakken 3e235a6316
Do not "pre convert" `running_nodes` to strings
Follow-up to #14118
2025-08-13 12:01:18 -07:00
Diana Parra Corbacho 3349321c58 Local shovels: fix credit flow 2025-08-13 19:30:19 +02:00
Diana Parra Corbacho 02fcbc0dc5 Local shovels: optimisation 2025-08-13 14:13:12 +02:00
Diana Parra Corbacho edf0e3c1ff Local shovel: remove unused clause 2025-08-13 13:54:52 +02:00
Diana Parra Corbacho 07a085365e Local shovels: optimisations 2025-08-13 12:59:40 +02:00
Diana Parra Corbacho e9d767b84b Local shovels: fix credit flow 2025-08-13 12:19:36 +02:00
Diana Parra Corbacho 0b1aefd4ae Local shovels: move unacked_message_q inside source config 2025-08-13 11:49:44 +02:00
Luke Bakken a87445cda6 Use `YRL_ERLC_OPTS` instead of `ERL_COMPILER_OPTIONS`
This is a follow-up to commit 93db480bc4

`erlang.mk` supports the `YRL_ERLC_OPTS` variable to set `erlc`-specific
compiler options when processing `.yrl` and `.xrl` files. By using this
variable, it allows `make RMQ_ERLC_OPTS=` to disable the
`+deterministic` option. This allows using `c()` in the erl shell to
recompile modules on the fly when a cluster is running.

You can see that, when `make RMQ_ERLC_OPTS=` is run, these generated
files were produced with the `+deterministic` option, because their
`-file` directives use only basenames.

* `deps/rabbit/src/rabbit_amqp_sql_lexer.erl`
* `deps/rabbit/src/rabbit_amqp_sql_parser.erl`

```
-file("rabbit_amqp_sql_parser.yrl", 0).
-module(rabbit_amqp_sql_parser).
-file("rabbit_amqp_sql_parser.erl", 3).
-export([parse/1, parse_and_scan/1, format_error/1]).
-file("rabbit_amqp_sql_parser.yrl", 122).
```

This commit also ignores those two files, as they will always be
auto-generated.
2025-08-12 12:00:54 -07:00
Michael Klishin 64e5a6a7e5
Merge pull request #14373 from rabbitmq/mk-reduce-rabbitmq-plugins-log-rate
Do not log every transient (or Erlang/OTP-provided) dependency when listing plugins
2025-08-12 15:00:42 -04:00
Jean-Sébastien Pédron 23588b665a
rabbit_access_control: Check configured auth backends are enabled at boot time
[Why]
If a user configures an auth backend module, but doesn't enabled the
plugin that provides it, it will get a crash and a stacktrace when
authentication is performed. The error is not helpful to understand what
the problem is.

[How]
We add a boot step that go through the configured auth backends and
query the core of RabbitMQ and the plugins. If an auth backend is
provided by a plugin, the plugin must be enabled to consider the auth
backend to be valid.

In the end, at least one auth backend must be valid, otherwise the boot
is aborted.

If only some of the configured auth backends were filtered out, but
there are still some valid auth backends, we store the filtered list in
the application environment variable so that
authentication/authorization doesn't try to use them later.

We also report invalid auth backends in the logs:

* Info message for a single invalid auth backend:

    [info] <0.213.0> The `rabbit_auth_backend_ldap` auth backend module is configured. However, the `rabbitmq_auth_backend_ldap` plugin must be enabled in order to use this auth backend. Until then it will be skipped during authentication/authorization

* Warning message when some auth backends were filtered out:

    [warning] <0.213.0> Some configured backends were dropped because their corresponding plugins are disabled. Please look at the info messages above to learn which plugin(s) should be enabled. Here is the list of auth backends kept after filering:
    [warning] <0.213.0> [rabbit_auth_backend_internal]

* Error message when no auth backends are valid:

    [error] <0.213.0> None of the configured auth backends are usable because their corresponding plugins were not enabled. Please look at the info messages above to learn which plugin(s) should be enabled.

V2: In fact, `rabbit_plugins:is_enabled/1` indicates if a plugin is
    running, not if it is enabled... The new check runs as a boot step
    and thus is executed before plugins are started. Therefore we can't
    use this API. Instead, we use `rabbit_plugins:enabled_plugins/0'
    which lists explicitly enabled plugins. The drawback is that in the
    auth backend is enabled implicitly because it is a dependency of
    another explicitly enabled plugin, the check will still consider it
    is disabled and thus abort the boot.

Fixes #13783.
2025-08-12 18:38:28 +02:00
Jean-Sébastien Pédron a8bef770a5
rabbit_plugins: Add `which_plugin/1` to query which plugin provides a module
[Why]
This will be used in a later commit to find the auth backend plugin that
provides a configured auth backend module.

[How]
We go through the list of available plugins, regardless if they are
enabled or not, then look up the given module in the list of modules
associated with each plugin's application.
2025-08-12 18:38:28 +02:00
Jean-Sébastien Pédron 6d3d297598
rabbit_plugins: Add `list/0` to get the list of plugins
... without having to pass a plugins path.

[Why]
It's painful to have to get the plugins path, then pass it to `list/1`
every time. It's also more difficult to discover how to use
`rabbit_plugins` to get that list of plugins.
2025-08-12 18:38:28 +02:00
Michael Klishin 30d78a490b
Do not log every transient dependency when listing plugins
The code path in question is executed every time
rabbit_plugins:list/2 (e.g. rabbit_plugins:is_enabled/1)
is used, which with some distributed plugins can
happen once or several times a minute.

Given the maturity of the plugins subsystem, we
arguably can drop those messages.
2025-08-12 12:05:48 -04:00
Michal Kuratczyk c34c803754
Remove flake in prometheus_http_SUITE (#14367)
Sometimes the metrics for streams created by `stream_pub_sub_metrics`
would be returned when the next test starts, breaking the assertions.
2025-08-12 15:03:20 +02:00
Diana Parra Corbacho 8c9f79fb36 Shovel management: add local shovels 2025-08-11 21:37:05 +02:00
Diana Parra Corbacho bb5e1d95d9 Local shovels: handle credit on sender side 2025-08-11 21:37:05 +02:00
Diana Parra Corbacho 78167f0fb7 Local shovel: more tests 2025-08-11 21:37:05 +02:00
Michael Klishin 414da5d146 local_dynamic_SUITE: ignore two expected crash reports in the logs 2025-08-11 21:37:05 +02:00
Diana Parra Corbacho be061cd54b Local shovel: fix credit handling order 2025-08-11 21:37:05 +02:00
Diana Parra Corbacho a0d42ea31d Local shovels: remove unused prefetch count 2025-08-11 21:37:05 +02:00
Diana Parra Corbacho a855146b99 Local shovel: handle destination queue events 2025-08-11 21:37:05 +02:00
Michael Klishin 30f67e0f7a local_dynamic_SUITE: await credit for publishing links
This elimiantes a race condition between the destination
granting the sender link credit and the rest of what
the test does.

Note: the amqp_utils module in server core cannot be easily
moved to, say, rabbit_ct_helpers because it combines
two kinds of helpers that belong to two of our
CT helper subprojects.

So we've copied two small functions from it for
the needs of this suite.
2025-08-11 21:37:05 +02:00
Diana Parra Corbacho b5a2dac758 Local shovels: grant credit after confirming 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho 2e2dc4b2dd Shovel tests: ignore nodename
CI uses a different hostname
2025-08-11 21:37:04 +02:00
Diana Parra Corbacho ae6a36a7b2 Local shovels: remove unused parameter
Fixes a dialyzer failure
2025-08-11 21:37:04 +02:00
Diana Parra Corbacho 085c0ccc70 Local shovels: remove rabbit_log and switch to LOG_ macros 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho c3ec85fafb Local shovel: finish credit flow handling
This implementation intentionally ignores the
drain property of AMQP 1.0 flow control because
local shovels does not use this feature, and no
external component can "enable" it, so we can
simply ignore it.

Pair: @dcorbacho.

Co-authored-by: Diana Parra Corbacho <diana.parra-corbacho@broadcom.com>
Co-authored-by: Michael Klishin <michaelklishin@icloud.com>
2025-08-11 21:37:04 +02:00
Diana Parra Corbacho f381993db0 Local shovels: renew credit 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho a112aa5214 Local shovels: set link credit 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho 860eb6c499 Local shovel: fix initial delivery count and state handling 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho c8127ea3ab Local shovel: Initialise delivery count for credit 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho acbd4b465b Local shovel: use queue name to filter source/dest messages 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho 6fce51ddff WIP 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho 444b5644b2 Local shovels 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho c8840785d9 AMQP10 shovel: make bare message inmutable 2025-08-11 21:37:04 +02:00
Diana Parra Corbacho ccd3bde810 amqp10_msg: type spec & code refactor 2025-08-11 21:37:04 +02:00