Skip to content

Make library and tests compatible with RabbitMQ 4.3 (deprecated-feature denials) #1931

Description

@lukebakken

Summary

Audit the library and its integration tests for RabbitMQ 4.3 compatibility and remove the CI version pin.

Background

RabbitMQ 4.3.0 (release notes) advanced several deprecated features from permitted_by_default to denied_by_default. While reviewing #1913, CI against the default rabbitmq:management image (4.3 at the time of this writing) failed across roughly 20 integration tests with:

AMQP close-reason, initiated by Peer, code=541,
text='INTERNAL_ERROR - Feature `transient_nonexcl_queues` is deprecated.
By default, this feature is not permitted anymore.'

4.3 changes relevant to this client

From the 4.3 release notes, the deprecated-feature phase transitions and removals that can affect AMQP 0-9-1 clients:

  • transient_nonexcl_queues (denied by default): declaring a queue with durable=false, exclusive=false is rejected.
  • global_qos (denied by default): basic.qos with global=true is rejected.
  • queue_master_locator (denied by default): the x-queue-master-locator queue argument is rejected.
  • CQv1 storage removed: queue arguments x-queue-mode (any value) and x-queue-version=1 fail on 4.3.
  • amqp_address_v1 and amqp_filter_set_bug (denied by default) are AMQP 1.0 specific and do not apply to this 0-9-1 client.

Known hits in this repository

Library code:

  • projects/RabbitMQ.Client/Impl/AutorecoveringChannel.cs:181 calls BasicQosAsync(0, _prefetchCountGlobal, global: true, ...) during recovery. Any user who had configured a global-QoS prefetch before a disconnect will fail autorecovery on 4.3.
  • projects/RabbitMQ.Client/Headers.cs exposes public const string XQueueMode = "x-queue-mode" as part of the public API. Users who set this header against a 4.3 broker will fail queue declaration.

Tests:

  • Several tests in projects/Test/Integration/TestAsyncConsumer.cs (lines 218, 405, 495, 555 among others) declare queues with durable=false, exclusive=false, triggering transient_nonexcl_queues. This is not an exhaustive list; a repository-wide audit is needed.
  • The repository should be grepped for BasicQosAsync(..., true, ...), x-queue-master-locator, x-queue-mode, and x-queue-version to find additional cases.

Workaround in place

Commit 00e4d71 pins CI to RabbitMQ 4.2:

  • .ci/ubuntu/gha-setup.sh: use rabbitmq:4.2-management instead of rabbitmq:management.
  • .ci/windows/versions.json: pin to rabbitmq 4.2.6 + erlang 27.3.4.11.

This is a temporary unblocker.

Acceptance

  • CI runs against the latest supported major RabbitMQ release (currently 4.3) on both Ubuntu and Windows.
  • No tests rely on deprecated broker features that are denied by default on 4.3.
  • Library code paths (notably AutorecoveringChannel.BasicQosAsync with global: true) do not trigger denied_by_default deprecated features without explicit caller opt-in.
  • Public API surfaces that correspond to removed features (e.g. Headers.XQueueMode for CQv1) are documented as deprecated or marked [Obsolete] as appropriate.
  • Commit 00e4d71 is reverted.

Related

Metadata

Metadata

Assignees

Labels

C-bugCategory: This is a bug.C-enhancementCategory: Improvements

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions