rabbitmq-server/test
Karl Nilsson 3f3702514e
Quorum queues (#1706)
* Test queue.declare method with quorum type

[#154472130]

* Cosmetics

[#154472130]

* Start quorum queue

Includes ra as a rabbit dependency

[#154472152]

* Update info and list operations to use quorum queues

Basic implementation. Might need an update when more functionality
is added to the quorum queues.

[#154472152]

* Stop quorum queue

[#154472158]

* Restart quorum queue

[#154472164]

* Introduce UId in ra config to support newer version of ra

Improved ra stop

[#154472158]

* Put data inside VHost specific subdirs

[#154472164]

* Include ra in rabbit deps to support stop_app/start_app command

[#154472164]

* Stop quorum queues in `rabbit_amqqueue:stop/1`

[#154472158]

* Revert creation of fifo ets table inside rabbit

Now supported by ra

[#154472158]

* Filter quorum queues

[#154472158]

* Test restart node with quorum queues

[#154472164]

* Publish to quorum queues

[#154472174]

* Use `ra:restart_node/1`

[#154472164]

* Wait for stats to be published when querying quorum queues

[#154472174]

* Test publish and queue length after restart

[#154472174]

* Consume messages from quorum queues with basic.get

[#154472211]

* Autoack messages from quorum queues on basic.get

[#154472211]

* Fix no_ack meaning

no_ack = true is equivalent to autoack

[#154472211]

* Use data_dir as provided in the config

If we modify the data_dir, ra is not able to delete the data
when a queue is deleted

[#154472158]

* Remove unused code/variables

[#154472158]

* Subscribe to a quorum queue

Supports auto-ack

[#154472215]

* Ack messages consumed from quorum queues

[#154472221]

* Nack messages consumed from quorum queues

[#154804608]

* Use delivery tag as consumer tag for basic.get in quorum queues

[#154472221]

* Support for publisher confirms in quorum queues

[#154472198]

* Integrate with ra_fifo_client

* Clear queue state on queue.delete

[#154472158]

* Fix quorum nack

[#154804608]

* Test redelivery after nack

[#154804608]

* Nack without requeueing

[#154472225]

* Test multiple acks

[#154804208]

* Test multiple nacks

[#154804314]

* Configure dead letter exchange with queue declare

[#155076661]

* Use a per-vhost process to handle dead-lettering

Needs to hold state for quorum queues

[#155401802]

* Implement dead-lettering on nack'ed messages

[#154804620]

* Use queue name as a resource on message delivery

Fixes a previously introduced bug

[#154804608]

* Handle ra events on dead letter process

[#155401802]

* Pass empty queue states to queue delete

Queue deletion on vhost deletion calls directly to rabbit_amqqueue.
Queue states are not available, but we can provide an empty map as
in deletion the states are only needed for cleanup.

* Generate quorum queue stats and events

Consumer delete events are still pending, as depend on basic.cancel
(not implemented yet), ra terminating or ra detecting channel down

[#154472241]

* Ensure quorum mapping entries are available before metric emission

[#154472241]

* Configure data_dir, uses new RABBITMQ_QUORUM_BASE env var

[#154472152]

* Use untracked enqueues when sending wihtout channel

Updated several other calls missed during the quorum implementation

* Revert "Configure data_dir, uses new RABBITMQ_QUORUM_BASE env var"

This reverts commit f226121241.

* Configure data_dir, uses new RABBITMQ_QUORUM_DIR based on mnesia dir

[#154472152]

* Fix get_quorum_state

* Fix calculation of quorum pids

* Move all quorum queues code to its own module

[#154472241]

* Return an error when declaring a quorum queue with an incompatible argument

[#154521696]

* Cleanup of quorum queue state after queue delete

Also fixes some existing problems where the state wasn't properly
stored

[#155458625]

* Revert Revert "Declare a quorum queue using the queue.declare method"

* Remove duplicated state info

[#154472241]

* Start/stop multi-node quorum queue

[#154472231]
[#154472236]

* Restart nodes in a multi-node quorum cluster

[#154472238]

* Test restart and leadership takeover on multiple nodes

[#154472238]

* Wait for leader down after deleting a quorum cluster

It ensures an smooth delete-declare sequence without race
conditions. The test included here detected the situation before
the fix.

[#154472236]

* Populate quorum_mapping from mnesia when not available

Ensures that leader nodes that don't have direct requests can get
the mapping ra name -> queue name

* Cosmetics

* Do not emit core metrics if queue has just been deleted

* Use rabbit_mnesia:is_process_alive

Fixes bug introduced by cac9583e1b
[#154472231]

* Only try to report stats if quorum process is alive

* Implement cancel consumer callback

Deletes metrics and sends consumer deleted event

* Remove unnecessary trigger election call

ra:restart_node has already been called during the recovery

* Apply cancellation callback on node hosting the channel

* Cosmetics

* Read new fifo metrics which store directly total, ready and unack

* Implement basic.cancel for quorum queues

* Store leader in amqqueue record, report all in stats

[#154472407]

* Declare quorum queue in mnesia before starting the ra cluster

Record needs to be stored first to update the leader on ra effects

* Revert

* Purge quorum queues

[#154472182]

* Improve use of untracked_enqueue

Choose the persisted leader id instead of just using the id of the
leader at point of creation.

* Store quorum leader in the pid field of amqqueue record

Same as mirrored queues, no real need for an additional field

* Improve recovery

When a ra node has never been started on a rabbit node ensure it doesn't
fail but instead rebuilds the config and starts the node as a new node.

Also fix issue when a quorum queue is declared when one of it's rabbit
nodes are unavailable.

[#157054606]

* Cleanup core metrics after leader change

[#157054473]

* Return an error on sync_queue on quorum queues

[#154472334]

* Return an error on cancel_sync_queue on quorum queues

[#154472337]

* Fix basic_cancel and basic_consume return values

Ensure the quorum queue state is always returned by these functions.

* Restore arity of amqqeueu delete and purge functions.

This avoids some breaking changes in the cli.

* Fix bug returning consumers.

* remove rogue debug log

* Integrate ingress flow control with quorum queues

[#157000583]

* Configure commands soft limit

[#157000583]

* Support quorum pids on rabbit_mnesia:is_process_alive

* Publish consumers metric for quorum queues

* Whitelist quorum directory in is_virgin_node

Allow the quorum directoy to exist without affecting the status of the
Rabbit node.

* Delete queue_metrics on leader change.

Also run the become_leader handler in a separate process to avoid
blocking.

[#157424225]

* Report cluster status in quorum queue infos. New per node status command.

Related to
[#157146500]

* Remove quorum_mapping table

As we can store the full queue name resource as the cluster id of the
ra_fifo_client state we can avoid needed the quorum_mapping table.

* Fix xref issue

* Provide quorum members information in stats

[#157146500]

* fix unused variable

* quorum queue multiple declare handling

Extend rabbit_amqqueue:internal_declare/2 to indicate if the queue
record was created or exisiting. From this we can then provide a code
path that should handle concurrent queue declares of the same quorum
queue.

* Return an error when declaring exclusive/auto-delete quorum queue

[#157472160]

* Restore lost changes

from 79c9bd201e

* recover another part of commit

* fixup cherry pick

* Ra io/file metrics handler and stats publishing

[#157193081]

* Revert "Ra io/file metrics handler and stats publishing"

This reverts commit 05d15c7865.

* Do not issue confirms on node down for quorum queues.

Only a ra_event should be used to issue positive confirms for a quorum
queue.

* Ra stats publishing

[#157193081]

* Pick consumer utilisation from ra data

[#155402726]

* Handle error when deleting a quorum queue and all nodes are already down

This is in fact a successful deletion as all raft nodes are already 'stopped'

[#158656366]

* Return an error when declaring non-durable quorum queues

[#158656454]

* Rename dirty_query to committed_query

* Delete stats on leader node

[#158661152]

* Give full list of nodes to fifo client

* Handle timeout in quorum basic_get

* Fix unused variable error

* Handle timeout in basic get

[#158656366]

* Force GC after purge

[#158789389]

* Increase `ra:delete_cluster` timeout to 120s

* Revert "Force GC after purge"

This reverts commit 5c98bf2299.

* Add quorum member command

[#157481599]

* Delete quorum member command

[#157481599]

* Implement basic.recover for quorum queues

[#157597411]

* Change concumer utilisation

to use the new ra_fifo table and api.

* Set max quorum queue size limit

Defaults to 7, can be configured per queue on queue.declare
Nodes are selected randomly from the list of nodes, but the one
that is executing the queue.declare command

[#159338081]

* remove potentially unrelated changes to rabbit_networking

* Move ra_fifo to rabbit

Copied ra_fifo to rabbit and renamed it rabbit_fifo.

[#159338031]

* rabbit_fifo tidy up

* rabbit_fifo tidy up

* rabbit_fifo: customer -> consumer rename

* Move ra_fifo tests

[#159338031]

* Tweak quorum_queue defaults

* quorum_queue test reliability

* Optimise quorum_queue test suite.

By only starting a rabbit cluster per group rather than test.

[#160612638]

* Renamings in line with ra API changes

* rabbit_fifo fixes

* Update with ra API changes

Ra has consolidated and simplified it's api. These changes update to
confirm to that.

* Update rabbit_fifo with latest ra changes

* Clean up out of date comment

* Return map of states

* Add test case for basic.get on an empty queue

Before the previous patch, any subsequent basic.get would crash as
the map of states had been replaced by a single state.

* Clarify use of deliver tags on record_sent

* Clean up queues after testcase

* Remove erlang monitor of quorum queues in rabbit_channel

The eol event can be used instead

* Use macros to make clearer distinctions between quorum/classic queues

Cosmetic only

* Erase queue stats on 'eol' event

* Update to follow Ra's cluster_id -> cluster_name rename.

* Rename qourum-cluster-size

To quorum-initial-group-size

* Issue confirms on quorum queue eol

Also avoid creating quorum queue session state on queue operation
methods.

* Only classic queues should be notified on channel down

* Quorum queues do not support global qos

Exit with protocol error of a basic.consume for a quorum queue is issued
on a channel with global qos enabled.

* unused variable name

* Refactoring

Strictly enfornce that channels do not monitor quorum queues.

* Refactor foreach_per_queue in the channel.

To make it call classic and quorum queues the same way.

[#161314899]

* rename function

* Query classic and quorum queues separately

during recovery as they should not be marked as stopped during failed
vhost recovery.

* Remove force_event_refresh function

As the only user of this function, the management API no longer requires
it.

* fix errors

* Remove created_at from amqqueue record

[#161343680]

* rabbit_fifo: support AMQP 1.0 consumer credit

This change implements an alternative consumer credit mechanism similar
to AMQP 1.0 link credit where the credit (prefetch) isn't automatically
topped up as deliveries are settled and instead needs to be manually
increased using a credit command. This is to be integrated with the AMQP
1.0 plugin.

[#161256187]

* Add basic.credit support for quorum queues.

Added support for AMQP 1.0 transfer flow control.

[#161256187]

* Make quorum queue recover idempotent

So that if a vhost crashes and runs the recover steps it doesn't fail
because ra servers are still running.

[#161343651]

* Add tests for vhost deletion

To ensure quorum queues are cleaned up on vhost removal.

Also fix xref issue.

[#161343673]

* remove unused clause

* always return latest value of queue

* Add rabbitmq-queues scripts. Remove ra config from .bat scripts.

* Return error if trying to get quorum status of a classic queue.
2018-10-29 09:47:29 +00:00
..
config_schema_SUITE_data Expose cipher configuration to new style config format 2018-10-23 16:38:08 +03:00
temp (c) year 2015-05-24 04:19:23 +03:00
unit_SUITE_data Add tests for decrypting at application start 2016-10-06 17:15:42 +02:00
backing_queue_SUITE.erl Quorum queues (#1706) 2018-10-29 09:47:29 +00:00
channel_interceptor_SUITE.erl Add a test to check channel interceptor hang. 2018-01-24 12:44:40 +00:00
channel_operation_timeout_SUITE.erl Switch testsuite to common_test, part #3 2016-05-27 10:37:28 +02:00
channel_operation_timeout_test_queue.erl Use rabbit_queue_behaviour and callback 2017-11-02 07:49:42 -07:00
cluster_SUITE.erl Quorum queues (#1706) 2018-10-29 09:47:29 +00:00
cluster_formation_locking_SUITE.erl Rename test suite 2017-06-09 14:56:39 +01:00
cluster_rename_SUITE.erl Merge branch 'stable' 2017-04-02 21:52:52 +03:00
clustering_management_SUITE.erl An integration test for rabbit_nodes:await_running_count/2 2018-05-30 05:11:08 +03:00
config_schema_SUITE.erl Split config snippets test 2017-03-17 10:55:12 +00:00
confirms_rejects_SUITE.erl A testcase to verify confirms-rejects race condition fixed in 8b37501451. 2018-10-04 12:29:10 +01:00
crashing_queues_SUITE.erl crashing_queues_SUITE: Remove an unused variable 2017-06-02 09:42:36 +02:00
credential_validation_SUITE.erl (c) year 2017-04-02 21:46:42 +03:00
disconnect_detected_during_alarm_SUITE.erl test: A few minor style fixes 2017-03-09 12:48:56 +01:00
dummy_event_receiver.erl Switch testsuite to common_test, part #2 2016-05-27 10:37:28 +02:00
dummy_interceptor.erl Switch testsuite to common_test, part #4 2016-05-27 10:41:32 +02:00
dummy_runtime_parameters.erl Notify user who performed the action in all system events 2017-01-16 14:54:59 +00:00
dummy_supervisor2.erl Squash several small testsuites in unit_SUITE and unit_inbroker_SUITE 2016-05-27 10:37:28 +02:00
dynamic_ha_SUITE.erl Test that ha-promote-on-failure takes precedence over ha-promote-on-shutdown 2018-04-18 18:02:51 +01:00
eager_sync_SUITE.erl Merge branch 'stable' 2017-04-02 21:52:52 +03:00
failing_dummy_interceptor.erl Add a test to check channel interceptor hang. 2018-01-24 12:44:40 +00:00
gm_SUITE.erl Match shutdown as expected return value 2016-09-17 13:11:09 +01:00
health_check_SUITE.erl health_check_SUITE: Use a RabbitMQ nodename suffix 2016-09-29 14:53:51 +02:00
lazy_queue_SUITE.erl (c) year 2017-04-02 21:46:42 +03:00
list_consumers_sanity_check_SUITE.erl Use --no-table-headers with list_* CLI commands 2018-10-24 19:36:18 +03:00
list_queues_online_and_offline_SUITE.erl Use --no-table-headers with list_* CLI commands 2018-10-24 19:36:18 +03:00
many_node_ha_SUITE.erl (c) year 2017-04-02 21:46:42 +03:00
metrics_SUITE.erl Attempt to make metrics_SUITE more rubust 2017-03-06 11:30:48 +00:00
mirrored_supervisor_SUITE.erl Switch testsuite to common_test, part #1 2016-05-27 10:37:28 +02:00
mirrored_supervisor_SUITE_gs.erl Switch testsuite to common_test, part #1 2016-05-27 10:37:28 +02:00
msg_store_SUITE.erl Update configurable value test expectation 2017-02-18 09:52:35 +03:00
partitions_SUITE.erl Add test for cleaning up dead exclusive queues 2017-08-09 09:14:15 -07:00
peer_discovery_dns_SUITE.erl Add unit test for AAAA record. 2017-04-24 17:47:55 +02:00
per_user_connection_tracking_SUITE.erl Rename a function 2017-01-05 11:25:31 -08:00
per_vhost_connection_limit_SUITE.erl Test connection closures when vhost supervisor fails. 2017-07-19 10:07:34 +01:00
per_vhost_connection_limit_partitions_SUITE.erl per_vhost_connection_limit_SUITE: Add a test around cluster rename 2016-08-26 15:09:07 +02:00
per_vhost_msg_store_SUITE.erl Fix vhost dir location in test 2016-11-24 15:49:52 +00:00
per_vhost_queue_limit_SUITE.erl Add a test that ensures max queue limit isn't enforced for re-declaration 2016-09-21 16:06:59 +03:00
plugin_versioning_SUITE.erl Ignore pre-release version part in plugin version requirement validation 2017-01-26 14:09:08 +00:00
policy_SUITE.erl Use --no-table-headers with list_* CLI commands 2018-10-24 19:36:18 +03:00
priority_queue_SUITE.erl Typo/weird wording 2018-05-16 16:38:52 -03:00
priority_queue_recovery_SUITE.erl Use a separate connection per test 2016-06-27 14:29:39 +03:00
proxy_protocol_SUITE.erl Quorum queues (#1706) 2018-10-29 09:47:29 +00:00
queue_master_location_SUITE.erl Wording 2018-03-06 23:02:19 +03:00
quorum_queue_SUITE.erl Quorum queues (#1706) 2018-10-29 09:47:29 +00:00
rabbit_core_metrics_gc_SUITE.erl rabbit_core_metrics_gc_SUITE: Wait for condition in a loop 2017-07-12 11:27:24 +02:00
rabbit_dummy_protocol_connection_info.erl Pass in extra arguments to authentication backend 2017-06-22 15:53:48 +02:00
rabbit_fifo_SUITE.erl Quorum queues (#1706) 2018-10-29 09:47:29 +00:00
rabbit_ha_test_consumer.erl (c) year 2017-04-02 21:46:42 +03:00
rabbit_ha_test_producer.erl Add configurable queue overflow strategy 2017-10-02 14:34:47 +01:00
rabbitmq-env.bats Max number of atoms hasn't changed in 118b448631, back out my changes 2018-08-02 23:10:23 +03:00
rabbitmqctl_integration_SUITE.erl Use --no-table-headers with list_* CLI commands 2018-10-24 19:36:18 +03:00
rabbitmqctl_shutdown_SUITE.erl Shutdown cannot fail 2017-10-17 15:24:23 -07:00
simple_ha_SUITE.erl Ensure the new tests are run as part of the cluster_size_3 group 2017-10-02 14:34:47 +01:00
sup_delayed_restart_SUITE.erl Fix sup_delayed_restart_SUITE. 2017-05-30 13:19:40 +03:00
sync_detection_SUITE.erl sync_detection_SUITE: Wait for sync status for 30 seconds 2017-07-05 09:51:06 +02:00
term_to_binary_compat_prop_SUITE.erl Fix term_to_binary_compat tests in R16B03 2017-06-21 12:50:16 +01:00
topic_permission_SUITE.erl Change variable map key in context for topic authz 2017-05-26 11:03:27 +02:00
unit_SUITE.erl Make pg_local:member_died/2 more resilient 2018-09-15 01:57:07 +02:00
unit_inbroker_non_parallel_SUITE.erl Update test expections 2018-09-28 09:16:33 +01:00
unit_inbroker_parallel_SUITE.erl Make sure this user is actually passwordless 2018-01-10 22:12:51 +03:00
unit_log_config_SUITE.erl Syslog formatter is different from e.g. the file one now, update the tests 2018-05-22 12:03:11 +01:00
vhost_SUITE.erl Delete vhost at the end of this test 2018-09-28 02:55:50 +03:00
worker_pool_SUITE.erl (c) year 2017-04-02 21:46:42 +03:00