summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <klishinm@vmware.com>2022-03-21 01:21:56 +0400
committermergify-bot <noreply@mergify.com>2022-03-20 22:01:00 +0000
commit8e9c56df39aea833b5302d1216f2b6ca0fda2aed (patch)
tree00dde5ce9c56a1ada08e41bd4910f06006b2a715
parent3bcb6881908d572de3041fe7d0a6b51ef48a44f3 (diff)
downloadrabbitmq-server-git-mergify/bp/v3.9.x/pr-4317.tar.gz
(cherry picked from commit c38a3d697d83cafa376592a9aa213347ae1a68af) (cherry picked from commit 515780f5d4e036efb2c568214d7b1b505d5b560b) # Conflicts: # deps/rabbit/src/rabbit_classic_queue_index_v2.erl # deps/rabbit/src/rabbit_classic_queue_store_v2.erl # deps/rabbit/src/rabbit_fifo.erl # deps/rabbit/src/rabbit_fifo.hrl # deps/rabbit/src/rabbit_fifo_dlx.erl # deps/rabbit/src/rabbit_fifo_dlx.hrl # deps/rabbit/src/rabbit_fifo_dlx_client.erl # deps/rabbit/src/rabbit_fifo_dlx_sup.erl # deps/rabbit/src/rabbit_fifo_dlx_worker.erl # deps/rabbit/src/rabbit_fifo_v1.erl # deps/rabbit/test/classic_queue_prop_SUITE.erl # deps/rabbit/test/quorum_queue_SUITE.erl # deps/rabbit/test/rabbit_fifo_dlx_SUITE.erl # deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl # deps/rabbit_common/src/rabbit_date_time.erl # deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.hrl # deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl # deps/rabbitmq_stream/test/rabbit_stream_manager_SUITE.erl
-rw-r--r--README.md2
-rw-r--r--deps/amqp10_client/src/amqp10_client.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client.hrl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_app.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_connection.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_connection_sup.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_connections_sup.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_frame_reader.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_session.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_sessions_sup.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_sup.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_client_types.erl2
-rw-r--r--deps/amqp10_client/src/amqp10_msg.erl2
-rw-r--r--deps/amqp10_client/test/activemq_ct_helpers.erl2
-rw-r--r--deps/amqp10_client/test/mock_server.erl2
-rw-r--r--deps/amqp10_client/test/msg_SUITE.erl2
-rw-r--r--deps/amqp10_client/test/system_SUITE.erl2
-rw-r--r--deps/amqp10_common/src/amqp10_binary_generator.erl2
-rw-r--r--deps/amqp10_common/src/amqp10_binary_parser.erl2
-rw-r--r--deps/amqp10_common/src/amqp10_framing.erl2
-rw-r--r--deps/amqp_client/include/amqp_client.hrl2
-rw-r--r--deps/amqp_client/include/amqp_client_internal.hrl2
-rw-r--r--deps/amqp_client/src/amqp_auth_mechanisms.erl2
-rw-r--r--deps/amqp_client/src/amqp_channel.erl2
-rw-r--r--deps/amqp_client/src/amqp_channel_sup.erl2
-rw-r--r--deps/amqp_client/src/amqp_channel_sup_sup.erl2
-rw-r--r--deps/amqp_client/src/amqp_channels_manager.erl2
-rw-r--r--deps/amqp_client/src/amqp_client.erl2
-rw-r--r--deps/amqp_client/src/amqp_connection.erl2
-rw-r--r--deps/amqp_client/src/amqp_connection_sup.erl2
-rw-r--r--deps/amqp_client/src/amqp_connection_type_sup.erl2
-rw-r--r--deps/amqp_client/src/amqp_direct_connection.erl2
-rw-r--r--deps/amqp_client/src/amqp_direct_consumer.erl2
-rw-r--r--deps/amqp_client/src/amqp_gen_connection.erl2
-rw-r--r--deps/amqp_client/src/amqp_gen_consumer.erl2
-rw-r--r--deps/amqp_client/src/amqp_main_reader.erl2
-rw-r--r--deps/amqp_client/src/amqp_network_connection.erl4
-rw-r--r--deps/amqp_client/src/amqp_rpc_client.erl2
-rw-r--r--deps/amqp_client/src/amqp_rpc_server.erl2
-rw-r--r--deps/amqp_client/src/amqp_selective_consumer.erl2
-rw-r--r--deps/amqp_client/src/amqp_sup.erl2
-rw-r--r--deps/amqp_client/src/amqp_uri.erl2
-rw-r--r--deps/amqp_client/src/rabbit_routing_util.erl2
-rw-r--r--deps/amqp_client/src/uri_parser.erl2
-rw-r--r--deps/amqp_client/test/system_SUITE.erl2
-rw-r--r--deps/amqp_client/test/unit_SUITE.erl2
-rw-r--r--deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl2
-rw-r--r--deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl2
-rw-r--r--deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl2
-rw-r--r--deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl2
-rw-r--r--deps/rabbit/docs/rabbitmq-diagnostics.82
-rw-r--r--deps/rabbit/docs/rabbitmq-echopid.82
-rw-r--r--deps/rabbit/docs/rabbitmq-env.conf.52
-rw-r--r--deps/rabbit/docs/rabbitmq-plugins.82
-rw-r--r--deps/rabbit/docs/rabbitmq-queues.82
-rw-r--r--deps/rabbit/docs/rabbitmq-server.82
-rw-r--r--deps/rabbit/docs/rabbitmq-service.82
-rw-r--r--deps/rabbit/docs/rabbitmq-upgrade.82
-rw-r--r--deps/rabbit/docs/rabbitmqctl.82
-rw-r--r--deps/rabbit/include/gm_specs.hrl2
-rwxr-xr-xdeps/rabbit/scripts/rabbitmq-streams2
-rw-r--r--deps/rabbit/scripts/rabbitmq-streams.bat2
-rwxr-xr-xdeps/rabbit/scripts/rabbitmq-tanzu2
-rw-r--r--deps/rabbit/scripts/rabbitmq-tanzu.bat2
-rw-r--r--deps/rabbit/src/amqqueue.erl2
-rw-r--r--deps/rabbit/src/amqqueue_v1.erl2
-rw-r--r--deps/rabbit/src/background_gc.erl2
-rw-r--r--deps/rabbit/src/code_server_cache.erl2
-rw-r--r--deps/rabbit/src/gatherer.erl2
-rw-r--r--deps/rabbit/src/gm.erl2
-rw-r--r--deps/rabbit/src/internal_user.erl2
-rw-r--r--deps/rabbit/src/internal_user_v1.erl2
-rw-r--r--deps/rabbit/src/lqueue.erl2
-rw-r--r--deps/rabbit/src/mirrored_supervisor_sups.erl2
-rw-r--r--deps/rabbit/src/pg_local.erl2
-rw-r--r--deps/rabbit/src/pid_recomposition.erl2
-rw-r--r--deps/rabbit/src/rabbit.erl2
-rw-r--r--deps/rabbit/src/rabbit_access_control.erl2
-rw-r--r--deps/rabbit/src/rabbit_alarm.erl2
-rw-r--r--deps/rabbit/src/rabbit_amqqueue.erl2
-rw-r--r--deps/rabbit/src/rabbit_amqqueue_process.erl2
-rw-r--r--deps/rabbit/src/rabbit_amqqueue_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_amqqueue_sup_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_auth_backend_internal.erl2
-rw-r--r--deps/rabbit/src/rabbit_auth_mechanism_amqplain.erl2
-rw-r--r--deps/rabbit/src/rabbit_auth_mechanism_cr_demo.erl2
-rw-r--r--deps/rabbit/src/rabbit_auth_mechanism_plain.erl2
-rw-r--r--deps/rabbit/src/rabbit_autoheal.erl2
-rw-r--r--deps/rabbit/src/rabbit_backing_queue.erl2
-rw-r--r--deps/rabbit/src/rabbit_basic.erl2
-rw-r--r--deps/rabbit/src/rabbit_binding.erl2
-rw-r--r--deps/rabbit/src/rabbit_boot_steps.erl2
-rw-r--r--deps/rabbit/src/rabbit_channel.erl2
-rw-r--r--deps/rabbit/src/rabbit_channel_interceptor.erl2
-rw-r--r--deps/rabbit/src/rabbit_channel_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_channel_sup_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_channel_tracking.erl2
-rw-r--r--deps/rabbit/src/rabbit_channel_tracking_handler.erl2
-rw-r--r--deps/rabbit/src/rabbit_classic_queue_index_v2.erl1275
-rw-r--r--deps/rabbit/src/rabbit_classic_queue_store_v2.erl494
-rw-r--r--deps/rabbit/src/rabbit_client_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_connection_helper_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_connection_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_connection_tracking.erl2
-rw-r--r--deps/rabbit/src/rabbit_connection_tracking_handler.erl2
-rw-r--r--deps/rabbit/src/rabbit_control_pbe.erl2
-rw-r--r--deps/rabbit/src/rabbit_core_ff.erl2
-rw-r--r--deps/rabbit/src/rabbit_core_metrics_gc.erl2
-rw-r--r--deps/rabbit/src/rabbit_credential_validation.erl2
-rw-r--r--deps/rabbit/src/rabbit_credential_validator.erl2
-rw-r--r--deps/rabbit/src/rabbit_credential_validator_accept_everything.erl2
-rw-r--r--deps/rabbit/src/rabbit_credential_validator_min_password_length.erl2
-rw-r--r--deps/rabbit/src/rabbit_credential_validator_password_regexp.erl2
-rw-r--r--deps/rabbit/src/rabbit_dead_letter.erl2
-rw-r--r--deps/rabbit/src/rabbit_diagnostics.erl2
-rw-r--r--deps/rabbit/src/rabbit_direct.erl2
-rw-r--r--deps/rabbit/src/rabbit_direct_reply_to.erl2
-rw-r--r--deps/rabbit/src/rabbit_disk_monitor.erl2
-rw-r--r--deps/rabbit/src/rabbit_epmd_monitor.erl2
-rw-r--r--deps/rabbit/src/rabbit_event_consumer.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_decorator.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_parameters.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_type_direct.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_type_fanout.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_type_headers.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_type_invalid.erl2
-rw-r--r--deps/rabbit/src/rabbit_exchange_type_topic.erl2
-rw-r--r--deps/rabbit/src/rabbit_feature_flags.erl4
-rw-r--r--deps/rabbit/src/rabbit_ff_extra.erl2
-rw-r--r--deps/rabbit/src/rabbit_ff_registry.erl4
-rw-r--r--deps/rabbit/src/rabbit_fhc_helpers.erl2
-rw-r--r--deps/rabbit/src/rabbit_fifo.erl6
-rw-r--r--deps/rabbit/src/rabbit_fifo.hrl23
-rw-r--r--deps/rabbit/src/rabbit_fifo_client.erl2
-rw-r--r--deps/rabbit/src/rabbit_fifo_dlx.erl361
-rw-r--r--deps/rabbit/src/rabbit_fifo_dlx.hrl21
-rw-r--r--deps/rabbit/src/rabbit_fifo_dlx_client.erl91
-rw-r--r--deps/rabbit/src/rabbit_fifo_dlx_sup.erl34
-rw-r--r--deps/rabbit/src/rabbit_fifo_dlx_worker.erl642
-rw-r--r--deps/rabbit/src/rabbit_fifo_v0.erl2
-rw-r--r--deps/rabbit/src/rabbit_fifo_v1.erl2248
-rw-r--r--deps/rabbit/src/rabbit_file.erl2
-rw-r--r--deps/rabbit/src/rabbit_framing.erl2
-rw-r--r--deps/rabbit/src/rabbit_global_counters.erl2
-rw-r--r--deps/rabbit/src/rabbit_guid.erl2
-rw-r--r--deps/rabbit/src/rabbit_health_check.erl2
-rw-r--r--deps/rabbit/src/rabbit_limiter.erl2
-rw-r--r--deps/rabbit/src/rabbit_log_tail.erl2
-rw-r--r--deps/rabbit/src/rabbit_looking_glass.erl2
-rw-r--r--deps/rabbit/src/rabbit_maintenance.erl2
-rw-r--r--deps/rabbit/src/rabbit_memory_monitor.erl2
-rw-r--r--deps/rabbit/src/rabbit_metrics.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_coordinator.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_master.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_misc.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_mode.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_mode_all.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_mode_exactly.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_mode_nodes.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_slave.erl2
-rw-r--r--deps/rabbit/src/rabbit_mirror_queue_sync.erl2
-rw-r--r--deps/rabbit/src/rabbit_mnesia.erl2
-rw-r--r--deps/rabbit/src/rabbit_mnesia_rename.erl2
-rw-r--r--deps/rabbit/src/rabbit_msg_file.erl2
-rw-r--r--deps/rabbit/src/rabbit_msg_store.erl2
-rw-r--r--deps/rabbit/src/rabbit_msg_store_ets_index.erl2
-rw-r--r--deps/rabbit/src/rabbit_msg_store_gc.erl2
-rw-r--r--deps/rabbit/src/rabbit_networking.erl2
-rw-r--r--deps/rabbit/src/rabbit_node_monitor.erl2
-rw-r--r--deps/rabbit/src/rabbit_nodes.erl2
-rw-r--r--deps/rabbit/src/rabbit_osiris_metrics.erl2
-rw-r--r--deps/rabbit/src/rabbit_parameter_validation.erl2
-rw-r--r--deps/rabbit/src/rabbit_password.erl2
-rw-r--r--deps/rabbit/src/rabbit_password_hashing_md5.erl2
-rw-r--r--deps/rabbit/src/rabbit_password_hashing_sha256.erl2
-rw-r--r--deps/rabbit/src/rabbit_password_hashing_sha512.erl2
-rw-r--r--deps/rabbit/src/rabbit_peer_discovery.erl2
-rw-r--r--deps/rabbit/src/rabbit_peer_discovery_classic_config.erl2
-rw-r--r--deps/rabbit/src/rabbit_peer_discovery_dns.erl2
-rw-r--r--deps/rabbit/src/rabbit_plugins.erl2
-rw-r--r--deps/rabbit/src/rabbit_policies.erl2
-rw-r--r--deps/rabbit/src/rabbit_policy.erl2
-rw-r--r--deps/rabbit/src/rabbit_policy_merge_strategy.erl2
-rw-r--r--deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl2
-rw-r--r--deps/rabbit/src/rabbit_prelaunch_feature_flags.erl2
-rw-r--r--deps/rabbit/src/rabbit_prelaunch_logging.erl4
-rw-r--r--deps/rabbit/src/rabbit_prequeue.erl2
-rw-r--r--deps/rabbit/src/rabbit_priority_queue.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_consumers.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_decorator.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_index.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_location_client_local.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_location_min_masters.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_location_random.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_location_validator.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_master_location_misc.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_master_locator.erl2
-rw-r--r--deps/rabbit/src/rabbit_queue_type_util.erl2
-rw-r--r--deps/rabbit/src/rabbit_quorum_memory_manager.erl2
-rw-r--r--deps/rabbit/src/rabbit_quorum_queue.erl2
-rw-r--r--deps/rabbit/src/rabbit_ra_registry.erl2
-rw-r--r--deps/rabbit/src/rabbit_reader.erl2
-rw-r--r--deps/rabbit/src/rabbit_recovery_terms.erl2
-rw-r--r--deps/rabbit/src/rabbit_restartable_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_router.erl2
-rw-r--r--deps/rabbit/src/rabbit_runtime_parameters.erl2
-rw-r--r--deps/rabbit/src/rabbit_ssl.erl2
-rw-r--r--deps/rabbit/src/rabbit_stream_queue.erl2
-rw-r--r--deps/rabbit/src/rabbit_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_sysmon_handler.erl2
-rw-r--r--deps/rabbit/src/rabbit_sysmon_minder.erl2
-rw-r--r--deps/rabbit/src/rabbit_table.erl2
-rw-r--r--deps/rabbit/src/rabbit_trace.erl2
-rw-r--r--deps/rabbit/src/rabbit_tracking.erl2
-rw-r--r--deps/rabbit/src/rabbit_upgrade.erl2
-rw-r--r--deps/rabbit/src/rabbit_upgrade_functions.erl2
-rw-r--r--deps/rabbit/src/rabbit_upgrade_preparation.erl2
-rw-r--r--deps/rabbit/src/rabbit_variable_queue.erl2
-rw-r--r--deps/rabbit/src/rabbit_version.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost_limit.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost_msg_store.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost_process.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost_sup_sup.erl2
-rw-r--r--deps/rabbit/src/rabbit_vhost_sup_wrapper.erl2
-rw-r--r--deps/rabbit/src/rabbit_vm.erl2
-rw-r--r--deps/rabbit/src/supervised_lifecycle.erl2
-rw-r--r--deps/rabbit/src/tcp_listener.erl2
-rw-r--r--deps/rabbit/src/tcp_listener_sup.erl2
-rw-r--r--deps/rabbit/src/term_to_binary_compat.erl2
-rw-r--r--deps/rabbit/src/vhost.erl2
-rw-r--r--deps/rabbit/src/vhost_v1.erl2
-rw-r--r--deps/rabbit/test/backing_queue_SUITE.erl2
-rw-r--r--deps/rabbit/test/channel_interceptor_SUITE.erl2
-rw-r--r--deps/rabbit/test/channel_operation_timeout_SUITE.erl2
-rw-r--r--deps/rabbit/test/channel_operation_timeout_test_queue.erl2
-rw-r--r--deps/rabbit/test/classic_queue_prop_SUITE.erl1157
-rw-r--r--deps/rabbit/test/cluster_SUITE.erl2
-rw-r--r--deps/rabbit/test/cluster_rename_SUITE.erl2
-rw-r--r--deps/rabbit/test/clustering_management_SUITE.erl2
-rw-r--r--deps/rabbit/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbit/test/consumer_timeout_SUITE.erl2
-rw-r--r--deps/rabbit/test/crashing_queues_SUITE.erl2
-rw-r--r--deps/rabbit/test/dead_lettering_SUITE.erl2
-rw-r--r--deps/rabbit/test/disconnect_detected_during_alarm_SUITE.erl2
-rw-r--r--deps/rabbit/test/dummy_event_receiver.erl2
-rw-r--r--deps/rabbit/test/dummy_runtime_parameters.erl2
-rw-r--r--deps/rabbit/test/dummy_supervisor2.erl2
-rw-r--r--deps/rabbit/test/dynamic_ha_SUITE.erl2
-rw-r--r--deps/rabbit/test/dynamic_qq_SUITE.erl2
-rw-r--r--deps/rabbit/test/eager_sync_SUITE.erl2
-rw-r--r--deps/rabbit/test/feature_flags_SUITE.erl2
-rw-r--r--deps/rabbit/test/feature_flags_SUITE_data/my_plugin/src/my_plugin.erl2
-rw-r--r--deps/rabbit/test/feature_flags_with_unpriveleged_user_SUITE.erl2
-rw-r--r--deps/rabbit/test/lazy_queue_SUITE.erl2
-rw-r--r--deps/rabbit/test/list_consumers_sanity_check_SUITE.erl2
-rw-r--r--deps/rabbit/test/list_queues_online_and_offline_SUITE.erl2
-rw-r--r--deps/rabbit/test/logging_SUITE.erl2
-rw-r--r--deps/rabbit/test/maintenance_mode_SUITE.erl2
-rw-r--r--deps/rabbit/test/many_node_ha_SUITE.erl2
-rw-r--r--deps/rabbit/test/message_size_limit_SUITE.erl2
-rw-r--r--deps/rabbit/test/metrics_SUITE.erl2
-rw-r--r--deps/rabbit/test/mirrored_supervisor_SUITE.erl2
-rw-r--r--deps/rabbit/test/mirrored_supervisor_SUITE_gs.erl2
-rw-r--r--deps/rabbit/test/msg_store_SUITE.erl2
-rw-r--r--deps/rabbit/test/peer_discovery_classic_config_SUITE.erl2
-rw-r--r--deps/rabbit/test/peer_discovery_dns_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_user_connection_channel_limit_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_user_connection_channel_limit_partitions_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_user_connection_channel_tracking_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_user_connection_tracking_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_vhost_connection_limit_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_vhost_connection_limit_partitions_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_vhost_msg_store_SUITE.erl2
-rw-r--r--deps/rabbit/test/per_vhost_queue_limit_SUITE.erl2
-rw-r--r--deps/rabbit/test/policy_SUITE.erl2
-rw-r--r--deps/rabbit/test/priority_queue_SUITE.erl2
-rw-r--r--deps/rabbit/test/priority_queue_recovery_SUITE.erl2
-rw-r--r--deps/rabbit/test/product_info_SUITE.erl2
-rw-r--r--deps/rabbit/test/proxy_protocol_SUITE.erl2
-rw-r--r--deps/rabbit/test/publisher_confirms_parallel_SUITE.erl2
-rw-r--r--deps/rabbit/test/queue_length_limits_SUITE.erl2
-rw-r--r--deps/rabbit/test/queue_master_location_SUITE.erl2
-rw-r--r--deps/rabbit/test/queue_parallel_SUITE.erl2
-rw-r--r--deps/rabbit/test/quorum_queue_SUITE.erl4
-rw-r--r--deps/rabbit/test/rabbit_auth_backend_context_propagation_mock.erl2
-rw-r--r--deps/rabbit/test/rabbit_core_metrics_gc_SUITE.erl2
-rw-r--r--deps/rabbit/test/rabbit_dummy_protocol_connection_info.erl2
-rw-r--r--deps/rabbit/test/rabbit_fifo_dlx_SUITE.erl201
-rw-r--r--deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl973
-rw-r--r--deps/rabbit/test/rabbit_foo_protocol_connection_info.erl2
-rw-r--r--deps/rabbit/test/rabbit_ha_test_consumer.erl2
-rw-r--r--deps/rabbit/test/rabbit_ha_test_producer.erl2
-rw-r--r--deps/rabbit/test/rabbitmq_queues_cli_integration_SUITE.erl2
-rw-r--r--deps/rabbit/test/rabbitmqctl_integration_SUITE.erl2
-rw-r--r--deps/rabbit/test/rabbitmqctl_shutdown_SUITE.erl2
-rw-r--r--deps/rabbit/test/signal_handling_SUITE.erl2
-rw-r--r--deps/rabbit/test/simple_ha_SUITE.erl2
-rw-r--r--deps/rabbit/test/single_active_consumer_SUITE.erl2
-rw-r--r--deps/rabbit/test/sync_detection_SUITE.erl2
-rw-r--r--deps/rabbit/test/term_to_binary_compat_prop_SUITE.erl2
-rw-r--r--deps/rabbit/test/topic_permission_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_access_control_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_access_control_authn_authz_context_propagation_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_access_control_credential_validation_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_amqp091_content_framing_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_amqp091_server_properties_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_app_management_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_cluster_formation_locking_mocks_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_collections_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_config_value_encryption_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_connection_tracking_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_credit_flow_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_disk_monitor_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_disk_monitor_mocks_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_file_handle_cache_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_gen_server2_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_gm_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_log_management_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_operator_policy_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_pg_local_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_plugin_directories_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_plugin_versioning_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_policy_validators_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_priority_queue_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_queue_consumers_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_stats_and_metrics_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_supervisor2_SUITE.erl2
-rw-r--r--deps/rabbit/test/unit_vm_memory_monitor_SUITE.erl2
-rw-r--r--deps/rabbit/test/upgrade_preparation_SUITE.erl2
-rw-r--r--deps/rabbit/test/vhost_SUITE.erl2
-rw-r--r--deps/rabbit_common/include/rabbit.hrl2
-rw-r--r--deps/rabbit_common/include/rabbit_core_metrics.hrl2
-rw-r--r--deps/rabbit_common/include/rabbit_memory.hrl2
-rw-r--r--deps/rabbit_common/include/rabbit_misc.hrl2
-rw-r--r--deps/rabbit_common/include/rabbit_msg_store.hrl2
-rw-r--r--deps/rabbit_common/include/resource.hrl2
-rw-r--r--deps/rabbit_common/src/app_utils.erl2
-rw-r--r--deps/rabbit_common/src/code_version.erl2
-rw-r--r--deps/rabbit_common/src/credit_flow.erl2
-rw-r--r--deps/rabbit_common/src/delegate.erl2
-rw-r--r--deps/rabbit_common/src/delegate_sup.erl2
-rw-r--r--deps/rabbit_common/src/file_handle_cache.erl2
-rw-r--r--deps/rabbit_common/src/file_handle_cache_stats.erl2
-rw-r--r--deps/rabbit_common/src/gen_server2.erl2
-rw-r--r--deps/rabbit_common/src/mirrored_supervisor.erl2
-rw-r--r--deps/rabbit_common/src/mirrored_supervisor_locks.erl2
-rw-r--r--deps/rabbit_common/src/mnesia_sync.erl2
-rw-r--r--deps/rabbit_common/src/pmon.erl2
-rw-r--r--deps/rabbit_common/src/priority_queue.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_amqp_connection.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_amqqueue_common.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_auth_backend_dummy.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_auth_mechanism.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_authn_backend.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_authz_backend.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_basic_common.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_binary_generator.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_binary_parser.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_cert_info.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_channel_common.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_command_assembler.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_control_misc.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_core_metrics.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_data_coercion.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_date_time.erl48
-rw-r--r--deps/rabbit_common/src/rabbit_env.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_error_logger_handler.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_event.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_exchange_type.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_heartbeat.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_json.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_log.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_misc.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_msg_store_index.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_net.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_nodes_common.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_password_hashing.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_pbe.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_peer_discovery_backend.erl4
-rw-r--r--deps/rabbit_common/src/rabbit_policy_validator.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_queue_collector.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_registry.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_registry_class.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_resource_monitor_misc.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_runtime.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_runtime_parameter.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_ssl_options.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_types.erl2
-rw-r--r--deps/rabbit_common/src/rabbit_writer.erl2
-rw-r--r--deps/rabbit_common/src/supervisor2.erl2
-rw-r--r--deps/rabbit_common/src/vm_memory_monitor.erl2
-rw-r--r--deps/rabbit_common/src/worker_pool.erl2
-rw-r--r--deps/rabbit_common/src/worker_pool_sup.erl2
-rw-r--r--deps/rabbit_common/src/worker_pool_worker.erl2
-rw-r--r--deps/rabbit_common/test/gen_server2_test_server.erl2
-rw-r--r--deps/rabbit_common/test/rabbit_env_SUITE.erl2
-rw-r--r--deps/rabbit_common/test/supervisor2_SUITE.erl2
-rw-r--r--deps/rabbit_common/test/unit_SUITE.erl2
-rw-r--r--deps/rabbit_common/test/unit_priority_queue_SUITE.erl2
-rw-r--r--deps/rabbit_common/test/worker_pool_SUITE.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListAmqp10ConnectionsCommand.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_channel.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_incoming_link.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_link_util.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_message.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_outgoing_link.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_process.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup_sup.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_util.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_writer.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/test/amqp10_client_SUITE.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/test/command_SUITE.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/test/proxy_protocol_SUITE.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_amqp1_0/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/include/rabbit_auth_backend_cache.hrl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache_app.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_dict.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented_stateless.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/test/rabbit_auth_backend_cache_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_cache/test/rabbit_auth_cache_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http.erl2
-rw-r--r--deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http_app.erl2
-rw-r--r--deps/rabbitmq_auth_backend_http/test/auth_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_http/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_http/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_app.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_util.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/test/rabbit_ldap_seed.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_ldap/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/Elixir.RabbitMQ.CLI.Ctl.Commands.AddUaaKeyCommand.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2_app.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/rabbit_oauth2_scope.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwk.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwt.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/src/wildcard.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/add_uaa_key_command_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/jwks_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/rabbit_auth_backend_oauth2_test_util.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/scope_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_backend_oauth2/test/wildcard_match_SUITE.erl2
-rw-r--r--deps/rabbitmq_auth_mechanism_ssl/README.md2
-rw-r--r--deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl.erl2
-rw-r--r--deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl_app.erl2
-rw-r--r--deps/rabbitmq_aws/priv/schema/rabbitmq_aws.schema2
-rw-r--r--deps/rabbitmq_aws/src/rabbitmq_aws_config.erl2
-rw-r--r--deps/rabbitmq_cli/lib/rabbit_common/records.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/auto_complete.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/command_behaviour.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_default_switches_and_timeout.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_no_positional_arguments.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positional_argument.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positive_integer_argument.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_two_positional_arguments.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/alarms.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/ansi.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/command_modules.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/data_coercion.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/distribution.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/erl_eval.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/exit_codes.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/feature_flags.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/helpers.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/listeners.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/log_files.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/memory.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_default_virtual_host.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_no_defaults.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/networking.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/node_name.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/os_pid.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/output.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/parser.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/paths.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/platform.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_running.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_stopped.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/validators.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/core/version.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_user_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_vhost_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/authenticate_user_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/autocomplete_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_online_nodes_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cancel_sync_queue_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_cluster_node_type_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_password_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_global_parameter_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_operator_policy_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_parameter_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_password_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_policy_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_topic_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_vhost_limits_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_connections_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_user_connections_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_connection_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_queue_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_user_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_vhost_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/environment_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_file_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/exec_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/export_definitions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_boot_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_gc_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_reset_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/forget_cluster_node_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/hipe_compile_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/import_definitions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/join_cluster_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_bindings_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_channels_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_ciphers_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_connections_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_consumers_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_exchanges_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_feature_flags_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_global_parameters_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_hashes_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_operator_policies_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_parameters_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_policies_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_queues_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_topic_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_unresponsive_queues_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_topic_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_users_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhost_limits_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhosts_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/node_health_check_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/ping_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/purge_queue_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rename_cluster_node_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/reset_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/restart_vhost_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/resume_listeners_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rotate_logs_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_cluster_name_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_disk_free_limit_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_global_parameter_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_log_level_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_operator_policy_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_parameter_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_policy_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_user_tags_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_limits_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_tags_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vm_memory_high_watermark_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/shutdown_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/start_app_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_app_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/suspend_listeners_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/sync_queue_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_off_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_on_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/update_cluster_nodes_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/version_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/info_keys.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/rpc_stream.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/alarms_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/certificates_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_alarms_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_certificate_expiration_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_local_alarms_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_connectivity_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_listener_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_protocol_listener_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_running_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_virtual_hosts_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/cipher_suites_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/command_line_arguments_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_event_stream_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/disable_auth_attempt_source_tracking_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/discover_peers_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/enable_auth_attempt_source_tracking_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_hash_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_sources_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_version_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_booting_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_running_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_network_interfaces_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_node_auth_attempt_stats_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/listeners_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_location_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_stream_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/maybe_stuck_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/memory_breakdown_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/observer_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/reset_node_auth_attempt_metrics_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolve_hostname_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolver_info_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/runtime_thread_stats_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/schema_info_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/server_version_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/tls_versions_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/diagnostics_helpers.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatter_behaviour.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/csv.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/erlang.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/formatter_helpers.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/inspect.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json_stream.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/msacc.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/plugins.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/pretty_table.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/report.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string_per_line.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/table.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/information_unit.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/directories_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/disable_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/enable_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/is_enabled.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/list_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/set_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/error_output.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/plugins_helpers.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/printer_behaviour.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/printers/file.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io_raw.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/add_member_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_mirror_sync_critical_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_quorum_critical_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/delete_member_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/grow_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/peek_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/quorum_status_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/rebalance_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/shrink_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/add_replica_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/set_stream_retention_policy_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/stream_status_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/time_unit.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/drain_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/post_upgrade_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/revive_command.ex2
-rw-r--r--deps/rabbitmq_cli/lib/rabbitmqctl.ex2
-rw-r--r--deps/rabbitmq_cli/test/ctl/clear_global_parameter_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/ctl/clear_policy_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/ctl/close_all_user_connections_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/ctl/resume_listeners_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/ctl/suspend_listeners_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/streams/add_replica_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs2
-rw-r--r--deps/rabbitmq_cli/test/streams/set_stream_retention_policy_command_test.exs2
-rw-r--r--deps/rabbitmq_consistent_hash_exchange/src/Elixir.RabbitMQ.CLI.Diagnostics.Commands.ConsistentHashExchangeRingStateCommand.erl2
-rw-r--r--deps/rabbitmq_consistent_hash_exchange/src/rabbit_exchange_type_consistent_hash.erl2
-rw-r--r--deps/rabbitmq_consistent_hash_exchange/test/rabbit_exchange_type_consistent_hash_SUITE.erl2
-rw-r--r--deps/rabbitmq_ct_client_helpers/src/rabbit_ct_client_helpers.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_control_helper.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_ct_config_schema.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_ct_proper_helpers.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_ct_vm_helpers.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/src/rabbit_mgmt_test_util.erl2
-rw-r--r--deps/rabbitmq_ct_helpers/test/terraform_SUITE.erl2
-rw-r--r--deps/rabbitmq_event_exchange/src/rabbit_event_exchange_decorator.erl2
-rw-r--r--deps/rabbitmq_event_exchange/src/rabbit_exchange_type_event.erl2
-rw-r--r--deps/rabbitmq_event_exchange/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_event_exchange/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_event_exchange/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/include/rabbit_federation.hrl2
-rw-r--r--deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl2
-rw-r--r--deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_app.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_db.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_event.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_exchange.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_link_util.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_parameters.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_pg.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_queue.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_status.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_sup.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_upstream.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl2
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_util.erl2
-rw-r--r--deps/rabbitmq_federation/test/exchange_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/test/federation_status_command_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/test/queue_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/test/rabbit_federation_status_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/test/rabbit_federation_test_util.erl2
-rw-r--r--deps/rabbitmq_federation/test/restart_federation_link_command_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation/test/unit_inbroker_SUITE.erl2
-rw-r--r--deps/rabbitmq_federation_management/src/rabbit_federation_mgmt.erl2
-rw-r--r--deps/rabbitmq_federation_management/test/federation_mgmt_SUITE.erl2
-rw-r--r--deps/rabbitmq_jms_topic_exchange/src/rabbit_jms_topic_exchange.erl2
-rw-r--r--deps/rabbitmq_jms_topic_exchange/src/sjx_evaluator.erl2
-rw-r--r--deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_SUITE.erl2
-rw-r--r--deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/include/rabbit_mgmt.hrl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_app.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_cors.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_csp.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_db.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_db_cache_sup.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_extension.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_headers.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_hsts.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_load_definitions.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_reset_handler.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_stats.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_sup.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_sup_sup.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_util.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_aliveness_test.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_auth_attempts.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_binding.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_bindings.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_channel.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_channels.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_channels_vhost.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_cluster_name.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_connection.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_connection_channels.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_connections.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_connections_vhost.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_consumers.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange_publish.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_exchanges.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_extensions.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flag_enable.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flags.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameter.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameters.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_alarms.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_certificate_expiration.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_local_alarms.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_mirror_sync_critical.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_quorum_critical.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_port_listener.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_protocol_listener.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_virtual_hosts.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_limit.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_limits.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_login.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_nodes.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policies.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policy.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_parameters.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_permission.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_user.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_vhost.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_policies.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_actions.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_get.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_purge.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_queues.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_rebalance_queues.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_redirect.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_reset.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permission.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_user.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_vhost.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_user.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limit.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limits.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_users.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_users_bulk_delete.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost_restart.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_vhosts.erl2
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_whoami.erl2
-rw-r--r--deps/rabbitmq_management/test/cache_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/clustering_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/clustering_prop_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/listener_config_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_http_health_checks_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_rabbitmqadmin_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_runtime_parameters_util.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_stats_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_test_db_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/rabbit_mgmt_test_unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_management/test/stats_SUITE.erl2
-rw-r--r--deps/rabbitmq_management_agent/include/rabbit_mgmt_agent.hrl2
-rw-r--r--deps/rabbitmq_management_agent/include/rabbit_mgmt_metrics.hrl2
-rw-r--r--deps/rabbitmq_management_agent/include/rabbit_mgmt_records.hrl2
-rw-r--r--deps/rabbitmq_management_agent/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ResetStatsDbCommand.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/exometer_slide.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_app.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_config.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup_sup.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_db_handler.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_gc.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_gc.erl2
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_storage.erl2
-rw-r--r--deps/rabbitmq_management_agent/test/exometer_slide_SUITE.erl2
-rw-r--r--deps/rabbitmq_management_agent/test/metrics_SUITE.erl2
-rw-r--r--deps/rabbitmq_management_agent/test/rabbit_mgmt_gc_SUITE.erl2
-rw-r--r--deps/rabbitmq_management_agent/test/rabbit_mgmt_slide_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/include/mqtt_machine.hrl2
-rw-r--r--deps/rabbitmq_mqtt/include/mqtt_machine_v0.hrl2
-rw-r--r--deps/rabbitmq_mqtt/include/rabbit_mqtt.hrl2
-rw-r--r--deps/rabbitmq_mqtt/include/rabbit_mqtt_frame.hrl2
-rw-r--r--deps/rabbitmq_mqtt/include/rabbit_mqtt_retained_msg_store.hrl2
-rw-r--r--deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DecommissionMqttNodeCommand.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/mqtt_machine.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/mqtt_machine_v0.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/mqtt_node.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_collector.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_info.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_sup.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_frame.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_dets.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_ets.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_noop.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer_sup.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_sup.erl2
-rw-r--r--deps/rabbitmq_mqtt/src/rabbit_mqtt_util.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/auth_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/cluster_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/command_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/java_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/java_SUITE_data/src/test/java/com/rabbitmq/mqtt/test/MqttTest.java2
-rw-r--r--deps/rabbitmq_mqtt/test/processor_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/proxy_protocol_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/rabbit_auth_backend_mqtt_mock.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/reader_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/retainer_SUITE.erl2
-rw-r--r--deps/rabbitmq_mqtt/test/util_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/README.md2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/priv/schema/rabbitmq_peer_discovery_aws.schema2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/src/rabbit_peer_discovery_aws.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/src/rabbitmq_peer_discovery_aws.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/test/aws_ecs_util.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/test/integration_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_aws/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_cleanup.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_app.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_sup.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_httpc.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_util.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_common/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/include/rabbit_peer_discovery_consul.hrl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_app.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_health_check_helper.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_sup.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_consul/test/rabbitmq_peer_discovery_consul_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE_data/rabbitmq_peer_discovery_etcd.snippets2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_etcd/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/include/rabbit_peer_discovery_k8s.hrl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/src/rabbit_peer_discovery_k8s.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_app.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_node_monitor.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_sup.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE_data/rabbitmq_peer_discovery_k8s.snippets2
-rw-r--r--deps/rabbitmq_peer_discovery_k8s/test/rabbitmq_peer_discovery_k8s_SUITE.erl2
-rw-r--r--deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_alarm_metrics_collector.erl2
-rw-r--r--deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl2
-rw-r--r--deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_global_metrics_collector.erl2
-rw-r--r--deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl2
-rw-r--r--deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl2
-rw-r--r--deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl2
-rw-r--r--deps/rabbitmq_prometheus/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_prometheus/test/rabbit_prometheus_http_SUITE.erl2
-rw-r--r--deps/rabbitmq_random_exchange/src/rabbit_exchange_type_random.erl2
-rw-r--r--deps/rabbitmq_recent_history_exchange/include/rabbit_recent_history.hrl2
-rw-r--r--deps/rabbitmq_recent_history_exchange/src/rabbit_exchange_type_recent_history.erl2
-rw-r--r--deps/rabbitmq_recent_history_exchange/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_sharding/src/rabbit_sharding_exchange_decorator.erl2
-rw-r--r--deps/rabbitmq_sharding/src/rabbit_sharding_exchange_type_modulus_hash.erl2
-rw-r--r--deps/rabbitmq_sharding/src/rabbit_sharding_interceptor.erl2
-rw-r--r--deps/rabbitmq_sharding/src/rabbit_sharding_policy_validator.erl2
-rw-r--r--deps/rabbitmq_sharding/src/rabbit_sharding_shard.erl2
-rw-r--r--deps/rabbitmq_sharding/src/rabbit_sharding_util.erl2
-rw-r--r--deps/rabbitmq_sharding/test/rabbit_hash_exchange_SUITE.erl2
-rw-r--r--deps/rabbitmq_sharding/test/rabbit_sharding_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/include/rabbit_shovel.hrl2
-rw-r--r--deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl2
-rw-r--r--deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ShovelStatusCommand.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_amqp091_shovel.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_behaviour.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_config.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_locks.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_sup.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_util.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_worker.erl2
-rw-r--r--deps/rabbitmq_shovel/src/rabbit_shovel_worker_sup.erl2
-rw-r--r--deps/rabbitmq_shovel/test/amqp10_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/amqp10_shovel_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/config_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/configuration_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/delete_shovel_command_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/dynamic_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/parameters_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/shovel_status_command_SUITE.erl2
-rw-r--r--deps/rabbitmq_shovel/test/shovel_test_utils.erl2
-rw-r--r--deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl2
-rw-r--r--deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.hrl8
-rw-r--r--deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl66
-rw-r--r--deps/rabbitmq_shovel_management/test/http_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/include/rabbit_stomp.hrl2
-rw-r--r--deps/rabbitmq_stomp/include/rabbit_stomp_frame.hrl2
-rw-r--r--deps/rabbitmq_stomp/include/rabbit_stomp_headers.hrl2
-rw-r--r--deps/rabbitmq_stomp/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_client_sup.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_connection_info.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_frame.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_internal_event_handler.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_reader.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_sup.erl2
-rw-r--r--deps/rabbitmq_stomp/src/rabbit_stomp_util.erl2
-rw-r--r--deps/rabbitmq_stomp/test/command_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/connections_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/frame_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/proxy_protocol_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/python_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/src/rabbit_stomp_client.erl2
-rw-r--r--deps/rabbitmq_stomp/test/src/rabbit_stomp_publish_test.erl2
-rw-r--r--deps/rabbitmq_stomp/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/topic_SUITE.erl2
-rw-r--r--deps/rabbitmq_stomp/test/util_SUITE.erl2
-rw-r--r--deps/rabbitmq_stream/README.adoc2
-rw-r--r--deps/rabbitmq_stream/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStreamConnectionsCommand.erl2
-rw-r--r--deps/rabbitmq_stream/src/rabbit_stream.erl2
-rw-r--r--deps/rabbitmq_stream/src/rabbit_stream_connection_sup.erl2
-rw-r--r--deps/rabbitmq_stream/src/rabbit_stream_metrics.erl2
-rw-r--r--deps/rabbitmq_stream/src/rabbit_stream_metrics_gc.erl2
-rw-r--r--deps/rabbitmq_stream/src/rabbit_stream_sup.erl2
-rw-r--r--deps/rabbitmq_stream/src/rabbit_stream_utils.erl2
-rw-r--r--deps/rabbitmq_stream/test/commands_SUITE.erl2
-rw-r--r--deps/rabbitmq_stream/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/ClusterSizeTest.java2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/FailureTest.java2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/Host.java2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/LeaderLocatorTest.java2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/StreamTest.java2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java2
-rw-r--r--deps/rabbitmq_stream/test/rabbit_stream_manager_SUITE.erl180
-rw-r--r--deps/rabbitmq_stream_common/README.adoc2
-rw-r--r--deps/rabbitmq_stream_management/README.adoc2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_connection_consumers_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_connection_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_connection_publishers_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_connections_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_connections_vhost_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_consumers_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_management_utils.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_mgmt_db.erl2
-rw-r--r--deps/rabbitmq_stream_management/src/rabbit_stream_publishers_mgmt.erl2
-rw-r--r--deps/rabbitmq_stream_management/test/http_SUITE.erl2
-rw-r--r--deps/rabbitmq_stream_management/test/http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_app.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_extension.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_sup.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_util.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_wm_ets_tables.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_wm_process.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_wm_processes.erl2
-rw-r--r--deps/rabbitmq_top/src/rabbit_top_worker.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_app.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_consumer.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_consumer_sup.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_files.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_mgmt.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_sup.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_traces.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_util.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_wm_file.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_wm_files.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_wm_trace.erl2
-rw-r--r--deps/rabbitmq_tracing/src/rabbit_tracing_wm_traces.erl2
-rw-r--r--deps/rabbitmq_tracing/test/rabbit_tracing_SUITE.erl2
-rw-r--r--deps/rabbitmq_trust_store/src/rabbit_trust_store.erl2
-rw-r--r--deps/rabbitmq_trust_store/src/rabbit_trust_store_app.erl2
-rw-r--r--deps/rabbitmq_trust_store/src/rabbit_trust_store_certificate_provider.erl2
-rw-r--r--deps/rabbitmq_trust_store/src/rabbit_trust_store_file_provider.erl2
-rw-r--r--deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl2
-rw-r--r--deps/rabbitmq_trust_store/src/rabbit_trust_store_sup.erl2
-rw-r--r--deps/rabbitmq_trust_store/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_trust_store/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_cowboy_middleware.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_cowboy_redirect.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_cowboy_stream_h.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_app.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_listing_handler.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_registry.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_sup.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_util.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_app.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_info.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_sup.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_middleware.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_stream_handler.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/test/src/rabbit_ws_test_util.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/test/src/rfc6455_client.erl2
-rw-r--r--deps/rabbitmq_web_mqtt/test/system_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_mqtt_examples/src/rabbit_web_mqtt_examples_app.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_app.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_handler.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_internal_event_handler.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_listener.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_middleware.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_stream_handler.erl2
-rw-r--r--deps/rabbitmq_web_stomp/src/rabbit_web_stomp_sup.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/amqp_stomp_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/config_schema_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/cowboy_websocket_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/proxy_protocol_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/raw_websocket_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/src/rabbit_ws_test_util.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/src/rfc6455_client.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/src/stomp.erl2
-rw-r--r--deps/rabbitmq_web_stomp/test/unit_SUITE.erl2
-rw-r--r--deps/rabbitmq_web_stomp_examples/src/rabbit_web_stomp_examples_app.erl2
1129 files changed, 8948 insertions, 1116 deletions
diff --git a/README.md b/README.md
index b4bdb265a4..4789db6e5f 100644
--- a/README.md
+++ b/README.md
@@ -70,4 +70,4 @@ RabbitMQ server is [licensed under the MPL 2.0](LICENSE-MPL-RabbitMQ).
## Copyright
-(c) 2007-2021 VMware, Inc. or its affiliates.
+(c) 2007-2022 VMware, Inc. or its affiliates.
diff --git a/deps/amqp10_client/src/amqp10_client.erl b/deps/amqp10_client/src/amqp10_client.erl
index 1d77bf8304..785f44f005 100644
--- a/deps/amqp10_client/src/amqp10_client.erl
+++ b/deps/amqp10_client/src/amqp10_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client).
diff --git a/deps/amqp10_client/src/amqp10_client.hrl b/deps/amqp10_client/src/amqp10_client.hrl
index 65cad53ce3..38627f80c5 100644
--- a/deps/amqp10_client/src/amqp10_client.hrl
+++ b/deps/amqp10_client/src/amqp10_client.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(AMQP_PROTOCOL_HEADER, <<"AMQP", 0, 1, 0, 0>>).
diff --git a/deps/amqp10_client/src/amqp10_client_app.erl b/deps/amqp10_client/src/amqp10_client_app.erl
index 413b9e1cd7..57ba7c1ead 100644
--- a/deps/amqp10_client/src/amqp10_client_app.erl
+++ b/deps/amqp10_client/src/amqp10_client_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_app).
diff --git a/deps/amqp10_client/src/amqp10_client_connection.erl b/deps/amqp10_client/src/amqp10_client_connection.erl
index c56cde2c6e..3da44197cd 100644
--- a/deps/amqp10_client/src/amqp10_client_connection.erl
+++ b/deps/amqp10_client/src/amqp10_client_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_connection).
diff --git a/deps/amqp10_client/src/amqp10_client_connection_sup.erl b/deps/amqp10_client/src/amqp10_client_connection_sup.erl
index 6695a648cd..a89fba58be 100644
--- a/deps/amqp10_client/src/amqp10_client_connection_sup.erl
+++ b/deps/amqp10_client/src/amqp10_client_connection_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_connection_sup).
diff --git a/deps/amqp10_client/src/amqp10_client_connections_sup.erl b/deps/amqp10_client/src/amqp10_client_connections_sup.erl
index 451dbbe272..744415643c 100644
--- a/deps/amqp10_client/src/amqp10_client_connections_sup.erl
+++ b/deps/amqp10_client/src/amqp10_client_connections_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_connections_sup).
diff --git a/deps/amqp10_client/src/amqp10_client_frame_reader.erl b/deps/amqp10_client/src/amqp10_client_frame_reader.erl
index 12a829c081..e91d889f25 100644
--- a/deps/amqp10_client/src/amqp10_client_frame_reader.erl
+++ b/deps/amqp10_client/src/amqp10_client_frame_reader.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_frame_reader).
diff --git a/deps/amqp10_client/src/amqp10_client_session.erl b/deps/amqp10_client/src/amqp10_client_session.erl
index 09a06fb3a6..31e5d7ca7b 100644
--- a/deps/amqp10_client/src/amqp10_client_session.erl
+++ b/deps/amqp10_client/src/amqp10_client_session.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_session).
diff --git a/deps/amqp10_client/src/amqp10_client_sessions_sup.erl b/deps/amqp10_client/src/amqp10_client_sessions_sup.erl
index 560dd0f198..a50d5ad735 100644
--- a/deps/amqp10_client/src/amqp10_client_sessions_sup.erl
+++ b/deps/amqp10_client/src/amqp10_client_sessions_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_sessions_sup).
diff --git a/deps/amqp10_client/src/amqp10_client_sup.erl b/deps/amqp10_client/src/amqp10_client_sup.erl
index dc38471909..c32fd1a275 100644
--- a/deps/amqp10_client/src/amqp10_client_sup.erl
+++ b/deps/amqp10_client/src/amqp10_client_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_sup).
diff --git a/deps/amqp10_client/src/amqp10_client_types.erl b/deps/amqp10_client/src/amqp10_client_types.erl
index a39f5eb2a9..fece01451d 100644
--- a/deps/amqp10_client/src/amqp10_client_types.erl
+++ b/deps/amqp10_client/src/amqp10_client_types.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_types).
diff --git a/deps/amqp10_client/src/amqp10_msg.erl b/deps/amqp10_client/src/amqp10_msg.erl
index 9cf2f7372e..b4df7e6f4b 100644
--- a/deps/amqp10_client/src/amqp10_msg.erl
+++ b/deps/amqp10_client/src/amqp10_msg.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_msg).
diff --git a/deps/amqp10_client/test/activemq_ct_helpers.erl b/deps/amqp10_client/test/activemq_ct_helpers.erl
index 01c3e26cb7..6f4b7306d2 100644
--- a/deps/amqp10_client/test/activemq_ct_helpers.erl
+++ b/deps/amqp10_client/test/activemq_ct_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(activemq_ct_helpers).
diff --git a/deps/amqp10_client/test/mock_server.erl b/deps/amqp10_client/test/mock_server.erl
index 77dae3f7e6..4dc4d9e7fb 100644
--- a/deps/amqp10_client/test/mock_server.erl
+++ b/deps/amqp10_client/test/mock_server.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mock_server).
diff --git a/deps/amqp10_client/test/msg_SUITE.erl b/deps/amqp10_client/test/msg_SUITE.erl
index e559e8b415..5bcbd09da7 100644
--- a/deps/amqp10_client/test/msg_SUITE.erl
+++ b/deps/amqp10_client/test/msg_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(msg_SUITE).
diff --git a/deps/amqp10_client/test/system_SUITE.erl b/deps/amqp10_client/test/system_SUITE.erl
index ae2343926a..8270b95b36 100644
--- a/deps/amqp10_client/test/system_SUITE.erl
+++ b/deps/amqp10_client/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/amqp10_common/src/amqp10_binary_generator.erl b/deps/amqp10_common/src/amqp10_binary_generator.erl
index ff8b1c7348..1912b308bb 100644
--- a/deps/amqp10_common/src/amqp10_binary_generator.erl
+++ b/deps/amqp10_common/src/amqp10_binary_generator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_binary_generator).
diff --git a/deps/amqp10_common/src/amqp10_binary_parser.erl b/deps/amqp10_common/src/amqp10_binary_parser.erl
index 376ac47aed..f4f33e15e9 100644
--- a/deps/amqp10_common/src/amqp10_binary_parser.erl
+++ b/deps/amqp10_common/src/amqp10_binary_parser.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_binary_parser).
diff --git a/deps/amqp10_common/src/amqp10_framing.erl b/deps/amqp10_common/src/amqp10_framing.erl
index fc89e6ef76..fa991b297e 100644
--- a/deps/amqp10_common/src/amqp10_framing.erl
+++ b/deps/amqp10_common/src/amqp10_framing.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_framing).
diff --git a/deps/amqp_client/include/amqp_client.hrl b/deps/amqp_client/include/amqp_client.hrl
index 5206305fd9..6eb54d7d2e 100644
--- a/deps/amqp_client/include/amqp_client.hrl
+++ b/deps/amqp_client/include/amqp_client.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-ifndef(AMQP_CLIENT_HRL).
diff --git a/deps/amqp_client/include/amqp_client_internal.hrl b/deps/amqp_client/include/amqp_client_internal.hrl
index 64aca19122..e7512d4041 100644
--- a/deps/amqp_client/include/amqp_client_internal.hrl
+++ b/deps/amqp_client/include/amqp_client_internal.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-include("amqp_client.hrl").
diff --git a/deps/amqp_client/src/amqp_auth_mechanisms.erl b/deps/amqp_client/src/amqp_auth_mechanisms.erl
index 96396d97b5..8fe6e4d30a 100644
--- a/deps/amqp_client/src/amqp_auth_mechanisms.erl
+++ b/deps/amqp_client/src/amqp_auth_mechanisms.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_channel.erl b/deps/amqp_client/src/amqp_channel.erl
index b00b43565d..00d820ae4d 100644
--- a/deps/amqp_client/src/amqp_channel.erl
+++ b/deps/amqp_client/src/amqp_channel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @type close_reason(Type) = {shutdown, amqp_reason(Type)}.
diff --git a/deps/amqp_client/src/amqp_channel_sup.erl b/deps/amqp_client/src/amqp_channel_sup.erl
index e1a3b6e8ad..c9015a4eab 100644
--- a/deps/amqp_client/src/amqp_channel_sup.erl
+++ b/deps/amqp_client/src/amqp_channel_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_channel_sup_sup.erl b/deps/amqp_client/src/amqp_channel_sup_sup.erl
index 314abb49da..33c8f34adc 100644
--- a/deps/amqp_client/src/amqp_channel_sup_sup.erl
+++ b/deps/amqp_client/src/amqp_channel_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_channels_manager.erl b/deps/amqp_client/src/amqp_channels_manager.erl
index c435ba6502..fc68b25fe4 100644
--- a/deps/amqp_client/src/amqp_channels_manager.erl
+++ b/deps/amqp_client/src/amqp_channels_manager.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_client.erl b/deps/amqp_client/src/amqp_client.erl
index 7989ca4a23..b4239a025c 100644
--- a/deps/amqp_client/src/amqp_client.erl
+++ b/deps/amqp_client/src/amqp_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_connection.erl b/deps/amqp_client/src/amqp_connection.erl
index 67cb43b6a4..16a6aff8a8 100644
--- a/deps/amqp_client/src/amqp_connection.erl
+++ b/deps/amqp_client/src/amqp_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @type close_reason(Type) = {shutdown, amqp_reason(Type)}.
diff --git a/deps/amqp_client/src/amqp_connection_sup.erl b/deps/amqp_client/src/amqp_connection_sup.erl
index 44848f42ea..a9dbdc74aa 100644
--- a/deps/amqp_client/src/amqp_connection_sup.erl
+++ b/deps/amqp_client/src/amqp_connection_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_connection_type_sup.erl b/deps/amqp_client/src/amqp_connection_type_sup.erl
index 19f63a0512..25c374fabf 100644
--- a/deps/amqp_client/src/amqp_connection_type_sup.erl
+++ b/deps/amqp_client/src/amqp_connection_type_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_direct_connection.erl b/deps/amqp_client/src/amqp_direct_connection.erl
index 938662a5f8..da68e49e7b 100644
--- a/deps/amqp_client/src/amqp_direct_connection.erl
+++ b/deps/amqp_client/src/amqp_direct_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_direct_consumer.erl b/deps/amqp_client/src/amqp_direct_consumer.erl
index f2bded5a83..9bae5ebac1 100644
--- a/deps/amqp_client/src/amqp_direct_consumer.erl
+++ b/deps/amqp_client/src/amqp_direct_consumer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @doc This module is an implementation of the amqp_gen_consumer
diff --git a/deps/amqp_client/src/amqp_gen_connection.erl b/deps/amqp_client/src/amqp_gen_connection.erl
index 3bd63996f1..09b736c517 100644
--- a/deps/amqp_client/src/amqp_gen_connection.erl
+++ b/deps/amqp_client/src/amqp_gen_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_gen_consumer.erl b/deps/amqp_client/src/amqp_gen_consumer.erl
index c24cbb819a..512b3e70ed 100644
--- a/deps/amqp_client/src/amqp_gen_consumer.erl
+++ b/deps/amqp_client/src/amqp_gen_consumer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @doc A behaviour module for implementing consumers for
diff --git a/deps/amqp_client/src/amqp_main_reader.erl b/deps/amqp_client/src/amqp_main_reader.erl
index d71b3aff21..42ec132e82 100644
--- a/deps/amqp_client/src/amqp_main_reader.erl
+++ b/deps/amqp_client/src/amqp_main_reader.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_network_connection.erl b/deps/amqp_client/src/amqp_network_connection.erl
index 8a798659fc..38a8af1475 100644
--- a/deps/amqp_client/src/amqp_network_connection.erl
+++ b/deps/amqp_client/src/amqp_network_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
@@ -317,7 +317,7 @@ client_properties(UserProperties) ->
{<<"version">>, longstr, list_to_binary(Vsn)},
{<<"platform">>, longstr, <<"Erlang">>},
{<<"copyright">>, longstr,
- <<"Copyright (c) 2007-2021 VMware, Inc. or its affiliates.">>},
+ <<"Copyright (c) 2007-2022 VMware, Inc. or its affiliates.">>},
{<<"information">>, longstr,
<<"Licensed under the MPL. "
"See https://www.rabbitmq.com/">>},
diff --git a/deps/amqp_client/src/amqp_rpc_client.erl b/deps/amqp_client/src/amqp_rpc_client.erl
index e8387ab4ba..0b9d758d3c 100644
--- a/deps/amqp_client/src/amqp_rpc_client.erl
+++ b/deps/amqp_client/src/amqp_rpc_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @doc This module allows the simple execution of an asynchronous RPC over
diff --git a/deps/amqp_client/src/amqp_rpc_server.erl b/deps/amqp_client/src/amqp_rpc_server.erl
index 929a4c0ef9..3643ff8abd 100644
--- a/deps/amqp_client/src/amqp_rpc_server.erl
+++ b/deps/amqp_client/src/amqp_rpc_server.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @doc This is a utility module that is used to expose an arbitrary function
diff --git a/deps/amqp_client/src/amqp_selective_consumer.erl b/deps/amqp_client/src/amqp_selective_consumer.erl
index de3c39de57..14147201df 100644
--- a/deps/amqp_client/src/amqp_selective_consumer.erl
+++ b/deps/amqp_client/src/amqp_selective_consumer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @doc This module is an implementation of the amqp_gen_consumer
diff --git a/deps/amqp_client/src/amqp_sup.erl b/deps/amqp_client/src/amqp_sup.erl
index a038aa48d0..986c772c47 100644
--- a/deps/amqp_client/src/amqp_sup.erl
+++ b/deps/amqp_client/src/amqp_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @private
diff --git a/deps/amqp_client/src/amqp_uri.erl b/deps/amqp_client/src/amqp_uri.erl
index 408d52fdeb..0800f02ffe 100644
--- a/deps/amqp_client/src/amqp_uri.erl
+++ b/deps/amqp_client/src/amqp_uri.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp_uri).
diff --git a/deps/amqp_client/src/rabbit_routing_util.erl b/deps/amqp_client/src/rabbit_routing_util.erl
index d978230b65..24cf54231c 100644
--- a/deps/amqp_client/src/rabbit_routing_util.erl
+++ b/deps/amqp_client/src/rabbit_routing_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2013-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2013-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_routing_util).
diff --git a/deps/amqp_client/src/uri_parser.erl b/deps/amqp_client/src/uri_parser.erl
index cf73637681..976f41500f 100644
--- a/deps/amqp_client/src/uri_parser.erl
+++ b/deps/amqp_client/src/uri_parser.erl
@@ -1,7 +1,7 @@
%% This file is a copy of http_uri.erl from the R13B-1 Erlang/OTP
%% distribution with several modifications.
-%% All modifications are Copyright (c) 2009-2021 VMware, Inc. or its affiliates.
+%% All modifications are Copyright (c) 2009-2022 VMware, Inc. or its affiliates.
%% ``The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
diff --git a/deps/amqp_client/test/system_SUITE.erl b/deps/amqp_client/test/system_SUITE.erl
index f6837d81ca..fe66547a84 100644
--- a/deps/amqp_client/test/system_SUITE.erl
+++ b/deps/amqp_client/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/amqp_client/test/unit_SUITE.erl b/deps/amqp_client/test/unit_SUITE.erl
index 46b0c42990..d510b23f1d 100644
--- a/deps/amqp_client/test/unit_SUITE.erl
+++ b/deps/amqp_client/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl
index 1932c5f6b3..9d47a6d78f 100644
--- a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl
+++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl
@@ -3,7 +3,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_boot_state).
diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl
index db0362f5a0..bb6c893cc4 100644
--- a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl
+++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl
@@ -3,7 +3,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_boot_state_sup).
diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl
index 40cd1ec804..a7da1895f9 100644
--- a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl
+++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2015-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2015-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_boot_state_systemd).
diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl
index b969084437..388e16ea8d 100644
--- a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl
+++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prelaunch_early_logging).
diff --git a/deps/rabbit/docs/rabbitmq-diagnostics.8 b/deps/rabbit/docs/rabbitmq-diagnostics.8
index 5b789680db..d5d064d25f 100644
--- a/deps/rabbit/docs/rabbitmq-diagnostics.8
+++ b/deps/rabbit/docs/rabbitmq-diagnostics.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd June 19, 2021
.Dt RABBITMQ-DIAGNOSTICS 8
diff --git a/deps/rabbit/docs/rabbitmq-echopid.8 b/deps/rabbit/docs/rabbitmq-echopid.8
index 2bca078cfa..d5f5121c46 100644
--- a/deps/rabbit/docs/rabbitmq-echopid.8
+++ b/deps/rabbit/docs/rabbitmq-echopid.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd September 28, 2019
.Dt RABBITMQ-ECHOPID.BAT 8
diff --git a/deps/rabbit/docs/rabbitmq-env.conf.5 b/deps/rabbit/docs/rabbitmq-env.conf.5
index 76eb7048ed..f33380f3ad 100644
--- a/deps/rabbit/docs/rabbitmq-env.conf.5
+++ b/deps/rabbit/docs/rabbitmq-env.conf.5
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd September 28, 2019
.Dt RABBITMQ-ENV.CONF 5
diff --git a/deps/rabbit/docs/rabbitmq-plugins.8 b/deps/rabbit/docs/rabbitmq-plugins.8
index 563f9dee88..95f410746a 100644
--- a/deps/rabbit/docs/rabbitmq-plugins.8
+++ b/deps/rabbit/docs/rabbitmq-plugins.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd September 28, 2019
.Dt RABBITMQ-PLUGINS 8
diff --git a/deps/rabbit/docs/rabbitmq-queues.8 b/deps/rabbit/docs/rabbitmq-queues.8
index c0d4c2402a..d6898ae608 100644
--- a/deps/rabbit/docs/rabbitmq-queues.8
+++ b/deps/rabbit/docs/rabbitmq-queues.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd June 19, 2021
.Dt RABBITMQ-QUEUES 8
diff --git a/deps/rabbit/docs/rabbitmq-server.8 b/deps/rabbit/docs/rabbitmq-server.8
index dba7ca4479..113cdd725b 100644
--- a/deps/rabbit/docs/rabbitmq-server.8
+++ b/deps/rabbit/docs/rabbitmq-server.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd September 28, 2019
.Dt RABBITMQ-SERVER 8
diff --git a/deps/rabbit/docs/rabbitmq-service.8 b/deps/rabbit/docs/rabbitmq-service.8
index 2f33d9d4e9..35ad279bd9 100644
--- a/deps/rabbit/docs/rabbitmq-service.8
+++ b/deps/rabbit/docs/rabbitmq-service.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd September 28, 2019
.Dt RABBITMQ-SERVICE.BAT 8
diff --git a/deps/rabbit/docs/rabbitmq-upgrade.8 b/deps/rabbit/docs/rabbitmq-upgrade.8
index c4d4bd16fa..dec436d2a4 100644
--- a/deps/rabbit/docs/rabbitmq-upgrade.8
+++ b/deps/rabbit/docs/rabbitmq-upgrade.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd June 19, 2021
.Dt RABBITMQ-UPGRADE 8
diff --git a/deps/rabbit/docs/rabbitmqctl.8 b/deps/rabbit/docs/rabbitmqctl.8
index 5adc7e24f6..611d883221 100644
--- a/deps/rabbit/docs/rabbitmqctl.8
+++ b/deps/rabbit/docs/rabbitmqctl.8
@@ -3,7 +3,7 @@
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
.\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
.\"
-.\" Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+.\" Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
.\"
.Dd June 19, 2021
.Dt RABBITMQCTL 8
diff --git a/deps/rabbit/include/gm_specs.hrl b/deps/rabbit/include/gm_specs.hrl
index 1e7282988a..17cc3ec640 100644
--- a/deps/rabbit/include/gm_specs.hrl
+++ b/deps/rabbit/include/gm_specs.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-type callback_result() :: 'ok' | {'stop', any()} | {'become', atom(), args()}.
diff --git a/deps/rabbit/scripts/rabbitmq-streams b/deps/rabbit/scripts/rabbitmq-streams
index 5b64991d75..8d4804a08f 100755
--- a/deps/rabbit/scripts/rabbitmq-streams
+++ b/deps/rabbit/scripts/rabbitmq-streams
@@ -4,7 +4,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
# Exit immediately if a pipeline, which may consist of a single simple command,
diff --git a/deps/rabbit/scripts/rabbitmq-streams.bat b/deps/rabbit/scripts/rabbitmq-streams.bat
index 7f4fca8f9e..532094f559 100644
--- a/deps/rabbit/scripts/rabbitmq-streams.bat
+++ b/deps/rabbit/scripts/rabbitmq-streams.bat
@@ -4,7 +4,7 @@ REM This Source Code Form is subject to the terms of the Mozilla Public
REM License, v. 2.0. If a copy of the MPL was not distributed with this
REM file, You can obtain one at https://mozilla.org/MPL/2.0/.
REM
-REM Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+REM Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
REM
REM Scopes the variables to the current batch file
diff --git a/deps/rabbit/scripts/rabbitmq-tanzu b/deps/rabbit/scripts/rabbitmq-tanzu
index dbfb3f8685..219fa9d380 100755
--- a/deps/rabbit/scripts/rabbitmq-tanzu
+++ b/deps/rabbit/scripts/rabbitmq-tanzu
@@ -3,7 +3,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
# Exit immediately if a pipeline, which may consist of a single simple command,
diff --git a/deps/rabbit/scripts/rabbitmq-tanzu.bat b/deps/rabbit/scripts/rabbitmq-tanzu.bat
index 1b95d764d6..12c44f4f8b 100644
--- a/deps/rabbit/scripts/rabbitmq-tanzu.bat
+++ b/deps/rabbit/scripts/rabbitmq-tanzu.bat
@@ -3,7 +3,7 @@ REM This Source Code Form is subject to the terms of the Mozilla Public
REM License, v. 2.0. If a copy of the MPL was not distributed with this
REM file, You can obtain one at https://mozilla.org/MPL/2.0/.
REM
-REM Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+REM Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
REM
REM Scopes the variables to the current batch file
diff --git a/deps/rabbit/src/amqqueue.erl b/deps/rabbit/src/amqqueue.erl
index 31cc650879..a828a22a8d 100644
--- a/deps/rabbit/src/amqqueue.erl
+++ b/deps/rabbit/src/amqqueue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqqueue). %% Could become amqqueue_v2 in the future.
diff --git a/deps/rabbit/src/amqqueue_v1.erl b/deps/rabbit/src/amqqueue_v1.erl
index 2821b07b56..e6daef0421 100644
--- a/deps/rabbit/src/amqqueue_v1.erl
+++ b/deps/rabbit/src/amqqueue_v1.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqqueue_v1).
diff --git a/deps/rabbit/src/background_gc.erl b/deps/rabbit/src/background_gc.erl
index bd8b8cde2c..19bfab1904 100644
--- a/deps/rabbit/src/background_gc.erl
+++ b/deps/rabbit/src/background_gc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(background_gc).
diff --git a/deps/rabbit/src/code_server_cache.erl b/deps/rabbit/src/code_server_cache.erl
index 2eabc23b36..dd1b56d924 100644
--- a/deps/rabbit/src/code_server_cache.erl
+++ b/deps/rabbit/src/code_server_cache.erl
@@ -4,7 +4,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(code_server_cache).
diff --git a/deps/rabbit/src/gatherer.erl b/deps/rabbit/src/gatherer.erl
index 85cda60d84..395929315f 100644
--- a/deps/rabbit/src/gatherer.erl
+++ b/deps/rabbit/src/gatherer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(gatherer).
diff --git a/deps/rabbit/src/gm.erl b/deps/rabbit/src/gm.erl
index 56880100b7..65b30651e0 100644
--- a/deps/rabbit/src/gm.erl
+++ b/deps/rabbit/src/gm.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(gm).
diff --git a/deps/rabbit/src/internal_user.erl b/deps/rabbit/src/internal_user.erl
index 1cc2052fe8..fdb65a485d 100644
--- a/deps/rabbit/src/internal_user.erl
+++ b/deps/rabbit/src/internal_user.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(internal_user).
diff --git a/deps/rabbit/src/internal_user_v1.erl b/deps/rabbit/src/internal_user_v1.erl
index d98665cfb0..4a2be0462a 100644
--- a/deps/rabbit/src/internal_user_v1.erl
+++ b/deps/rabbit/src/internal_user_v1.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(internal_user_v1).
diff --git a/deps/rabbit/src/lqueue.erl b/deps/rabbit/src/lqueue.erl
index a018a98448..a1134dcf0e 100644
--- a/deps/rabbit/src/lqueue.erl
+++ b/deps/rabbit/src/lqueue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(lqueue).
diff --git a/deps/rabbit/src/mirrored_supervisor_sups.erl b/deps/rabbit/src/mirrored_supervisor_sups.erl
index e927a167ee..e8ac7e318e 100644
--- a/deps/rabbit/src/mirrored_supervisor_sups.erl
+++ b/deps/rabbit/src/mirrored_supervisor_sups.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mirrored_supervisor_sups).
diff --git a/deps/rabbit/src/pg_local.erl b/deps/rabbit/src/pg_local.erl
index 75f2578d79..bbc8df13ed 100644
--- a/deps/rabbit/src/pg_local.erl
+++ b/deps/rabbit/src/pg_local.erl
@@ -13,7 +13,7 @@
%% versions of Erlang/OTP. The remaining type specs have been
%% removed.
-%% All modifications are (C) 2010-2021 VMware, Inc. or its affiliates.
+%% All modifications are (C) 2010-2022 VMware, Inc. or its affiliates.
%% %CopyrightBegin%
%%
diff --git a/deps/rabbit/src/pid_recomposition.erl b/deps/rabbit/src/pid_recomposition.erl
index c98411b6bc..db24de16b8 100644
--- a/deps/rabbit/src/pid_recomposition.erl
+++ b/deps/rabbit/src/pid_recomposition.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(pid_recomposition).
diff --git a/deps/rabbit/src/rabbit.erl b/deps/rabbit/src/rabbit.erl
index 3da58cfe3a..debef2838d 100644
--- a/deps/rabbit/src/rabbit.erl
+++ b/deps/rabbit/src/rabbit.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit).
diff --git a/deps/rabbit/src/rabbit_access_control.erl b/deps/rabbit/src/rabbit_access_control.erl
index d9670d87ec..e5c6332649 100644
--- a/deps/rabbit/src/rabbit_access_control.erl
+++ b/deps/rabbit/src/rabbit_access_control.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_access_control).
diff --git a/deps/rabbit/src/rabbit_alarm.erl b/deps/rabbit/src/rabbit_alarm.erl
index e9942136a9..5f9d4cc542 100644
--- a/deps/rabbit/src/rabbit_alarm.erl
+++ b/deps/rabbit/src/rabbit_alarm.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% There are two types of alarms handled by this module:
%%
diff --git a/deps/rabbit/src/rabbit_amqqueue.erl b/deps/rabbit/src/rabbit_amqqueue.erl
index 91f4a3f130..41e9d07a0f 100644
--- a/deps/rabbit/src/rabbit_amqqueue.erl
+++ b/deps/rabbit/src/rabbit_amqqueue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqqueue).
diff --git a/deps/rabbit/src/rabbit_amqqueue_process.erl b/deps/rabbit/src/rabbit_amqqueue_process.erl
index a9d673d65d..a967b0c03f 100644
--- a/deps/rabbit/src/rabbit_amqqueue_process.erl
+++ b/deps/rabbit/src/rabbit_amqqueue_process.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqqueue_process).
diff --git a/deps/rabbit/src/rabbit_amqqueue_sup.erl b/deps/rabbit/src/rabbit_amqqueue_sup.erl
index 421af337a7..748aac17c2 100644
--- a/deps/rabbit/src/rabbit_amqqueue_sup.erl
+++ b/deps/rabbit/src/rabbit_amqqueue_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqqueue_sup).
diff --git a/deps/rabbit/src/rabbit_amqqueue_sup_sup.erl b/deps/rabbit/src/rabbit_amqqueue_sup_sup.erl
index b10702c87b..1d0f7ae403 100644
--- a/deps/rabbit/src/rabbit_amqqueue_sup_sup.erl
+++ b/deps/rabbit/src/rabbit_amqqueue_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqqueue_sup_sup).
diff --git a/deps/rabbit/src/rabbit_auth_backend_internal.erl b/deps/rabbit/src/rabbit_auth_backend_internal.erl
index 4cc445b713..a49867efc3 100644
--- a/deps/rabbit/src/rabbit_auth_backend_internal.erl
+++ b/deps/rabbit/src/rabbit_auth_backend_internal.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_internal).
diff --git a/deps/rabbit/src/rabbit_auth_mechanism_amqplain.erl b/deps/rabbit/src/rabbit_auth_mechanism_amqplain.erl
index 3751fafa73..6a4e12c132 100644
--- a/deps/rabbit/src/rabbit_auth_mechanism_amqplain.erl
+++ b/deps/rabbit/src/rabbit_auth_mechanism_amqplain.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_mechanism_amqplain).
diff --git a/deps/rabbit/src/rabbit_auth_mechanism_cr_demo.erl b/deps/rabbit/src/rabbit_auth_mechanism_cr_demo.erl
index a4ef834387..eff5a7e6e0 100644
--- a/deps/rabbit/src/rabbit_auth_mechanism_cr_demo.erl
+++ b/deps/rabbit/src/rabbit_auth_mechanism_cr_demo.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_mechanism_cr_demo).
diff --git a/deps/rabbit/src/rabbit_auth_mechanism_plain.erl b/deps/rabbit/src/rabbit_auth_mechanism_plain.erl
index 893a723b20..3a489c6032 100644
--- a/deps/rabbit/src/rabbit_auth_mechanism_plain.erl
+++ b/deps/rabbit/src/rabbit_auth_mechanism_plain.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_mechanism_plain).
diff --git a/deps/rabbit/src/rabbit_autoheal.erl b/deps/rabbit/src/rabbit_autoheal.erl
index cdf430b973..e6b7145c39 100644
--- a/deps/rabbit/src/rabbit_autoheal.erl
+++ b/deps/rabbit/src/rabbit_autoheal.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_autoheal).
diff --git a/deps/rabbit/src/rabbit_backing_queue.erl b/deps/rabbit/src/rabbit_backing_queue.erl
index 3c113eb110..b553bc563e 100644
--- a/deps/rabbit/src/rabbit_backing_queue.erl
+++ b/deps/rabbit/src/rabbit_backing_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_backing_queue).
diff --git a/deps/rabbit/src/rabbit_basic.erl b/deps/rabbit/src/rabbit_basic.erl
index cc7c00047e..c969126271 100644
--- a/deps/rabbit/src/rabbit_basic.erl
+++ b/deps/rabbit/src/rabbit_basic.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_basic).
diff --git a/deps/rabbit/src/rabbit_binding.erl b/deps/rabbit/src/rabbit_binding.erl
index 6890097169..5aff578fe3 100644
--- a/deps/rabbit/src/rabbit_binding.erl
+++ b/deps/rabbit/src/rabbit_binding.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_binding).
diff --git a/deps/rabbit/src/rabbit_boot_steps.erl b/deps/rabbit/src/rabbit_boot_steps.erl
index 5546823a18..897c4eb87f 100644
--- a/deps/rabbit/src/rabbit_boot_steps.erl
+++ b/deps/rabbit/src/rabbit_boot_steps.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_boot_steps).
diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl
index cf26a296fa..28b1d07821 100644
--- a/deps/rabbit/src/rabbit_channel.erl
+++ b/deps/rabbit/src/rabbit_channel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel).
diff --git a/deps/rabbit/src/rabbit_channel_interceptor.erl b/deps/rabbit/src/rabbit_channel_interceptor.erl
index 38d4456549..234aa1a9ad 100644
--- a/deps/rabbit/src/rabbit_channel_interceptor.erl
+++ b/deps/rabbit/src/rabbit_channel_interceptor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel_interceptor).
diff --git a/deps/rabbit/src/rabbit_channel_sup.erl b/deps/rabbit/src/rabbit_channel_sup.erl
index 0b54fdfd54..b1e2f6fa47 100644
--- a/deps/rabbit/src/rabbit_channel_sup.erl
+++ b/deps/rabbit/src/rabbit_channel_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel_sup).
diff --git a/deps/rabbit/src/rabbit_channel_sup_sup.erl b/deps/rabbit/src/rabbit_channel_sup_sup.erl
index 6c7d4f8808..0e95b66e64 100644
--- a/deps/rabbit/src/rabbit_channel_sup_sup.erl
+++ b/deps/rabbit/src/rabbit_channel_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel_sup_sup).
diff --git a/deps/rabbit/src/rabbit_channel_tracking.erl b/deps/rabbit/src/rabbit_channel_tracking.erl
index 106e95cf1e..e5f29d5f65 100644
--- a/deps/rabbit/src/rabbit_channel_tracking.erl
+++ b/deps/rabbit/src/rabbit_channel_tracking.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel_tracking).
diff --git a/deps/rabbit/src/rabbit_channel_tracking_handler.erl b/deps/rabbit/src/rabbit_channel_tracking_handler.erl
index 8d436829a4..9cb1ca6fd7 100644
--- a/deps/rabbit/src/rabbit_channel_tracking_handler.erl
+++ b/deps/rabbit/src/rabbit_channel_tracking_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel_tracking_handler).
diff --git a/deps/rabbit/src/rabbit_classic_queue_index_v2.erl b/deps/rabbit/src/rabbit_classic_queue_index_v2.erl
new file mode 100644
index 0000000000..9e3c8c450e
--- /dev/null
+++ b/deps/rabbit/src/rabbit_classic_queue_index_v2.erl
@@ -0,0 +1,1275 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module(rabbit_classic_queue_index_v2).
+
+-export([erase/1, init/3, reset_state/1, recover/7,
+ terminate/3, delete_and_terminate/1,
+ publish/7, ack/2, read/3]).
+
+%% Recovery. Unlike other functions in this module, these
+%% apply to all queues all at once.
+-export([start/2, stop/1]).
+
+%% rabbit_queue_index/rabbit_variable_queue-specific functions.
+%% Implementation details from the queue index leaking into the
+%% queue implementation itself.
+-export([pre_publish/7, flush_pre_publish_cache/2,
+ sync/1, needs_sync/1, flush/1,
+ bounds/1, next_segment_boundary/1]).
+
+%% Used to upgrade/downgrade from/to the v1 index.
+-export([init_for_conversion/3]).
+-export([init_args/1]).
+-export([delete_segment_file_for_seq_id/2]).
+
+%% Shared with rabbit_classic_queue_store_v2.
+-export([queue_dir/2]).
+
+%% Internal. Used by tests.
+-export([segment_file/2]).
+
+-define(QUEUE_NAME_STUB_FILE, ".queue_name").
+-define(SEGMENT_EXTENSION, ".qi").
+
+-define(MAGIC, 16#52435149). %% "RCQI"
+-define(VERSION, 2).
+-define(HEADER_SIZE, 64). %% bytes
+-define(ENTRY_SIZE, 32). %% bytes
+
+%% The file_handle_cache module tracks reservations at
+%% the level of the process. This means we cannot
+%% handle them independently in the store and index.
+%% Because the index may reserve more FDs than the
+%% store the index becomes responsible for this and
+%% will always reserve at least 2 FDs, and release
+%% everything when terminating.
+-define(STORE_FD_RESERVATIONS, 2).
+
+-include_lib("rabbit_common/include/rabbit.hrl").
+-include_lib("kernel/include/file.hrl").
+
+%% Set to true to get an awful lot of debug logs.
+-if(false).
+-define(DEBUG(X,Y), logger:debug("~0p: " ++ X, [?FUNCTION_NAME|Y])).
+-else.
+-define(DEBUG(X,Y), _ = X, _ = Y, ok).
+-endif.
+
+-type entry() :: {rabbit_types:msg_id(),
+ rabbit_variable_queue:seq_id(),
+ rabbit_variable_queue:msg_location(),
+ rabbit_types:message_properties(),
+ boolean()}.
+
+-record(qi, {
+ %% Queue name (for the stub file).
+ queue_name :: rabbit_amqqueue:name(),
+
+ %% Queue index directory.
+ dir :: file:filename(),
+
+ %% Buffer of all write operations to be performed.
+ %% When the buffer reaches a certain size, we reduce
+ %% the buffer size by first checking if writing the
+ %% acks gets us to a comfortable buffer
+ %% size. If we do, write only the acks.
+ %% If not, write everything. This allows the reader
+ %% to continue reading from memory if it is fast
+ %% enough to keep up with the producer.
+ write_buffer = #{} :: #{rabbit_variable_queue:seq_id() => entry() | ack},
+
+ %% The number of entries in the write buffer that
+ %% refer to an update to the file, rather than a
+ %% full entry. Used to determine if flushing only acks
+ %% is enough to get the buffer to a comfortable size.
+ write_buffer_updates = 0 :: non_neg_integer(),
+
+ %% When using publisher confirms we flush index entries
+ %% to disk regularly. This means we can no longer rely
+ %% on entries being present in the write_buffer and
+ %% have to read from disk. This cache is meant to avoid
+ %% that by keeping the write_buffer entries in memory
+ %% longer.
+ %%
+ %% When the write_buffer is flushed to disk fully, it
+ %% replaces the cache entirely. When only acks are flushed,
+ %% then the cache gets updated: old acks are removed and
+ %% new acks are added to the cache.
+ cache = #{} :: #{rabbit_variable_queue:seq_id() => entry() | ack},
+
+ %% Messages waiting for publisher confirms. The
+ %% publisher confirms will be sent when the message
+ %% has been synced to disk (as an entry or an ack).
+ %%
+ %% The index does not call file:sync/1 by default.
+ %% It only does when publisher confirms are used
+ %% and there are outstanding unconfirmed messages.
+ %% In that case the buffer is flushed to disk when
+ %% the queue requests a sync (after a timeout).
+ confirms = gb_sets:new() :: gb_sets:set(),
+
+ %% Segments we currently know of along with the
+ %% number of unacked messages remaining in the
+ %% segment. We use this to determine whether a
+ %% segment file can be deleted.
+ %%
+ %% We keep an accurate count of messages that are
+ %% alive in the segment file. The segment file gets
+ %% deleted when the number of messages gets to 0.
+ %% The segment file might be recreated (and reallocated)
+ %% when a new message comes in.
+ %%
+ %% This is OK because lazy queues will always write
+ %% to the index and so there is only a possible loss
+ %% in performance (extra file operations) when the
+ %% queue is processing few messages.
+ %%
+ %% Non-lazy queues will only write to the index when
+ %% messages are either persistent or there is memory
+ %% pressure. Here again the possible loss of performance
+ %% is expected when few messages get written to the index.
+ %%
+ %% Finally, because we are not using fsync, the file
+ %% operations may never hit the disk to begin with.
+ segments = #{} :: #{non_neg_integer() => pos_integer()},
+
+ %% File descriptors. We will keep up to 4 FDs
+ %% at a time. See comments in reduce_fd_usage/2.
+ fds = #{} :: #{non_neg_integer() => file:fd()},
+
+ %% This fun must be called when messages that expect
+ %% confirms have either an ack or their entry
+ %% written to disk and file:sync/1 has been called.
+ on_sync :: on_sync_fun(),
+
+ %% This fun is never called. It is kept so that we
+ %% can downgrade the queue back to v1.
+ on_sync_msg :: fun()
+}).
+
+-type state() :: #qi{}.
+
+%% Types copied from rabbit_queue_index.
+
+-type on_sync_fun() :: fun ((gb_sets:set()) -> ok).
+-type contains_predicate() :: fun ((rabbit_types:msg_id()) -> boolean()).
+-type shutdown_terms() :: list() | 'non_clean_shutdown'.
+
+%% ----
+
+-spec erase(rabbit_amqqueue:name()) -> 'ok'.
+
+erase(#resource{ virtual_host = VHost } = Name) ->
+ ?DEBUG("~0p", [Name]),
+ VHostDir = rabbit_vhost:msg_store_dir_path(VHost),
+ Dir = queue_dir(VHostDir, Name),
+ erase_index_dir(Dir).
+
+-spec init(rabbit_amqqueue:name(),
+ on_sync_fun(), on_sync_fun()) -> state().
+
+%% We do not embed messages and as a result never need the OnSyncMsgFun.
+
+init(#resource{ virtual_host = VHost } = Name, OnSyncFun, OnSyncMsgFun) ->
+ ?DEBUG("~0p ~0p ~0p", [Name, OnSyncFun, OnSyncMsgFun]),
+ VHostDir = rabbit_vhost:msg_store_dir_path(VHost),
+ Dir = queue_dir(VHostDir, Name),
+ false = rabbit_file:is_file(Dir), %% is_file == is file or dir
+ init1(Name, Dir, OnSyncFun, OnSyncMsgFun).
+
+init_args(#qi{ queue_name = QueueName,
+ on_sync = OnSyncFun,
+ on_sync_msg = OnSyncMsgFun }) ->
+ {QueueName, OnSyncFun, OnSyncMsgFun}.
+
+init_for_conversion(#resource{ virtual_host = VHost } = Name, OnSyncFun, OnSyncMsgFun) ->
+ ?DEBUG("~0p ~0p ~0p", [Name, OnSyncFun, OnSyncMsgFun]),
+ VHostDir = rabbit_vhost:msg_store_dir_path(VHost),
+ Dir = queue_dir(VHostDir, Name),
+ init1(Name, Dir, OnSyncFun, OnSyncMsgFun).
+
+init1(Name, Dir, OnSyncFun, OnSyncMsgFun) ->
+ ensure_queue_name_stub_file(Name, Dir),
+ #qi{
+ queue_name = Name,
+ dir = Dir,
+ on_sync = OnSyncFun,
+ on_sync_msg = OnSyncMsgFun
+ }.
+
+ensure_queue_name_stub_file(#resource{virtual_host = VHost, name = QName}, Dir) ->
+ QueueNameFile = filename:join(Dir, ?QUEUE_NAME_STUB_FILE),
+ ok = filelib:ensure_dir(QueueNameFile),
+ ok = file:write_file(QueueNameFile, <<"VHOST: ", VHost/binary, "\n",
+ "QUEUE: ", QName/binary, "\n",
+ "INDEX: v2\n">>).
+
+-spec reset_state(State) -> State when State::state().
+
+reset_state(State = #qi{ queue_name = Name,
+ dir = Dir,
+ on_sync = OnSyncFun,
+ on_sync_msg = OnSyncMsgFun }) ->
+ ?DEBUG("~0p", [State]),
+ delete_and_terminate(State),
+ init1(Name, Dir, OnSyncFun, OnSyncMsgFun).
+
+-spec recover(rabbit_amqqueue:name(), shutdown_terms(), boolean(),
+ contains_predicate(),
+ on_sync_fun(), on_sync_fun(),
+ main | convert) ->
+ {'undefined' | non_neg_integer(),
+ 'undefined' | non_neg_integer(), state()}.
+
+-define(RECOVER_COUNT, 1).
+-define(RECOVER_BYTES, 2).
+-define(RECOVER_DROPPED_PERSISTENT_PER_VHOST, 3).
+-define(RECOVER_DROPPED_PERSISTENT_PER_QUEUE, 4).
+-define(RECOVER_DROPPED_PERSISTENT_OTHER, 5).
+-define(RECOVER_DROPPED_TRANSIENT, 6).
+-define(RECOVER_COUNTER_SIZE, 6).
+
+recover(#resource{ virtual_host = VHost, name = QueueName } = Name, Terms,
+ IsMsgStoreClean, ContainsCheckFun, OnSyncFun, OnSyncMsgFun, Context) ->
+ ?DEBUG("~0p ~0p ~0p ~0p ~0p ~0p", [Name, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun]),
+ VHostDir = rabbit_vhost:msg_store_dir_path(VHost),
+ Dir = queue_dir(VHostDir, Name),
+ State0 = init1(Name, Dir, OnSyncFun, OnSyncMsgFun),
+ %% We go over all segments if either the index or the
+ %% message store has/had to recover. Otherwise we just
+ %% take our state from Terms.
+ IsIndexClean = Terms =/= non_clean_shutdown,
+ case IsIndexClean andalso IsMsgStoreClean of
+ true ->
+ State = case proplists:get_value(v2_index_state, Terms, undefined) of
+ %% We are recovering a queue that was using the v1 index.
+ undefined when Context =:= main ->
+ recover_index_v1_clean(State0, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun);
+ {?VERSION, Segments} ->
+ State0#qi{ segments = Segments }
+ end,
+ %% The queue has stored the count/bytes values inside
+ %% Terms so we don't need to provide them again.
+ {undefined,
+ undefined,
+ State};
+ false ->
+ CountersRef = counters:new(?RECOVER_COUNTER_SIZE, []),
+ State = recover_segments(State0, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun,
+ CountersRef, Context),
+ rabbit_log:warning("Queue ~s in vhost ~s dropped ~b/~b/~b persistent messages "
+ "and ~b transient messages after unclean shutdown",
+ [QueueName, VHost,
+ counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_VHOST),
+ counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_QUEUE),
+ counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_OTHER),
+ counters:get(CountersRef, ?RECOVER_DROPPED_TRANSIENT)]),
+ {counters:get(CountersRef, ?RECOVER_COUNT),
+ counters:get(CountersRef, ?RECOVER_BYTES),
+ State}
+ end.
+
+recover_segments(State0 = #qi { queue_name = Name, dir = Dir }, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun, CountersRef, Context) ->
+ SegmentFiles = rabbit_file:wildcard(".*\\" ++ ?SEGMENT_EXTENSION, Dir),
+ State = case SegmentFiles of
+ %% No segments found.
+ [] ->
+ State0;
+ %% Count unackeds in the segments.
+ _ ->
+ Segments = lists:sort([
+ list_to_integer(filename:basename(F, ?SEGMENT_EXTENSION))
+ || F <- SegmentFiles]),
+ %% We use a temporary store state to check that messages do exist.
+ StoreState0 = rabbit_classic_queue_store_v2:init(Name, OnSyncMsgFun),
+ {State1, StoreState} = recover_segments(State0, ContainsCheckFun, StoreState0, CountersRef, Segments),
+ _ = rabbit_classic_queue_store_v2:terminate(StoreState),
+ State1
+ end,
+ case Context of
+ convert ->
+ State;
+ main ->
+ %% We try to see if there are segment files from the v1 index.
+ case rabbit_file:wildcard(".*\\.idx", Dir) of
+ %% We are recovering a dirty queue that was using the v1 index or in
+ %% the process of converting from v1 to v2.
+ [_|_] ->
+ recover_index_v1_dirty(State, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun,
+ CountersRef);
+ %% Otherwise keep default values.
+ [] ->
+ State
+ end
+ end.
+
+recover_segments(State, _, StoreState, _, []) ->
+ {State, StoreState};
+recover_segments(State0, ContainsCheckFun, StoreState0, CountersRef, [Segment|Tail]) ->
+ SegmentEntryCount = segment_entry_count(),
+ SegmentFile = segment_file(Segment, State0),
+ {ok, Fd} = file:open(SegmentFile, [read, read_ahead, write, raw, binary]),
+ case file:read(Fd, ?HEADER_SIZE) of
+ {ok, <<?MAGIC:32,?VERSION:8,
+ _FromSeqId:64/unsigned,_ToSeqId:64/unsigned,
+ _/bits>>} ->
+ %% Double check the file size before attempting to parse it.
+ SegmentFileSize = ?HEADER_SIZE + SegmentEntryCount * ?ENTRY_SIZE,
+ {ok, #file_info{size = SegmentFileSize}} = file:read_file_info(Fd),
+ {Action, State, StoreState1} = recover_segment(State0, ContainsCheckFun, StoreState0, CountersRef, Fd,
+ Segment, 0, SegmentEntryCount,
+ SegmentEntryCount, []),
+ ok = file:close(Fd),
+ StoreState = case Action of
+ keep ->
+ StoreState1;
+ delete ->
+ _ = file:delete(SegmentFile),
+ rabbit_classic_queue_store_v2:delete_segments([Segment], StoreState1)
+ end,
+ recover_segments(State, ContainsCheckFun, StoreState, CountersRef, Tail);
+ %% File was either empty or the header was invalid.
+ %% We cannot recover this file.
+ _ ->
+ rabbit_log:warning("Deleting invalid v2 segment file ~s (file has invalid header)",
+ [SegmentFile]),
+ ok = file:close(Fd),
+ _ = file:delete(SegmentFile),
+ StoreState = rabbit_classic_queue_store_v2:delete_segments([Segment], StoreState0),
+ recover_segments(State0, ContainsCheckFun, StoreState, CountersRef, Tail)
+ end.
+
+recover_segment(State = #qi{ segments = Segments }, _, StoreState, _, Fd,
+ Segment, ThisEntry, SegmentEntryCount,
+ Unacked, LocBytes)
+ when ThisEntry =:= SegmentEntryCount ->
+ case Unacked of
+ 0 ->
+ %% There are no more messages in this segment file.
+ {delete, State, StoreState};
+ _ ->
+ %% We must ack some messages on disk.
+ ok = file:pwrite(Fd, LocBytes),
+ {keep, State#qi{ segments = Segments#{ Segment => Unacked }}, StoreState}
+ end;
+recover_segment(State, ContainsCheckFun, StoreState0, CountersRef, Fd,
+ Segment, ThisEntry, SegmentEntryCount,
+ Unacked, LocBytes0) ->
+ case file:read(Fd, ?ENTRY_SIZE) of
+ %% We found a non-ack persistent entry. Check that the corresponding
+ %% message exists in the message store. If not, mark this message as
+ %% acked.
+ {ok, << 1:8,
+ 0:7, 1:1, %% Message is persistent.
+ 0:8, LocationBin:136/bits,
+ Size:32/unsigned, _:64/unsigned >>} ->
+ case LocationBin of
+ %% Message is expected to be in the per-vhost store.
+ << 1:8, Id:16/binary >> ->
+ case ContainsCheckFun(Id) of
+ %% Message is in the store.
+ true ->
+ counters:add(CountersRef, ?RECOVER_COUNT, 1),
+ counters:add(CountersRef, ?RECOVER_BYTES, Size),
+ recover_segment(State, ContainsCheckFun, StoreState0, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked, LocBytes0);
+ %% Message is not in the store. Mark it as acked.
+ false ->
+ counters:add(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_VHOST, 1),
+ LocBytes = [{?HEADER_SIZE + ThisEntry * ?ENTRY_SIZE, <<0>>}|LocBytes0],
+ recover_segment(State, ContainsCheckFun, StoreState0, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked - 1, LocBytes)
+ end;
+ %% Message is in the per-queue store.
+ << 2:8,
+ StoreOffset:64/unsigned,
+ StoreSize:32/unsigned,
+ 0:32 >> ->
+ Location = {rabbit_classic_queue_store_v2, StoreOffset, StoreSize},
+ case rabbit_classic_queue_store_v2:check_msg_on_disk(Segment * SegmentEntryCount + ThisEntry,
+ Location, StoreState0) of
+ %% Message was found in store and is valid.
+ {ok, StoreState} ->
+ counters:add(CountersRef, ?RECOVER_COUNT, 1),
+ counters:add(CountersRef, ?RECOVER_BYTES, Size),
+ recover_segment(State, ContainsCheckFun, StoreState, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked, LocBytes0);
+ %% Message was not found or checksum failed. Ack it.
+ {{error, _}, StoreState} ->
+ counters:add(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_QUEUE, 1),
+ LocBytes = [{?HEADER_SIZE + ThisEntry * ?ENTRY_SIZE, <<0>>}|LocBytes0],
+ recover_segment(State, ContainsCheckFun, StoreState, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked - 1, LocBytes)
+ end;
+ %% Message was in memory or malformed. Ack it.
+ _ ->
+ counters:add(CountersRef, ?RECOVER_DROPPED_PERSISTENT_OTHER, 1),
+ LocBytes = [{?HEADER_SIZE + ThisEntry * ?ENTRY_SIZE, <<0>>}|LocBytes0],
+ recover_segment(State, ContainsCheckFun, StoreState0, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked - 1, LocBytes)
+ end;
+ %% We found a non-acked transient entry. We mark the message as acked
+ %% without checking with the message store, because it already dropped
+ %% this message via the queue walker functions.
+ {ok, << 1:8, _:7, 0:1, _/bits >>} ->
+ counters:add(CountersRef, ?RECOVER_DROPPED_TRANSIENT, 1),
+ LocBytes = [{?HEADER_SIZE + ThisEntry * ?ENTRY_SIZE, <<0>>}|LocBytes0],
+ recover_segment(State, ContainsCheckFun, StoreState0, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked - 1, LocBytes);
+ %% We found a non-entry or an acked entry. Consider it acked.
+ {ok, << 0:8, _/bits >>} ->
+ recover_segment(State, ContainsCheckFun, StoreState0, CountersRef,
+ Fd, Segment, ThisEntry + 1, SegmentEntryCount,
+ Unacked - 1, LocBytes0)
+ end.
+
+recover_index_v1_clean(State0 = #qi{ queue_name = Name }, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun) ->
+ #resource{virtual_host = VHost, name = QName} = Name,
+ rabbit_log:info("Converting queue ~s in vhost ~s from v1 to v2 after clean shutdown", [QName, VHost]),
+ {_, _, V1State} = rabbit_queue_index:recover(Name, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun,
+ convert),
+ %% We will ignore the counter results because on clean shutdown
+ %% we do not need to calculate the values again. This lets us
+ %% share code with dirty recovery.
+ CountersRef = counters:new(?RECOVER_COUNTER_SIZE, []),
+ State = recover_index_v1_common(State0, V1State, CountersRef),
+ rabbit_log:info("Queue ~s in vhost ~s converted ~b total messages from v1 to v2",
+ [QName, VHost, counters:get(CountersRef, ?RECOVER_COUNT)]),
+ State.
+
+recover_index_v1_dirty(State0 = #qi{ queue_name = Name }, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun,
+ CountersRef) ->
+ #resource{virtual_host = VHost, name = QName} = Name,
+ rabbit_log:info("Converting queue ~s in vhost ~s from v1 to v2 after unclean shutdown", [QName, VHost]),
+ %% We ignore the count and bytes returned here because we cannot trust
+ %% rabbit_queue_index: it has a bug that may lead to more bytes being
+ %% returned than it really has.
+ %%
+ %% On top of that some messages may also be in both the v1 and v2 indexes
+ %% after a crash.
+ {_, _, V1State} = rabbit_queue_index:recover(Name, Terms, IsMsgStoreClean,
+ ContainsCheckFun, OnSyncFun, OnSyncMsgFun,
+ convert),
+ State = recover_index_v1_common(State0, V1State, CountersRef),
+ rabbit_log:info("Queue ~s in vhost ~s converted ~b total messages from v1 to v2",
+ [QName, VHost, counters:get(CountersRef, ?RECOVER_COUNT)]),
+ State.
+
+%% At this point all messages are persistent because transient messages
+%% were dropped during the v1 index recovery.
+recover_index_v1_common(State0 = #qi{ queue_name = Name, dir = Dir },
+ V1State, CountersRef) ->
+ %% Use a temporary per-queue store state to store embedded messages.
+ StoreState0 = rabbit_classic_queue_store_v2:init(Name, fun(_, _) -> ok end),
+ %% Go through the v1 index and publish messages to the v2 index.
+ {LoSeqId, HiSeqId, _} = rabbit_queue_index:bounds(V1State),
+ %% When resuming after a crash we need to double check the messages that are both
+ %% in the v1 and v2 index (effectively the messages below the upper bound of the
+ %% v1 index that are about to be written to it).
+ {_, V2HiSeqId, _} = bounds(State0),
+ SkipFun = fun
+ (SeqId, FunState0) when SeqId < V2HiSeqId ->
+ case read(SeqId, SeqId + 1, FunState0) of
+ %% Message already exists, skip.
+ {[_], FunState} ->
+ {skip, FunState};
+ %% Message doesn't exist, write.
+ {[], FunState} ->
+ {write, FunState}
+ end;
+ %% Message is out of bounds of the v1 index.
+ (_, FunState) ->
+ {write, FunState}
+ end,
+ %% We use a common function also used with conversion on policy change.
+ {State1, StoreState} = rabbit_variable_queue:convert_from_v1_to_v2_loop(Name, V1State, State0, StoreState0,
+ {CountersRef, ?RECOVER_COUNT, ?RECOVER_BYTES},
+ LoSeqId, HiSeqId, SkipFun),
+ %% Terminate the v2 store client.
+ _ = rabbit_classic_queue_store_v2:terminate(StoreState),
+ %% Close the v1 index journal handle if any.
+ JournalHdl = element(4, V1State),
+ ok = case JournalHdl of
+ undefined -> ok;
+ _ -> file_handle_cache:close(JournalHdl)
+ end,
+ %% Delete the v1 index files.
+ OldFiles = ["journal.jif"|rabbit_file:wildcard(".*\\.idx", Dir)],
+ _ = [rabbit_file:delete(filename:join(Dir, F)) || F <- OldFiles],
+ %% Ensure that everything in the v2 index is written to disk.
+ State = flush(State1),
+ %% Clean up all the garbage that we have surely been creating.
+ garbage_collect(),
+ State.
+
+-spec terminate(rabbit_types:vhost(), [any()], State) -> State when State::state().
+
+terminate(VHost, Terms, State0 = #qi { dir = Dir,
+ segments = Segments,
+ fds = OpenFds }) ->
+ ?DEBUG("~0p ~0p ~0p", [VHost, Terms, State0]),
+ %% Flush the buffer.
+ State = flush_buffer(State0, full),
+ %% Fsync and close all FDs.
+ _ = maps:map(fun(_, Fd) ->
+ ok = file:sync(Fd),
+ ok = file:close(Fd)
+ end, OpenFds),
+ file_handle_cache:release_reservation(),
+ %% Write recovery terms for faster recovery.
+ rabbit_recovery_terms:store(VHost, filename:basename(Dir),
+ [{v2_index_state, {?VERSION, Segments}} | Terms]),
+ State#qi{ segments = #{},
+ fds = #{} }.
+
+-spec delete_and_terminate(State) -> State when State::state().
+
+delete_and_terminate(State = #qi { dir = Dir,
+ fds = OpenFds }) ->
+ ?DEBUG("~0p", [State]),
+ %% Close all FDs.
+ _ = maps:map(fun(_, Fd) ->
+ ok = file:close(Fd)
+ end, OpenFds),
+ file_handle_cache:release_reservation(),
+ %% Erase the data on disk.
+ ok = erase_index_dir(Dir),
+ State#qi{ segments = #{},
+ fds = #{} }.
+
+-spec publish(rabbit_types:msg_id(), rabbit_variable_queue:seq_id(),
+ rabbit_variable_queue:msg_location(),
+ rabbit_types:message_properties(), boolean(),
+ non_neg_integer() | infinity, State) -> State when State::state().
+
+%% Because we always persist to the msg_store, the Msg(Or)Id argument
+%% here is always a binary, never a record.
+publish(MsgId, SeqId, Location, Props, IsPersistent, TargetRamCount,
+ State0 = #qi { write_buffer = WriteBuffer0,
+ segments = Segments }) ->
+ ?DEBUG("~0p ~0p ~0p ~0p ~0p ~0p ~0p", [MsgId, SeqId, Location, Props, IsPersistent, TargetRamCount, State0]),
+ %% Add the entry to the write buffer.
+ WriteBuffer = WriteBuffer0#{SeqId => {MsgId, SeqId, Location, Props, IsPersistent}},
+ State1 = State0#qi{ write_buffer = WriteBuffer },
+ %% When writing to a new segment we must prepare the file
+ %% and update our segments state.
+ SegmentEntryCount = segment_entry_count(),
+ ThisSegment = SeqId div SegmentEntryCount,
+ State2 = case maps:get(ThisSegment, Segments, undefined) of
+ undefined -> new_segment_file(ThisSegment, State1);
+ ThisSegmentCount -> State1#qi{ segments = Segments#{ ThisSegment => ThisSegmentCount + 1 }}
+ end,
+ %% When publisher confirms have been requested for this
+ %% message we mark the message as unconfirmed.
+ State = maybe_mark_unconfirmed(MsgId, Props, State2),
+ maybe_flush_buffer(State).
+
+new_segment_file(Segment, State = #qi{ segments = Segments }) ->
+ #qi{ fds = OpenFds } = reduce_fd_usage(Segment, State),
+ false = maps:is_key(Segment, OpenFds), %% assert
+ {ok, Fd} = file:open(segment_file(Segment, State), [read, write, raw, binary]),
+ %% We must preallocate space for the file. We want the space
+ %% to be allocated to not have to worry about errors when
+ %% writing later on.
+ SegmentEntryCount = segment_entry_count(),
+ Size = ?HEADER_SIZE + SegmentEntryCount * ?ENTRY_SIZE,
+ case file:allocate(Fd, 0, Size) of
+ ok ->
+ ok;
+ %% On some platforms file:allocate is not supported (e.g. Windows).
+ %% In that case we fill the file with zeroes manually.
+ {error, enotsup} ->
+ ok = file:write(Fd, <<0:Size/unit:8>>),
+ {ok, 0} = file:position(Fd, bof),
+ %% We do a full GC immediately after because we do not want
+ %% to keep around the large binary we used to fill the file.
+ _ = garbage_collect(),
+ ok
+ end,
+ %% We then write the segment file header. It contains
+ %% some useful info and some reserved bytes for future use.
+ %% We currently do not make use of this information. It is
+ %% only there for forward compatibility purposes (for example
+ %% to support an index with mixed segment_entry_count() values).
+ FromSeqId = Segment * SegmentEntryCount,
+ ToSeqId = FromSeqId + SegmentEntryCount,
+ ok = file:write(Fd, << ?MAGIC:32,
+ ?VERSION:8,
+ FromSeqId:64/unsigned,
+ ToSeqId:64/unsigned,
+ 0:344 >>),
+ %% Keep the file open.
+ State#qi{ segments = Segments#{Segment => 1},
+ fds = OpenFds#{Segment => Fd} }.
+
+%% We try to keep the number of FDs open at 4 at a maximum.
+%% Under normal circumstances we will end up with 1 or 2
+%% open (roughly one for reading, one for writing, when
+%% the consumer lags a little) so this is mostly to avoid
+%% using too many FDs when the consumer lags a lot. We
+%% limit at 4 because we try to keep up to 2 for reading
+%% and 2 for writing.
+reduce_fd_usage(SegmentToOpen, State = #qi{ fds = OpenFds })
+ when map_size(OpenFds) < 4 ->
+ %% The only case where we need to update reservations is
+ %% when we are opening a segment that wasn't already open,
+ %% and we are not closing another segment at the same time.
+ case OpenFds of
+ #{SegmentToOpen := _} ->
+ State;
+ _ ->
+ file_handle_cache:set_reservation(?STORE_FD_RESERVATIONS + map_size(OpenFds) + 1),
+ State
+ end;
+reduce_fd_usage(SegmentToOpen, State = #qi{ fds = OpenFds0 }) ->
+ case OpenFds0 of
+ #{SegmentToOpen := _} ->
+ State;
+ _ ->
+ %% We know we have 4 FDs open. Because we are typically reading
+ %% or acking the oldest and writing to the newest, we will close
+ %% the FDs in the middle here.
+ OpenSegments = lists:sort(maps:keys(OpenFds0)),
+ [_Left, MidLeft, MidRight, _Right] = OpenSegments,
+ SegmentToClose = if
+ %% We are opening a segment after the mid right FD. Close it.
+ SegmentToOpen > MidRight ->
+ MidRight;
+ %% We are opening a segment before the mid left FD. Close it.
+ SegmentToOpen < MidLeft ->
+ MidLeft;
+ %% Otherwise pick the middle segment close to where we are located.
+ %% When we are located at equal distance we arbitrarily favor the
+ %% right segment.
+ MidRight - SegmentToOpen < SegmentToOpen - MidLeft ->
+ MidRight;
+ true ->
+ MidLeft
+ end,
+ ?DEBUG("~0p ~0p ~0p", [SegmentToOpen, OpenSegments, SegmentToClose]),
+ {Fd, OpenFds} = maps:take(SegmentToClose, OpenFds0),
+ ok = file:close(Fd),
+ State#qi{ fds = OpenFds }
+ end.
+
+maybe_mark_unconfirmed(MsgId, #message_properties{ needs_confirming = true },
+ State = #qi { confirms = Confirms }) ->
+ State#qi{ confirms = gb_sets:add_element(MsgId, Confirms) };
+maybe_mark_unconfirmed(_, _, State) ->
+ State.
+
+%% @todo Perhaps make the two limits configurable. Also refine the default.
+maybe_flush_buffer(State = #qi { write_buffer = WriteBuffer,
+ write_buffer_updates = NumUpdates }) ->
+ if
+ %% When we have at least 100 entries, we always want to flush,
+ %% in order to limit the memory usage and avoid losing too much
+ %% data on crashes.
+ (map_size(WriteBuffer) - NumUpdates) >= 100 ->
+ flush_buffer(State, full);
+ %% We may want to flush updates (acks) when
+ %% too many have accumulated.
+ NumUpdates >= 2000 ->
+ flush_buffer(State, updates);
+ %% Otherwise we do not flush this time.
+ true ->
+ State
+ end.
+
+flush_buffer(State0 = #qi { write_buffer = WriteBuffer0,
+ cache = Cache0 },
+ FlushType) ->
+ SegmentEntryCount = segment_entry_count(),
+ %% First we prepare the writes sorted by segment.
+ {Writes, WriteBuffer, AcksToCache} = maps:fold(fun
+ (SeqId, ack, {WritesAcc, BufferAcc, AcksAcc}) when FlushType =:= updates ->
+ {write_ack(SeqId, SegmentEntryCount, WritesAcc),
+ BufferAcc,
+ AcksAcc#{SeqId => ack}};
+ (SeqId, ack, {WritesAcc, BufferAcc, AcksAcc}) ->
+ {write_ack(SeqId, SegmentEntryCount, WritesAcc),
+ BufferAcc,
+ AcksAcc};
+ (SeqId, Entry, {WritesAcc, BufferAcc, AcksAcc}) when FlushType =:= updates ->
+ {WritesAcc,
+ BufferAcc#{SeqId => Entry},
+ AcksAcc};
+ %% Otherwise we write the entire buffer.
+ (SeqId, Entry, {WritesAcc, BufferAcc, AcksAcc}) ->
+ {write_entry(SeqId, SegmentEntryCount, Entry, WritesAcc),
+ BufferAcc,
+ AcksAcc}
+ end, {#{}, #{}, #{}}, WriteBuffer0),
+ %% Then we do the writes for each segment.
+ State = maps:fold(fun(Segment, LocBytes, FoldState0) ->
+ FoldState1 = reduce_fd_usage(Segment, FoldState0),
+ {Fd, FoldState} = get_fd_for_segment(Segment, FoldState1),
+ ok = file:pwrite(Fd, LocBytes),
+ file_handle_cache_stats:update(queue_index_write),
+ FoldState
+ end, State0, Writes),
+ %% Update the cache. If we are flushing the entire write buffer,
+ %% then that buffer becomes the new cache. Otherwise remove the
+ %% old acks from the cache and add the new acks.
+ Cache = case FlushType of
+ full ->
+ WriteBuffer0;
+ updates ->
+ Cache1 = maps:fold(fun
+ (_, ack, CacheAcc) -> CacheAcc;
+ (SeqId, Entry, CacheAcc) -> CacheAcc#{SeqId => Entry}
+ end, #{}, Cache0),
+ maps:merge(Cache1, AcksToCache)
+ end,
+ %% Finally we update the state.
+ State#qi{ write_buffer = WriteBuffer,
+ write_buffer_updates = 0,
+ cache = Cache }.
+
+write_ack(SeqId, SegmentEntryCount, WritesAcc) ->
+ Segment = SeqId div SegmentEntryCount,
+ Offset = ?HEADER_SIZE + (SeqId rem SegmentEntryCount) * ?ENTRY_SIZE,
+ LocBytesAcc = maps:get(Segment, WritesAcc, []),
+ WritesAcc#{Segment => [{Offset, <<0>>}|LocBytesAcc]}.
+
+write_entry(SeqId, SegmentEntryCount, Entry, WritesAcc) ->
+ Segment = SeqId div SegmentEntryCount,
+ Offset = ?HEADER_SIZE + (SeqId rem SegmentEntryCount) * ?ENTRY_SIZE,
+ LocBytesAcc = maps:get(Segment, WritesAcc, []),
+ WritesAcc#{Segment => [{Offset, build_entry(Entry)}|LocBytesAcc]}.
+
+build_entry({Id, _SeqId, Location, Props, IsPersistent}) ->
+ Flags = case IsPersistent of
+ true -> 1;
+ false -> 0
+ end,
+ LocationBin = case Location of
+ memory ->
+ << 0:136 >>;
+ rabbit_msg_store ->
+ << 1:8,
+ Id:16/binary %% Message store ID.
+ >>;
+ {rabbit_classic_queue_store_v2, StoreOffset, StoreSize} ->
+ << 2:8,
+ StoreOffset:64/unsigned, %% Per-queue store offset.
+ StoreSize:32/unsigned, %% Per-queue store size.
+ 0:32 >>
+ end,
+ #message_properties{ expiry = Expiry0, size = Size } = Props,
+ Expiry = case Expiry0 of
+ undefined -> 0;
+ _ -> Expiry0
+ end,
+ << 1:8, %% Status. 0 = no entry or entry acked, 1 = entry exists.
+ Flags:8, %% IsPersistent flag (least significant bit).
+ 0:8, %% Unused.
+ LocationBin/binary,
+ %% The shared message store uses 8 bytes for the size but that was never needed
+ %% as the v1 index always used 4 bytes. So we are using 4 bytes here as well.
+ Size:32/unsigned, %% Message payload size.
+ Expiry:64/unsigned >>. %% Expiration time.
+
+get_fd_for_segment(Segment, State = #qi{ fds = OpenFds }) ->
+ case OpenFds of
+ #{ Segment := Fd } ->
+ {Fd, State};
+ _ ->
+ {ok, Fd} = file:open(segment_file(Segment, State), [read, write, raw, binary]),
+ {Fd, State#qi{ fds = OpenFds#{ Segment => Fd }}}
+ end.
+
+%% When marking acks we need to update the file(s) on disk.
+%% When a file has been fully acked we may also close its
+%% open FD if any and delete it.
+
+-spec ack([rabbit_variable_queue:seq_id()], State) -> {[non_neg_integer()], State} when State::state().
+
+%% The rabbit_variable_queue module may call this function
+%% with an empty list. Do nothing.
+ack([], State) ->
+ ?DEBUG("[] ~0p", [State]),
+ {[], State};
+ack(SeqIds, State0 = #qi{ write_buffer = WriteBuffer0,
+ write_buffer_updates = NumUpdates0,
+ cache = Cache0 }) ->
+ ?DEBUG("~0p ~0p", [SeqIds, State0]),
+ %% We start by updating the ack state information. We then
+ %% use this information to delete segment files on disk that
+ %% were fully acked.
+ {Deletes, State1} = update_ack_state(SeqIds, State0),
+ State = delete_segments(Deletes, State1),
+ %% We add acks to the write buffer. We take special care not to add
+ %% acks for segments that have been deleted. We do this using second
+ %% step when there have been deletes to avoid having extra overhead
+ %% in the normal case.
+ {WriteBuffer1, NumUpdates1, Cache} = lists:foldl(fun ack_fold_fun/2,
+ {WriteBuffer0, NumUpdates0, Cache0},
+ SeqIds),
+ {WriteBuffer, NumUpdates} = case Deletes of
+ [] ->
+ {WriteBuffer1, NumUpdates1};
+ _ ->
+ {WriteBuffer2, NumUpdates2, _, _} = maps:fold(
+ fun ack_delete_fold_fun/3,
+ {#{}, 0, Deletes, segment_entry_count()},
+ WriteBuffer1),
+ {WriteBuffer2, NumUpdates2}
+ end,
+ {Deletes, maybe_flush_buffer(State#qi{ write_buffer = WriteBuffer,
+ write_buffer_updates = NumUpdates,
+ cache = Cache })}.
+
+update_ack_state(SeqIds, State = #qi{ segments = Segments0 }) ->
+ SegmentEntryCount = segment_entry_count(),
+ {Delete, Segments} = lists:foldl(fun(SeqId, {DeleteAcc, Segments1}) ->
+ Segment = SeqId div SegmentEntryCount,
+ case Segments1 of
+ #{Segment := 1} ->
+ %% We remove the segment information immediately.
+ %% The file itself will be removed after we return.
+ {[Segment|DeleteAcc], maps:remove(Segment, Segments1)};
+ #{Segment := Unacked} ->
+ {DeleteAcc, Segments1#{Segment => Unacked - 1}}
+ end
+ end, {[], Segments0}, SeqIds),
+ {Delete, State#qi{ segments = Segments }}.
+
+delete_segments([], State) ->
+ State;
+delete_segments([Segment|Tail], State) ->
+ delete_segments(Tail, delete_segment(Segment, State)).
+
+delete_segment(Segment, State0 = #qi{ fds = OpenFds0 }) ->
+ %% We close the open fd if any.
+ State = case maps:take(Segment, OpenFds0) of
+ {Fd, OpenFds} ->
+ ok = file:close(Fd),
+ file_handle_cache:set_reservation(?STORE_FD_RESERVATIONS + map_size(OpenFds)),
+ State0#qi{ fds = OpenFds };
+ error ->
+ State0
+ end,
+ %% Then we can delete the segment file.
+ case file:delete(segment_file(Segment, State)) of
+ ok -> ok;
+ %% It's possible that the file already does not exist:
+ %% following a crash, and due to rabbit_variable_queue's
+ %% poor understanding of bounds in that scenario. Also
+ %% see comment in read_from_disk/3.
+ {error, enoent} -> ok
+ end,
+ State.
+
+ack_fold_fun(SeqId, {Buffer, Updates, Cache}) ->
+ case Buffer of
+ %% Remove the write if there is one scheduled. In that case
+ %% we will never write this entry to disk.
+ #{SeqId := Write} when is_tuple(Write) ->
+ {maps:remove(SeqId, Buffer), Updates, Cache};
+ %% Otherwise ack an entry that is already on disk.
+ %% Remove the entry from the cache if any since it is now covered by the buffer.
+ _ when not is_map_key(SeqId, Buffer) ->
+ {Buffer#{SeqId => ack}, Updates + 1, maps:remove(SeqId, Cache)}
+ end.
+
+%% Remove writes for all segments that have been deleted.
+ack_delete_fold_fun(SeqId, Write, {Buffer, Updates, Deletes, SegmentEntryCount}) ->
+ IsDeleted = lists:member(SeqId div SegmentEntryCount, Deletes),
+ case IsDeleted of
+ true when Write =:= ack ->
+ {Buffer,
+ Updates,
+ Deletes, SegmentEntryCount};
+ false ->
+ {Buffer#{SeqId => Write},
+ Updates + case is_atom(Write) of true -> 1; false -> 0 end,
+ Deletes, SegmentEntryCount}
+ end.
+
+%% A better interface for read/3 would be to request a maximum
+%% of N messages, rather than first call next_segment_boundary/3
+%% and then read from S1 to S2. This function could then return
+%% either N messages or less depending on the current state.
+
+-spec read(rabbit_variable_queue:seq_id(),
+ rabbit_variable_queue:seq_id(),
+ State) ->
+ {[entry()], State}
+ when State::state().
+
+%% From is inclusive, To is exclusive.
+
+%% Nothing to read because the second argument is exclusive.
+read(FromSeqId, ToSeqId, State)
+ when FromSeqId =:= ToSeqId ->
+ ?DEBUG("~0p ~0p ~0p", [FromSeqId, ToSeqId, State]),
+ {[], State};
+%% Read the messages requested.
+read(FromSeqId, ToSeqId, State0 = #qi{ write_buffer = WriteBuffer,
+ cache = Cache }) ->
+ ?DEBUG("~0p ~0p ~0p", [FromSeqId, ToSeqId, State0]),
+ %% We first try to read from the write buffer what we can,
+ %% then from the cache, then we read the rest from disk.
+ {Reads0, SeqIdsOnDisk} = read_from_buffers(FromSeqId, ToSeqId,
+ WriteBuffer, Cache,
+ [], []),
+ {Reads1, State} = read_from_disk(SeqIdsOnDisk,
+ State0,
+ Reads0),
+ %% The messages may not be in the correct order. Fix that.
+ Reads = lists:keysort(2, Reads1),
+ {Reads, State}.
+
+read_from_buffers(ToSeqId, ToSeqId, _, _, SeqIdsOnDisk, Reads) ->
+ %% We must do a lists:reverse here so that we are able
+ %% to read multiple continuous messages from disk in one call.
+ {Reads, lists:reverse(SeqIdsOnDisk)};
+read_from_buffers(SeqId, ToSeqId, WriteBuffer, Cache, SeqIdsOnDisk, Reads) ->
+ case WriteBuffer of
+ #{SeqId := ack} ->
+ read_from_buffers(SeqId + 1, ToSeqId, WriteBuffer, Cache, SeqIdsOnDisk, Reads);
+ #{SeqId := Entry} when is_tuple(Entry) ->
+ read_from_buffers(SeqId + 1, ToSeqId, WriteBuffer, Cache, SeqIdsOnDisk, [Entry|Reads]);
+ _ ->
+ %% Nothing was found in the write buffer, but we may have an entry in the cache.
+ case Cache of
+ #{SeqId := ack} ->
+ read_from_buffers(SeqId + 1, ToSeqId, WriteBuffer, Cache, SeqIdsOnDisk, Reads);
+ #{SeqId := Entry} when is_tuple(Entry) ->
+ read_from_buffers(SeqId + 1, ToSeqId, WriteBuffer, Cache, SeqIdsOnDisk, [Entry|Reads]);
+ _ ->
+ read_from_buffers(SeqId + 1, ToSeqId, WriteBuffer, Cache, [SeqId|SeqIdsOnDisk], Reads)
+ end
+ end.
+
+%% We try to minimize the number of file:read calls when reading from
+%% the disk. We find the number of continuous messages, read them all
+%% at once, and then repeat the loop.
+
+read_from_disk([], State, Acc) ->
+ {Acc, State};
+read_from_disk(SeqIdsToRead0, State0 = #qi{ write_buffer = WriteBuffer }, Acc0) ->
+ FirstSeqId = hd(SeqIdsToRead0),
+ %% We get the highest continuous seq_id() from the same segment file.
+ %% If there are more continuous entries we will read them on the
+ %% next loop.
+ {LastSeqId, SeqIdsToRead} = highest_continuous_seq_id(SeqIdsToRead0,
+ next_segment_boundary(FirstSeqId)),
+ ReadSize = (LastSeqId - FirstSeqId + 1) * ?ENTRY_SIZE,
+ case get_fd(FirstSeqId, State0) of
+ {Fd, OffsetForSeqId, State} ->
+ file_handle_cache_stats:update(queue_index_read),
+ {ok, EntriesBin} = file:pread(Fd, OffsetForSeqId, ReadSize),
+ %% We cons new entries into the Acc and only reverse it when we
+ %% are completely done reading new entries.
+ Acc = parse_entries(EntriesBin, FirstSeqId, WriteBuffer, Acc0),
+ read_from_disk(SeqIdsToRead, State, Acc);
+ %% The segment file no longer exists. This is equivalent to a file
+ %% where all entries are non-existent/acked. This can happen after
+ %% a crash due to rabbit_variable_queue's understanding of bounds.
+ empty ->
+ read_from_disk(SeqIdsToRead, State0, Acc0)
+ end.
+
+get_fd(SeqId, State0 = #qi{ segments = Segments }) ->
+ SegmentEntryCount = segment_entry_count(),
+ Segment = SeqId div SegmentEntryCount,
+ case maps:is_key(Segment, Segments) of
+ true ->
+ Offset = ?HEADER_SIZE + (SeqId rem SegmentEntryCount) * ?ENTRY_SIZE,
+ State1 = reduce_fd_usage(Segment, State0),
+ {Fd, State} = get_fd_for_segment(Segment, State1),
+ {Fd, Offset, State};
+ false ->
+ empty
+ end.
+
+%% When recovering from a dirty shutdown, we may end up reading entries that
+%% have already been acked. We do not add them to the Acc in that case, and
+%% as a result we may end up returning less messages than initially expected.
+
+parse_entries(<<>>, _, _, Acc) ->
+ Acc;
+parse_entries(<< Status:8,
+ 0:7, IsPersistent:1,
+ 0:8,
+ LocationBin:136/bits,
+ Size:32/unsigned,
+ Expiry0:64/unsigned,
+ Rest/bits >>, SeqId, WriteBuffer, Acc) ->
+ %% We skip entries that have already been acked. This may
+ %% happen when we recover from a dirty shutdown or when
+ %% some messages were requeued.
+ case Status of
+ 1 ->
+ %% We get the Id binary in two steps because we do not want
+ %% to create a sub-binary and keep the larger binary around
+ %% in memory.
+ {Id, Location} = case LocationBin of
+ << 0:136 >> ->
+ {undefined, memory};
+ << 1:8, Id0:16/binary >> ->
+ {binary:copy(Id0), rabbit_msg_store};
+ << 2:8, StoreOffset:64/unsigned, StoreSize:32/unsigned, 0:32 >> ->
+ {undefined, {rabbit_classic_queue_store_v2, StoreOffset, StoreSize}}
+ end,
+ Expiry = case Expiry0 of
+ 0 -> undefined;
+ _ -> Expiry0
+ end,
+ Props = #message_properties{expiry = Expiry, size = Size},
+ parse_entries(Rest, SeqId + 1, WriteBuffer,
+ [{Id, SeqId, Location, Props, IsPersistent =:= 1}|Acc]);
+ 0 -> %% No entry or acked entry.
+ parse_entries(Rest, SeqId + 1, WriteBuffer, Acc)
+ end.
+
+%% ----
+%%
+%% Syncing and flushing to disk requested by the queue.
+%% Note: the v2 no longer calls fsync, it only flushes.
+
+-spec sync(State) -> State when State::state().
+
+sync(State0 = #qi{ confirms = Confirms,
+ on_sync = OnSyncFun }) ->
+ ?DEBUG("~0p", [State0]),
+ State = flush_buffer(State0, full),
+ _ = case gb_sets:is_empty(Confirms) of
+ true ->
+ ok;
+ false ->
+ OnSyncFun(Confirms)
+ end,
+ State#qi{ confirms = gb_sets:new() }.
+
+-spec needs_sync(state()) -> 'false'.
+
+needs_sync(State = #qi{ confirms = Confirms }) ->
+ ?DEBUG("~0p", [State]),
+ case gb_sets:is_empty(Confirms) of
+ true -> false;
+ false -> confirms
+ end.
+
+-spec flush(State) -> State when State::state().
+
+flush(State) ->
+ ?DEBUG("~0p", [State]),
+ %% Flushing to disk is the same operation as sync
+ %% except it is called before hibernating or when
+ %% reducing memory use.
+ sync(State).
+
+%% ----
+%%
+%% Defer to rabbit_queue_index for recovery for the time being.
+%% We can move the functions here when the v1 index is removed.
+
+start(VHost, DurableQueueNames) ->
+ ?DEBUG("~0p ~0p", [VHost, DurableQueueNames]),
+ %% We replace the queue_index_walker function with our own.
+ %% Everything else remains the same.
+ {OrderedTerms, {_QueueIndexWalkerFun, FunState}} = rabbit_queue_index:start(VHost, DurableQueueNames),
+ {OrderedTerms, {fun queue_index_walker/1, FunState}}.
+
+queue_index_walker({start, DurableQueues}) when is_list(DurableQueues) ->
+ ?DEBUG("~0p", [{start, DurableQueues}]),
+ {ok, Gatherer} = gatherer:start_link(),
+ [begin
+ ok = gatherer:fork(Gatherer),
+ ok = worker_pool:submit_async(
+ fun () -> link(Gatherer),
+ try
+ queue_index_walker_reader(QueueName, Gatherer)
+ after
+ unlink(Gatherer)
+ end,
+ ok
+ end)
+ end || QueueName <- DurableQueues],
+ queue_index_walker({next, Gatherer});
+queue_index_walker({next, Gatherer}) when is_pid(Gatherer) ->
+ ?DEBUG("~0p", [{next, Gatherer}]),
+ case gatherer:out(Gatherer) of
+ empty ->
+ ok = gatherer:stop(Gatherer),
+ finished;
+ {value, {MsgId, Count}} ->
+ {MsgId, Count, {next, Gatherer}}
+ end.
+
+queue_index_walker_reader(#resource{ virtual_host = VHost } = Name, Gatherer) ->
+ ?DEBUG("~0p ~0p", [Name, Gatherer]),
+ VHostDir = rabbit_vhost:msg_store_dir_path(VHost),
+ Dir = queue_dir(VHostDir, Name),
+ SegmentFiles = rabbit_file:wildcard(".*\\" ++ ?SEGMENT_EXTENSION, Dir),
+ _ = [queue_index_walker_segment(filename:join(Dir, F), Gatherer) || F <- SegmentFiles],
+ %% When there are files belonging to the v1 index, we go through
+ %% the v1 index walker function as well.
+ case rabbit_file:wildcard(".*\\.idx", Dir) of
+ [_|_] ->
+ %% This function will call gatherer:finish/1, we do not
+ %% need to call it here.
+ rabbit_queue_index:queue_index_walker_reader(Name, Gatherer);
+ [] ->
+ ok = gatherer:finish(Gatherer)
+ end.
+
+queue_index_walker_segment(F, Gatherer) ->
+ ?DEBUG("~0p ~0p", [F, Gatherer]),
+ {ok, Fd} = file:open(F, [read, read_ahead, raw, binary]),
+ case file:read(Fd, ?HEADER_SIZE) of
+ {ok, <<?MAGIC:32,?VERSION:8,
+ FromSeqId:64/unsigned,ToSeqId:64/unsigned,
+ _/bits>>} ->
+ queue_index_walker_segment(Fd, Gatherer, 0, ToSeqId - FromSeqId);
+ _ ->
+ %% Invalid segment file. Skip.
+ ok
+ end,
+ ok = file:close(Fd).
+
+queue_index_walker_segment(_, _, N, N) ->
+ %% We reached the end of the segment file.
+ ok;
+queue_index_walker_segment(Fd, Gatherer, N, Total) ->
+ case file:read(Fd, ?ENTRY_SIZE) of
+ %% We found a non-ack persistent entry. Gather it.
+ {ok, <<1,_:7,1:1,_,1,Id:16/binary,_/bits>>} ->
+ gatherer:sync_in(Gatherer, {Id, 1}),
+ queue_index_walker_segment(Fd, Gatherer, N + 1, Total);
+ %% We found an ack, a transient entry or a non-entry. Skip it.
+ {ok, _} ->
+ queue_index_walker_segment(Fd, Gatherer, N + 1, Total)
+ end.
+
+stop(VHost) ->
+ ?DEBUG("~0p", [VHost]),
+ rabbit_queue_index:stop(VHost).
+
+%% ----
+%%
+%% These functions either call the normal functions or are no-ops.
+%% They relate to specific optimizations of rabbit_queue_index and
+%% rabbit_variable_queue.
+%%
+%% @todo The way pre_publish works is still fairly puzzling.
+%% When the v1 index gets removed we can just drop
+%% these functions.
+
+pre_publish(MsgOrId, SeqId, Location, Props, IsPersistent, TargetRamCount, State) ->
+ ?DEBUG("~0p ~0p ~0p ~0p ~0p ~0p ~0p", [MsgOrId, SeqId, Location, Props, IsPersistent, TargetRamCount, State]),
+ publish(MsgOrId, SeqId, Location, Props, IsPersistent, TargetRamCount, State).
+
+flush_pre_publish_cache(TargetRamCount, State) ->
+ ?DEBUG("~0p ~0p", [TargetRamCount, State]),
+ State.
+
+%% See comment in rabbit_queue_index:bounds/1. We do not need to be
+%% accurate about these values because they are simply used as lowest
+%% and highest possible bounds. In fact we HAVE to be inaccurate for
+%% the test suite to pass. This can probably be made more accurate
+%% in the future.
+
+-spec bounds(State) ->
+ {non_neg_integer(), non_neg_integer(), State}
+ when State::state().
+
+bounds(State = #qi{ segments = Segments }) ->
+ ?DEBUG("~0p", [State]),
+ %% We must special case when we are empty to make tests happy.
+ if
+ Segments =:= #{} ->
+ {0, 0, State};
+ true ->
+ SegmentEntryCount = segment_entry_count(),
+ SortedSegments = lists:sort(maps:keys(Segments)),
+ Oldest = hd(SortedSegments),
+ Newest = hd(lists:reverse(SortedSegments)),
+ {Oldest * SegmentEntryCount,
+ (1 + Newest) * SegmentEntryCount,
+ State}
+ end.
+
+%% The next_segment_boundary/1 function is used internally when
+%% reading. It should not be called from rabbit_variable_queue.
+
+-spec next_segment_boundary(SeqId) -> SeqId when SeqId::rabbit_variable_queue:seq_id().
+
+next_segment_boundary(SeqId) ->
+ ?DEBUG("~0p", [SeqId]),
+ SegmentEntryCount = segment_entry_count(),
+ (1 + (SeqId div SegmentEntryCount)) * SegmentEntryCount.
+
+%% This function is only used when downgrading to the v1 index.
+%% We potentially close the relevant fd and then delete the
+%% segment file.
+delete_segment_file_for_seq_id(SeqId, State0) ->
+ SegmentEntryCount = segment_entry_count(),
+ Segment = SeqId div SegmentEntryCount,
+ State = delete_segment(Segment, State0),
+ {[Segment], State}.
+
+%% ----
+%%
+%% Internal.
+
+segment_entry_count() ->
+ %% A value lower than the max write_buffer size results in nothing needing
+ %% to be written to disk as long as the consumer consumes as fast as the
+ %% producer produces.
+ application:get_env(rabbit, classic_queue_index_v2_segment_entry_count, 4096).
+
+%% Note that store files will also be removed if there are any in this directory.
+%% Currently the v2 per-queue store expects this function to remove its own files.
+
+erase_index_dir(Dir) ->
+ case rabbit_file:is_dir(Dir) of
+ true -> rabbit_file:recursive_delete([Dir]);
+ false -> ok
+ end.
+
+queue_dir(VHostDir, QueueName) ->
+ %% Queue directory is
+ %% {node_database_dir}/msg_stores/vhosts/{vhost}/queues/{queue}
+ QueueDir = queue_name_to_dir_name(QueueName),
+ filename:join([VHostDir, "queues", QueueDir]).
+
+queue_name_to_dir_name(#resource { kind = queue,
+ virtual_host = VHost,
+ name = QName }) ->
+ <<Num:128>> = erlang:md5(<<"queue", VHost/binary, QName/binary>>),
+ rabbit_misc:format("~.36B", [Num]).
+
+segment_file(Segment, #qi{ dir = Dir }) ->
+ filename:join(Dir, integer_to_list(Segment) ++ ?SEGMENT_EXTENSION).
+
+highest_continuous_seq_id([SeqId|Tail], EndSeqId)
+ when (1 + SeqId) =:= EndSeqId ->
+ {SeqId, Tail};
+highest_continuous_seq_id([SeqId1, SeqId2|Tail], EndSeqId)
+ when (1 + SeqId1) =:= SeqId2 ->
+ highest_continuous_seq_id([SeqId2|Tail], EndSeqId);
+highest_continuous_seq_id([SeqId|Tail], _) ->
+ {SeqId, Tail}.
diff --git a/deps/rabbit/src/rabbit_classic_queue_store_v2.erl b/deps/rabbit/src/rabbit_classic_queue_store_v2.erl
new file mode 100644
index 0000000000..13d84eca4e
--- /dev/null
+++ b/deps/rabbit/src/rabbit_classic_queue_store_v2.erl
@@ -0,0 +1,494 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+%% The classic queue store works as follow:
+%%
+%% When a message needs to be written to disk, it is appended to
+%% its corresponding segment file. An offset is returned and that
+%% offset will be added to the #msg_status (in lieu of msg_id)
+%% and eventually written to disk by the index as well.
+%%
+%% The corresponding segment file is found by looking at the
+%% SeqId, just like the index. There's a 1:1 abstract mapping
+%% between index segment files and store segment files. (But
+%% whether there are two files for each segment is another
+%% question.)
+%%
+%% Messages are only ever written once to the store. Messages
+%% are not reference counted, and are not shared between queues.
+%%
+%% Messages cannot be removed from the message store individually.
+%% Instead, when the index deletes one of its segment files, it
+%% tells the queue to also delete the corresponding segment files
+%% in the store. This means that store segment files can grow
+%% very large because their size is only limited by the number
+%% of entries in the index.
+%%
+%% Messages are synced to disk only when the index tells us
+%% they should be. What this effectively means is that the
+%% ?STORE:sync function is called right before the ?INDEX:sync
+%% function, and only if there are outstanding confirms in the
+%% index. As a result the store does not need to keep track of
+%% confirms.
+%%
+%% The old rabbit_msg_store has separate transient/persistent stores
+%% to make recovery of data on disk quicker. We do not need to
+%% do this here, because the recovery is only done via the index,
+%% which already knows about persistent messages and does not
+%% need to look into the store to discard them. Messages on disk
+%% will be dropped at the same time as the index deletes the
+%% corresponding segment file.
+%%
+%% The file_handle_cache reservations are done by the v2 index
+%% because they are handled at a pid level. Since we are using
+%% up to 2 FDs in this module we make the index reserve 2 extra
+%% FDs.
+
+-module(rabbit_classic_queue_store_v2).
+
+-export([init/2, terminate/1,
+ write/4, sync/1, read/3, check_msg_on_disk/3,
+ remove/2, delete_segments/2]).
+
+-define(SEGMENT_EXTENSION, ".qs").
+
+-define(MAGIC, 16#52435153). %% "RCQS"
+-define(VERSION, 2).
+-define(HEADER_SIZE, 64). %% bytes
+-define(ENTRY_HEADER_SIZE, 8). %% bytes
+
+-include_lib("rabbit_common/include/rabbit.hrl").
+
+%% We need this to directly access the delayed file io pid.
+-include_lib("kernel/include/file.hrl").
+
+%% Set to true to get an awful lot of debug logs.
+-if(false).
+-define(DEBUG(X,Y), logger:debug("~0p: " ++ X, [?FUNCTION_NAME|Y])).
+-else.
+-define(DEBUG(X,Y), _ = X, _ = Y, ok).
+-endif.
+
+-record(qs, {
+ %% Store directory - same as the queue index.
+ dir :: file:filename(),
+
+ %% We keep up to one write fd open at any time.
+ %% Because queues are FIFO, writes are mostly sequential
+ %% and they occur only once, we do not need to worry
+ %% much about writing to multiple different segment
+ %% files.
+ %%
+ %% We keep track of which segment is open, its fd,
+ %% and the current offset in the file. This offset
+ %% is the position at which the next message will
+ %% be written, and it will be kept track in the
+ %% queue (and potentially in the queue index) for
+ %% a later read.
+ write_segment = undefined :: undefined | non_neg_integer(),
+ write_fd = undefined :: undefined | file:fd(),
+ write_offset = ?HEADER_SIZE :: non_neg_integer(),
+
+ %% We keep a cache of messages for faster reading
+ %% for the cases where consumers can keep up with
+ %% producers. Messages are written to the case as
+ %% long as there is space available. Messages are
+ %% not removed from the cache until the message
+ %% is either acked or removed by the queue. This
+ %% means that only a subset of messages may make
+ %% it onto the store. We do not prune messages as
+ %% that could lead to caching messages and pruning
+ %% them before they can be read from the cache.
+ %%
+ %% The cache size is the size of the messages,
+ %% it does not include the metadata. The real
+ %% cache size will therefore potentially be larger
+ %% than the configured maximum size.
+ cache = #{} :: #{ rabbit_variable_queue:seq_id() => {non_neg_integer(), #basic_message{}}},
+ cache_size = 0 :: non_neg_integer(),
+
+ %% Similarly, we keep track of a single read fd.
+ %% We cannot share this fd with the write fd because
+ %% we are using file:pread/3 which leaves the file
+ %% position undetermined.
+ read_segment = undefined :: undefined | non_neg_integer(),
+ read_fd = undefined :: undefined | file:fd(),
+
+ %% Messages waiting for publisher confirms. The
+ %% publisher confirms will be sent at regular
+ %% intervals after the index has been flushed
+ %% to disk.
+ confirms = gb_sets:new() :: gb_sets:set(),
+ on_sync :: on_sync_fun()
+}).
+
+-type state() :: #qs{}.
+
+-type msg_location() :: {?MODULE, non_neg_integer(), non_neg_integer()}.
+-export_type([msg_location/0]).
+
+-type on_sync_fun() :: fun ((gb_sets:set(), 'written' | 'ignored') -> any()).
+
+-spec init(rabbit_amqqueue:name(), on_sync_fun()) -> state().
+
+init(#resource{ virtual_host = VHost } = Name, OnSyncFun) ->
+ ?DEBUG("~0p ~0p", [Name, OnSyncFun]),
+ VHostDir = rabbit_vhost:msg_store_dir_path(VHost),
+ Dir = rabbit_classic_queue_index_v2:queue_dir(VHostDir, Name),
+ #qs{
+ dir = Dir,
+ on_sync = OnSyncFun
+ }.
+
+-spec terminate(State) -> State when State::state().
+
+terminate(State = #qs{ write_fd = WriteFd,
+ read_fd = ReadFd }) ->
+ ?DEBUG("~0p", [State]),
+ %% Fsync and close all FDs as needed.
+ maybe_sync_close_fd(WriteFd),
+ maybe_close_fd(ReadFd),
+ State#qs{ write_segment = undefined,
+ write_fd = undefined,
+ write_offset = ?HEADER_SIZE,
+ read_segment = undefined,
+ read_fd = undefined }.
+
+maybe_sync_close_fd(undefined) ->
+ ok;
+maybe_sync_close_fd(Fd) ->
+ ok = file:sync(Fd),
+ ok = file:close(Fd).
+
+maybe_close_fd(undefined) ->
+ ok;
+maybe_close_fd(Fd) ->
+ ok = file:close(Fd).
+
+-spec write(rabbit_variable_queue:seq_id(), rabbit_types:basic_message(),
+ rabbit_types:message_properties(), State)
+ -> {msg_location(), State} when State::state().
+
+write(SeqId, Msg=#basic_message{ id = MsgId }, Props, State0) ->
+ ?DEBUG("~0p ~0p ~0p ~0p", [SeqId, Msg, Props, State0]),
+ SegmentEntryCount = segment_entry_count(),
+ Segment = SeqId div SegmentEntryCount,
+ %% We simply append to the related segment file.
+ %% We will then return the offset and size. That
+ %% combined with the SeqId is enough to find the
+ %% message again.
+ {Fd, Offset, State1} = get_write_fd(Segment, State0),
+ %% @todo We could remove MsgId because we are not going to use it
+ %% after reading it back from disk. But we have to support
+ %% going back to v1 for the time being. When rolling back
+ %% to v1 is no longer possible, set `id = undefined` here.
+ MsgIovec = term_to_iovec(Msg),
+ Size = iolist_size(MsgIovec),
+ %% Calculate the CRC for the data if configured to do so.
+ %% We will truncate the CRC to 16 bits to save on space. (Idea taken from postgres.)
+ {UseCRC32, CRC32} = case check_crc32() of
+ true -> {1, erlang:crc32(MsgIovec)};
+ false -> {0, 0}
+ end,
+ %% Append to the buffer. A short entry header is prepended:
+ %% Size:32, Flags:8, CRC32:16, Unused:8.
+ ok = file:write(Fd, [<<Size:32/unsigned, 0:7, UseCRC32:1, CRC32:16, 0:8>>, MsgIovec]),
+ %% Maybe cache the message.
+ State2 = maybe_cache(SeqId, Size, Msg, State1),
+ %% When publisher confirms have been requested for this
+ %% message we mark the message as unconfirmed.
+ State = maybe_mark_unconfirmed(MsgId, Props, State2),
+ %% Keep track of the offset we are at.
+ {{?MODULE, Offset, Size}, State#qs{ write_offset = Offset + Size + ?ENTRY_HEADER_SIZE }}.
+
+get_write_fd(Segment, State = #qs{ write_fd = Fd,
+ write_segment = Segment,
+ write_offset = Offset }) ->
+ {Fd, Offset, State};
+get_write_fd(Segment, State = #qs{ write_fd = OldFd }) ->
+ maybe_close_fd(OldFd),
+ {ok, Fd} = file:open(segment_file(Segment, State), [read, append, raw, binary, {delayed_write, 512000, 10000}]),
+ {ok, Offset0} = file:position(Fd, eof),
+ %% If we are at offset 0, write the file header.
+ Offset = case Offset0 of
+ 0 ->
+ SegmentEntryCount = segment_entry_count(),
+ FromSeqId = Segment * SegmentEntryCount,
+ ToSeqId = FromSeqId + SegmentEntryCount,
+ ok = file:write(Fd, << ?MAGIC:32,
+ ?VERSION:8,
+ FromSeqId:64/unsigned,
+ ToSeqId:64/unsigned,
+ 0:344 >>),
+ ?HEADER_SIZE;
+ _ ->
+ Offset0
+ end,
+ {Fd, Offset, State#qs{ write_segment = Segment,
+ write_fd = Fd }}.
+
+maybe_cache(SeqId, MsgSize, Msg, State = #qs{ cache = Cache,
+ cache_size = CacheSize }) ->
+ MaxCacheSize = max_cache_size(),
+ if
+ CacheSize + MsgSize > MaxCacheSize ->
+ State;
+ true ->
+ State#qs{ cache = Cache#{ SeqId => {MsgSize, Msg} },
+ cache_size = CacheSize + MsgSize }
+ end.
+
+maybe_mark_unconfirmed(MsgId, #message_properties{ needs_confirming = true },
+ State = #qs { confirms = Confirms }) ->
+ State#qs{ confirms = gb_sets:add_element(MsgId, Confirms) };
+maybe_mark_unconfirmed(_, _, State) ->
+ State.
+
+-spec sync(State) -> State when State::state().
+
+sync(State = #qs{ confirms = Confirms,
+ on_sync = OnSyncFun }) ->
+ ?DEBUG("~0p", [State]),
+ flush_write_fd(State),
+ case gb_sets:is_empty(Confirms) of
+ true ->
+ State;
+ false ->
+ OnSyncFun(Confirms, written),
+ State#qs{ confirms = gb_sets:new() }
+ end.
+
+-spec read(rabbit_variable_queue:seq_id(), msg_location(), State)
+ -> {rabbit_types:basic_message(), State} when State::state().
+
+read(SeqId, DiskLocation, State = #qs{ cache = Cache }) ->
+ ?DEBUG("~0p ~0p ~0p", [SeqId, DiskLocation, State]),
+ case Cache of
+ #{ SeqId := {_, Msg} } ->
+ {Msg, State};
+ _ ->
+ read_from_disk(SeqId, DiskLocation, State)
+ end.
+
+read_from_disk(SeqId, {?MODULE, Offset, Size}, State0) ->
+ SegmentEntryCount = segment_entry_count(),
+ Segment = SeqId div SegmentEntryCount,
+ {ok, Fd, State} = get_read_fd(Segment, State0),
+ {ok, MsgBin0} = file:pread(Fd, Offset, ?ENTRY_HEADER_SIZE + Size),
+ %% Assert the size to make sure we read the correct data.
+ %% Check the CRC if configured to do so.
+ <<Size:32/unsigned, _:7, UseCRC32:1, CRC32Expected:16/bits, _:8, MsgBin:Size/binary>> = MsgBin0,
+ case UseCRC32 of
+ 0 ->
+ ok;
+ 1 ->
+ %% We only want to check the CRC32 if configured to do so.
+ case check_crc32() of
+ false ->
+ ok;
+ true ->
+ CRC32 = erlang:crc32(MsgBin),
+ %% We currently crash if the CRC32 is incorrect as we cannot recover automatically.
+ try
+ CRC32Expected = <<CRC32:16>>,
+ ok
+ catch C:E:S ->
+ rabbit_log:error("Per-queue store CRC32 check failed in ~s seq id ~b offset ~b size ~b",
+ [segment_file(Segment, State), SeqId, Offset, Size]),
+ erlang:raise(C, E, S)
+ end
+ end
+ end,
+ Msg = binary_to_term(MsgBin),
+ {Msg, State}.
+
+get_read_fd(Segment, State = #qs{ read_segment = Segment,
+ read_fd = Fd }) ->
+ maybe_flush_write_fd(Segment, State),
+ {ok, Fd, State};
+get_read_fd(Segment, State = #qs{ read_fd = OldFd }) ->
+ maybe_close_fd(OldFd),
+ maybe_flush_write_fd(Segment, State),
+ case file:open(segment_file(Segment, State), [read, raw, binary]) of
+ {ok, Fd} ->
+ case file:read(Fd, ?HEADER_SIZE) of
+ {ok, <<?MAGIC:32,?VERSION:8,
+ _FromSeqId:64/unsigned,_ToSeqId:64/unsigned,
+ _/bits>>} ->
+ {ok, Fd, State#qs{ read_segment = Segment,
+ read_fd = Fd }};
+ eof ->
+ %% Something is wrong with the file. Close it
+ %% and let the caller decide what to do with it.
+ file:close(Fd),
+ {{error, bad_header}, State#qs{ read_segment = undefined,
+ read_fd = undefined }}
+ end;
+ {error, enoent} ->
+ {{error, no_file}, State}
+ end.
+
+maybe_flush_write_fd(Segment, State = #qs{ write_segment = Segment }) ->
+ flush_write_fd(State);
+maybe_flush_write_fd(_, _) ->
+ ok.
+
+flush_write_fd(#qs{ write_fd = undefined }) ->
+ ok;
+flush_write_fd(#qs{ write_fd = Fd }) ->
+ %% We tell the pid handling delayed writes to flush to disk
+ %% without issuing a separate command to the fd. We need
+ %% to do this in order to read from a separate fd that
+ %% points to the same file.
+ #file_descriptor{
+ module = raw_file_io_delayed, %% assert
+ data = #{ pid := Pid }
+ } = Fd,
+ gen_statem:call(Pid, '$synchronous_flush').
+
+-spec check_msg_on_disk(rabbit_variable_queue:seq_id(), msg_location(), State)
+ -> {ok | {error, any()}, State} when State::state().
+
+check_msg_on_disk(SeqId, {?MODULE, Offset, Size}, State0) ->
+ SegmentEntryCount = segment_entry_count(),
+ Segment = SeqId div SegmentEntryCount,
+ case get_read_fd(Segment, State0) of
+ {ok, Fd, State} ->
+ case file:pread(Fd, Offset, ?ENTRY_HEADER_SIZE + Size) of
+ {ok, MsgBin0} ->
+ %% Assert the size to make sure we read the correct data.
+ %% Check the CRC if configured to do so.
+ case MsgBin0 of
+ <<Size:32/unsigned, _:7, UseCRC32:1, CRC32Expected:16/bits, _:8, MsgBin:Size/binary>> ->
+ case UseCRC32 of
+ 0 ->
+ {ok, State};
+ 1 ->
+ %% We only want to check the CRC32 if configured to do so.
+ case check_crc32() of
+ false ->
+ {ok, State};
+ true ->
+ CRC32 = erlang:crc32(MsgBin),
+ case <<CRC32:16>> of
+ CRC32Expected -> {ok, State};
+ _ -> {{error, bad_crc}, State}
+ end
+ end
+ end;
+ _ ->
+ {{error, bad_size}, State}
+ end;
+ eof ->
+ {{error, eof}, State};
+ Error ->
+ {Error, State}
+ end;
+ {Error, State} ->
+ {Error, State}
+ end.
+
+-spec remove(rabbit_variable_queue:seq_id(), State) -> State when State::state().
+
+%% We only remove the message from the cache. We will remove
+%% the message from the disk when we delete the segment file.
+remove(SeqId, State = #qs{ cache = Cache0,
+ cache_size = CacheSize }) ->
+ ?DEBUG("~0p ~0p", [SeqId, State]),
+ case maps:take(SeqId, Cache0) of
+ error ->
+ State;
+ {{MsgSize, _}, Cache} ->
+ State#qs{ cache = Cache,
+ cache_size = CacheSize - MsgSize }
+ end.
+
+-spec delete_segments([non_neg_integer()], State) -> State when State::state().
+
+%% First we check if the write fd points to a segment
+%% that must be deleted, and we close it if that's the case.
+delete_segments([], State) ->
+ ?DEBUG("[] ~0p", [State]),
+ State;
+delete_segments(Segments, State0 = #qs{ write_segment = WriteSegment,
+ write_fd = WriteFd,
+ read_segment = ReadSegment,
+ read_fd = ReadFd,
+ cache = Cache0,
+ cache_size = CacheSize0 }) ->
+ ?DEBUG("~0p ~0p", [Segments, State0]),
+ %% First we have to close fds for the segments, if any.
+ %% 'undefined' is never in Segments so we don't
+ %% need to special case it.
+ CloseWrite = lists:member(WriteSegment, Segments),
+ CloseRead = lists:member(ReadSegment, Segments),
+ State = if
+ CloseWrite andalso CloseRead ->
+ ok = file:close(WriteFd),
+ ok = file:close(ReadFd),
+ State0#qs{ write_segment = undefined,
+ write_fd = undefined,
+ write_offset = ?HEADER_SIZE,
+ read_segment = undefined,
+ read_fd = undefined };
+ CloseWrite ->
+ ok = file:close(WriteFd),
+ State0#qs{ write_segment = undefined,
+ write_fd = undefined,
+ write_offset = ?HEADER_SIZE };
+ CloseRead ->
+ ok = file:close(ReadFd),
+ State0#qs{ read_segment = undefined,
+ read_fd = undefined };
+ true ->
+ State0
+ end,
+ %% Then we delete the files.
+ _ = [
+ case file:delete(segment_file(Segment, State)) of
+ ok -> ok;
+ %% The file might not have been created. This is the case
+ %% if all messages were sent to the per-vhost store for example.
+ {error, enoent} -> ok
+ end
+ || Segment <- Segments],
+ %% Finally, we remove any entries from the cache that fall within
+ %% the segments that were deleted. For simplicity's sake, we take
+ %% the highest SeqId from these files and remove any SeqId lower
+ %% than or equal to this SeqId from the cache.
+ HighestSegment = lists:foldl(fun
+ (S, SAcc) when S > SAcc -> S;
+ (_, SAcc) -> SAcc
+ end, -1, Segments),
+ HighestSeqId = (1 + HighestSegment) * segment_entry_count(),
+ {Cache, CacheSize} = maps:fold(fun
+ (SeqId, {MsgSize, _}, {CacheAcc, CacheSize1}) when SeqId =< HighestSeqId ->
+ {CacheAcc, CacheSize1 - MsgSize};
+ (SeqId, Value, {CacheAcc, CacheSize1}) ->
+ {CacheAcc#{SeqId => Value}, CacheSize1}
+ end, {#{}, CacheSize0}, Cache0),
+ State#qs{ cache = Cache,
+ cache_size = CacheSize }.
+
+%% ----
+%%
+%% Internal.
+
+segment_entry_count() ->
+ %% We use the same value as the index.
+ application:get_env(rabbit, classic_queue_index_v2_segment_entry_count, 4096).
+
+max_cache_size() ->
+ application:get_env(rabbit, classic_queue_store_v2_max_cache_size, 512000).
+
+check_crc32() ->
+ application:get_env(rabbit, classic_queue_store_v2_check_crc32, true).
+
+%% Same implementation as rabbit_classic_queue_index_v2:segment_file/2,
+%% but with a different state record.
+segment_file(Segment, #qs{ dir = Dir }) ->
+ filename:join(Dir, integer_to_list(Segment) ++ ?SEGMENT_EXTENSION).
diff --git a/deps/rabbit/src/rabbit_client_sup.erl b/deps/rabbit/src/rabbit_client_sup.erl
index dc80025796..47ff1c1445 100644
--- a/deps/rabbit/src/rabbit_client_sup.erl
+++ b/deps/rabbit/src/rabbit_client_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_client_sup).
diff --git a/deps/rabbit/src/rabbit_connection_helper_sup.erl b/deps/rabbit/src/rabbit_connection_helper_sup.erl
index 406e8c95fb..5cf0cc210f 100644
--- a/deps/rabbit/src/rabbit_connection_helper_sup.erl
+++ b/deps/rabbit/src/rabbit_connection_helper_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_connection_helper_sup).
diff --git a/deps/rabbit/src/rabbit_connection_sup.erl b/deps/rabbit/src/rabbit_connection_sup.erl
index 173015d7c4..83da3e72e1 100644
--- a/deps/rabbit/src/rabbit_connection_sup.erl
+++ b/deps/rabbit/src/rabbit_connection_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_connection_sup).
diff --git a/deps/rabbit/src/rabbit_connection_tracking.erl b/deps/rabbit/src/rabbit_connection_tracking.erl
index 2ec96e621f..51944ba73a 100644
--- a/deps/rabbit/src/rabbit_connection_tracking.erl
+++ b/deps/rabbit/src/rabbit_connection_tracking.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_connection_tracking).
diff --git a/deps/rabbit/src/rabbit_connection_tracking_handler.erl b/deps/rabbit/src/rabbit_connection_tracking_handler.erl
index f9df05431d..3b60a6a038 100644
--- a/deps/rabbit/src/rabbit_connection_tracking_handler.erl
+++ b/deps/rabbit/src/rabbit_connection_tracking_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_connection_tracking_handler).
diff --git a/deps/rabbit/src/rabbit_control_pbe.erl b/deps/rabbit/src/rabbit_control_pbe.erl
index 4086dbdc33..6a65641237 100644
--- a/deps/rabbit/src/rabbit_control_pbe.erl
+++ b/deps/rabbit/src/rabbit_control_pbe.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_control_pbe).
diff --git a/deps/rabbit/src/rabbit_core_ff.erl b/deps/rabbit/src/rabbit_core_ff.erl
index 7719d3d48d..a9e57f5318 100644
--- a/deps/rabbit/src/rabbit_core_ff.erl
+++ b/deps/rabbit/src/rabbit_core_ff.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_core_ff).
diff --git a/deps/rabbit/src/rabbit_core_metrics_gc.erl b/deps/rabbit/src/rabbit_core_metrics_gc.erl
index 156517c97e..8a8023c390 100644
--- a/deps/rabbit/src/rabbit_core_metrics_gc.erl
+++ b/deps/rabbit/src/rabbit_core_metrics_gc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_core_metrics_gc).
diff --git a/deps/rabbit/src/rabbit_credential_validation.erl b/deps/rabbit/src/rabbit_credential_validation.erl
index 0075f5a58a..2cb56635e7 100644
--- a/deps/rabbit/src/rabbit_credential_validation.erl
+++ b/deps/rabbit/src/rabbit_credential_validation.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_credential_validation).
diff --git a/deps/rabbit/src/rabbit_credential_validator.erl b/deps/rabbit/src/rabbit_credential_validator.erl
index 50ab695501..7e0e81c159 100644
--- a/deps/rabbit/src/rabbit_credential_validator.erl
+++ b/deps/rabbit/src/rabbit_credential_validator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_credential_validator).
diff --git a/deps/rabbit/src/rabbit_credential_validator_accept_everything.erl b/deps/rabbit/src/rabbit_credential_validator_accept_everything.erl
index 413b1548bf..c3311d9c68 100644
--- a/deps/rabbit/src/rabbit_credential_validator_accept_everything.erl
+++ b/deps/rabbit/src/rabbit_credential_validator_accept_everything.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_credential_validator_accept_everything).
diff --git a/deps/rabbit/src/rabbit_credential_validator_min_password_length.erl b/deps/rabbit/src/rabbit_credential_validator_min_password_length.erl
index 1b4e6f7ac3..c87a91e28c 100644
--- a/deps/rabbit/src/rabbit_credential_validator_min_password_length.erl
+++ b/deps/rabbit/src/rabbit_credential_validator_min_password_length.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_credential_validator_min_password_length).
diff --git a/deps/rabbit/src/rabbit_credential_validator_password_regexp.erl b/deps/rabbit/src/rabbit_credential_validator_password_regexp.erl
index f37ef1d1a8..64a0217ba2 100644
--- a/deps/rabbit/src/rabbit_credential_validator_password_regexp.erl
+++ b/deps/rabbit/src/rabbit_credential_validator_password_regexp.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
diff --git a/deps/rabbit/src/rabbit_dead_letter.erl b/deps/rabbit/src/rabbit_dead_letter.erl
index f13b409dce..cc46473262 100644
--- a/deps/rabbit/src/rabbit_dead_letter.erl
+++ b/deps/rabbit/src/rabbit_dead_letter.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_dead_letter).
diff --git a/deps/rabbit/src/rabbit_diagnostics.erl b/deps/rabbit/src/rabbit_diagnostics.erl
index 1f4a7bdbe0..aec88e806c 100644
--- a/deps/rabbit/src/rabbit_diagnostics.erl
+++ b/deps/rabbit/src/rabbit_diagnostics.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_diagnostics).
diff --git a/deps/rabbit/src/rabbit_direct.erl b/deps/rabbit/src/rabbit_direct.erl
index e2d057802b..f05daac462 100644
--- a/deps/rabbit/src/rabbit_direct.erl
+++ b/deps/rabbit/src/rabbit_direct.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_direct).
diff --git a/deps/rabbit/src/rabbit_direct_reply_to.erl b/deps/rabbit/src/rabbit_direct_reply_to.erl
index 50e2ee6e81..4be7aeac71 100644
--- a/deps/rabbit/src/rabbit_direct_reply_to.erl
+++ b/deps/rabbit/src/rabbit_direct_reply_to.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_direct_reply_to).
diff --git a/deps/rabbit/src/rabbit_disk_monitor.erl b/deps/rabbit/src/rabbit_disk_monitor.erl
index 93016b112e..f22d760c6a 100644
--- a/deps/rabbit/src/rabbit_disk_monitor.erl
+++ b/deps/rabbit/src/rabbit_disk_monitor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_disk_monitor).
diff --git a/deps/rabbit/src/rabbit_epmd_monitor.erl b/deps/rabbit/src/rabbit_epmd_monitor.erl
index fc2c91d860..b61774431f 100644
--- a/deps/rabbit/src/rabbit_epmd_monitor.erl
+++ b/deps/rabbit/src/rabbit_epmd_monitor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_epmd_monitor).
diff --git a/deps/rabbit/src/rabbit_event_consumer.erl b/deps/rabbit/src/rabbit_event_consumer.erl
index c9dfe89892..606cfa3a49 100644
--- a/deps/rabbit/src/rabbit_event_consumer.erl
+++ b/deps/rabbit/src/rabbit_event_consumer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_event_consumer).
diff --git a/deps/rabbit/src/rabbit_exchange.erl b/deps/rabbit/src/rabbit_exchange.erl
index 5406b541dc..85128a3907 100644
--- a/deps/rabbit/src/rabbit_exchange.erl
+++ b/deps/rabbit/src/rabbit_exchange.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange).
diff --git a/deps/rabbit/src/rabbit_exchange_decorator.erl b/deps/rabbit/src/rabbit_exchange_decorator.erl
index 79ffda7d9c..11e5e6aeeb 100644
--- a/deps/rabbit/src/rabbit_exchange_decorator.erl
+++ b/deps/rabbit/src/rabbit_exchange_decorator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_decorator).
diff --git a/deps/rabbit/src/rabbit_exchange_parameters.erl b/deps/rabbit/src/rabbit_exchange_parameters.erl
index 4cee3a49cd..30a1592cd7 100644
--- a/deps/rabbit/src/rabbit_exchange_parameters.erl
+++ b/deps/rabbit/src/rabbit_exchange_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_parameters).
diff --git a/deps/rabbit/src/rabbit_exchange_type_direct.erl b/deps/rabbit/src/rabbit_exchange_type_direct.erl
index a4177dd281..578ebe85d4 100644
--- a/deps/rabbit/src/rabbit_exchange_type_direct.erl
+++ b/deps/rabbit/src/rabbit_exchange_type_direct.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_direct).
diff --git a/deps/rabbit/src/rabbit_exchange_type_fanout.erl b/deps/rabbit/src/rabbit_exchange_type_fanout.erl
index e376ebb9e4..2e022136b0 100644
--- a/deps/rabbit/src/rabbit_exchange_type_fanout.erl
+++ b/deps/rabbit/src/rabbit_exchange_type_fanout.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_fanout).
diff --git a/deps/rabbit/src/rabbit_exchange_type_headers.erl b/deps/rabbit/src/rabbit_exchange_type_headers.erl
index 233dd50869..fb0e7e25e5 100644
--- a/deps/rabbit/src/rabbit_exchange_type_headers.erl
+++ b/deps/rabbit/src/rabbit_exchange_type_headers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_headers).
diff --git a/deps/rabbit/src/rabbit_exchange_type_invalid.erl b/deps/rabbit/src/rabbit_exchange_type_invalid.erl
index 1c4552c428..7330b53e77 100644
--- a/deps/rabbit/src/rabbit_exchange_type_invalid.erl
+++ b/deps/rabbit/src/rabbit_exchange_type_invalid.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_invalid).
diff --git a/deps/rabbit/src/rabbit_exchange_type_topic.erl b/deps/rabbit/src/rabbit_exchange_type_topic.erl
index 775500f133..e8affd846b 100644
--- a/deps/rabbit/src/rabbit_exchange_type_topic.erl
+++ b/deps/rabbit/src/rabbit_exchange_type_topic.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_topic).
diff --git a/deps/rabbit/src/rabbit_feature_flags.erl b/deps/rabbit/src/rabbit_feature_flags.erl
index 66e9dd49eb..fe0f6ac24f 100644
--- a/deps/rabbit/src/rabbit_feature_flags.erl
+++ b/deps/rabbit/src/rabbit_feature_flags.erl
@@ -2,11 +2,11 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @author The RabbitMQ team
-%% @copyright 2018-2021 VMware, Inc. or its affiliates.
+%% @copyright 2018-2022 VMware, Inc. or its affiliates.
%%
%% @doc
%% This module offers a framework to declare capabilities a RabbitMQ node
diff --git a/deps/rabbit/src/rabbit_ff_extra.erl b/deps/rabbit/src/rabbit_ff_extra.erl
index 99a8820bb7..cf6db74ceb 100644
--- a/deps/rabbit/src/rabbit_ff_extra.erl
+++ b/deps/rabbit/src/rabbit_ff_extra.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% @copyright 2018-2021 VMware, Inc. or its affiliates.
+%% @copyright 2018-2022 VMware, Inc. or its affiliates.
%%
%% @doc
%% This module provides extra functions unused by the feature flags
diff --git a/deps/rabbit/src/rabbit_ff_registry.erl b/deps/rabbit/src/rabbit_ff_registry.erl
index b5cec25501..dd33e6a23b 100644
--- a/deps/rabbit/src/rabbit_ff_registry.erl
+++ b/deps/rabbit/src/rabbit_ff_registry.erl
@@ -2,11 +2,11 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @author The RabbitMQ team
-%% @copyright 2018-2021 VMware, Inc. or its affiliates.
+%% @copyright 2018-2022 VMware, Inc. or its affiliates.
%%
%% @doc
%% This module exposes the API of the {@link rabbit_feature_flags}
diff --git a/deps/rabbit/src/rabbit_fhc_helpers.erl b/deps/rabbit/src/rabbit_fhc_helpers.erl
index 5ada16b55d..77342622d0 100644
--- a/deps/rabbit/src/rabbit_fhc_helpers.erl
+++ b/deps/rabbit/src/rabbit_fhc_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_fhc_helpers).
diff --git a/deps/rabbit/src/rabbit_fifo.erl b/deps/rabbit/src/rabbit_fifo.erl
index e7efb21f61..4a3a3d0e51 100644
--- a/deps/rabbit/src/rabbit_fifo.erl
+++ b/deps/rabbit/src/rabbit_fifo.erl
@@ -2,8 +2,14 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
+<<<<<<< HEAD
%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
%%
+=======
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+%% before post gc 1M msg: 203MB, after recovery + gc: 203MB
+>>>>>>> 515780f5d4 (Bump (c) year)
-module(rabbit_fifo).
diff --git a/deps/rabbit/src/rabbit_fifo.hrl b/deps/rabbit/src/rabbit_fifo.hrl
index a63483becd..6af989cf48 100644
--- a/deps/rabbit/src/rabbit_fifo.hrl
+++ b/deps/rabbit/src/rabbit_fifo.hrl
@@ -1,3 +1,26 @@
+<<<<<<< HEAD
+=======
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+%% macros for memory optimised tuple structures
+%% [A|B] saves 1 byte compared to {A,B}
+-define(TUPLE(A, B), [A | B]).
+
+%% We only hold Raft index and message header in memory.
+%% Raw message data is always stored on disk.
+-define(MSG(Index, Header), ?TUPLE(Index, Header)).
+
+-define(IS_HEADER(H),
+ (is_integer(H) andalso H >= 0) orelse
+ is_list(H) orelse
+ (is_map(H) andalso is_map_key(size, H))).
+
+-type tuple(A, B) :: nonempty_improper_list(A, B).
+>>>>>>> 515780f5d4 (Bump (c) year)
-type option(T) :: undefined | T.
diff --git a/deps/rabbit/src/rabbit_fifo_client.erl b/deps/rabbit/src/rabbit_fifo_client.erl
index 7f2cd55acc..7e7d686441 100644
--- a/deps/rabbit/src/rabbit_fifo_client.erl
+++ b/deps/rabbit/src/rabbit_fifo_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @doc Provides an easy to consume API for interacting with the {@link rabbit_fifo.}
diff --git a/deps/rabbit/src/rabbit_fifo_dlx.erl b/deps/rabbit/src/rabbit_fifo_dlx.erl
new file mode 100644
index 0000000000..711139a5c8
--- /dev/null
+++ b/deps/rabbit/src/rabbit_fifo_dlx.erl
@@ -0,0 +1,361 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+-module(rabbit_fifo_dlx).
+
+-include("rabbit_fifo_dlx.hrl").
+-include("rabbit_fifo.hrl").
+-compile({no_auto_import, [apply/3]}).
+
+-export([
+ %% rabbit_fifo_dlx_client
+ make_checkout/2,
+ make_settle/1,
+ %% rabbit_fifo delegating DLX handling to this module
+ init/0,
+ apply/4,
+ discard/4,
+ overview/1,
+ checkout/2,
+ state_enter/4,
+ handle_aux/6,
+ dehydrate/1,
+ normalize/1,
+ stat/1,
+ update_config/4,
+ smallest_raft_index/1
+ ]).
+
+-record(checkout, {consumer :: pid(),
+ prefetch :: non_neg_integer()}).
+-record(settle, {msg_ids :: [msg_id()]}).
+-type protocol() :: {dlx, #checkout{} | #settle{}}.
+-opaque state() :: #?MODULE{}.
+-export_type([state/0,
+ protocol/0]).
+
+-spec init() -> state().
+init() ->
+ #?MODULE{}.
+
+-spec make_checkout(pid(), non_neg_integer()) -> protocol().
+make_checkout(Pid, NumUnsettled) ->
+ {dlx, #checkout{consumer = Pid,
+ prefetch = NumUnsettled
+ }}.
+
+-spec make_settle([msg_id()]) -> protocol().
+make_settle(MessageIds) when is_list(MessageIds) ->
+ {dlx, #settle{msg_ids = MessageIds}}.
+
+-spec overview(state()) -> map().
+overview(#?MODULE{consumer = undefined,
+ msg_bytes = MsgBytes,
+ msg_bytes_checkout = 0,
+ discards = Discards}) ->
+ overview0(Discards, #{}, MsgBytes, 0);
+overview(#?MODULE{consumer = #dlx_consumer{checked_out = Checked},
+ msg_bytes = MsgBytes,
+ msg_bytes_checkout = MsgBytesCheckout,
+ discards = Discards}) ->
+ overview0(Discards, Checked, MsgBytes, MsgBytesCheckout).
+
+overview0(Discards, Checked, MsgBytes, MsgBytesCheckout) ->
+ #{num_discarded => lqueue:len(Discards),
+ num_discard_checked_out => maps:size(Checked),
+ discard_message_bytes => MsgBytes,
+ discard_checkout_message_bytes => MsgBytesCheckout}.
+
+-spec stat(state()) ->
+ {Num :: non_neg_integer(), Bytes :: non_neg_integer()}.
+stat(#?MODULE{consumer = Con,
+ discards = Discards,
+ msg_bytes = MsgBytes,
+ msg_bytes_checkout = MsgBytesCheckout}) ->
+ Num0 = lqueue:len(Discards),
+ Num = case Con of
+ undefined ->
+ Num0;
+ #dlx_consumer{checked_out = Checked} ->
+ %% O(1) because Erlang maps maintain their own size
+ Num0 + maps:size(Checked)
+ end,
+ Bytes = MsgBytes + MsgBytesCheckout,
+ {Num, Bytes}.
+
+-spec apply(ra_machine:command_meta_data(), protocol(), dead_letter_handler(), state()) ->
+ {state(), ra_machine:effects()}.
+apply(_Meta, {dlx, #settle{msg_ids = MsgIds}}, at_least_once,
+ #?MODULE{consumer = #dlx_consumer{checked_out = Checked0}} = State0) ->
+ Acked = maps:with(MsgIds, Checked0),
+ State = maps:fold(
+ fun(MsgId, ?TUPLE(_Rsn, ?MSG(Idx, _) = Msg),
+ #?MODULE{consumer = #dlx_consumer{checked_out = Checked} = C,
+ msg_bytes_checkout = BytesCheckout,
+ ra_indexes = Indexes0} = S) ->
+ Indexes = rabbit_fifo_index:delete(Idx, Indexes0),
+ S#?MODULE{consumer = C#dlx_consumer{checked_out =
+ maps:remove(MsgId, Checked)},
+ msg_bytes_checkout = BytesCheckout - size_in_bytes(Msg),
+ ra_indexes = Indexes}
+ end, State0, Acked),
+ {State, [{mod_call, rabbit_global_counters, messages_dead_lettered_confirmed,
+ [rabbit_quorum_queue, at_least_once, maps:size(Acked)]}]};
+apply(_, {dlx, #checkout{consumer = Pid,
+ prefetch = Prefetch}},
+ at_least_once,
+ #?MODULE{consumer = undefined} = State0) ->
+ State = State0#?MODULE{consumer = #dlx_consumer{pid = Pid,
+ prefetch = Prefetch}},
+ {State, []};
+apply(_, {dlx, #checkout{consumer = ConsumerPid,
+ prefetch = Prefetch}},
+ at_least_once,
+ #?MODULE{consumer = #dlx_consumer{checked_out = CheckedOutOldConsumer},
+ discards = Discards0,
+ msg_bytes = Bytes,
+ msg_bytes_checkout = BytesCheckout} = State0) ->
+ %% Since we allow only a single consumer, the new consumer replaces the old consumer.
+ %% All checked out messages to the old consumer need to be returned to the discards queue
+ %% such that these messages will be re-delivered to the new consumer.
+ %% When inserting back into the discards queue, we respect the original order in which messages
+ %% were discarded.
+ Checked0 = maps:to_list(CheckedOutOldConsumer),
+ Checked1 = lists:keysort(1, Checked0),
+ {Discards, BytesMoved} = lists:foldr(
+ fun({_Id, ?TUPLE(_, Msg) = RsnMsg}, {D, B}) ->
+ {lqueue:in_r(RsnMsg, D), B + size_in_bytes(Msg)}
+ end, {Discards0, 0}, Checked1),
+ State = State0#?MODULE{consumer = #dlx_consumer{pid = ConsumerPid,
+ prefetch = Prefetch},
+ discards = Discards,
+ msg_bytes = Bytes + BytesMoved,
+ msg_bytes_checkout = BytesCheckout - BytesMoved},
+ {State, []};
+apply(_, Cmd, DLH, State) ->
+ rabbit_log:debug("Ignoring command ~p for dead_letter_handler ~p", [Cmd, DLH]),
+ {State, []}.
+
+-spec discard([msg()], rabbit_dead_letter:reason(), dead_letter_handler(), state()) ->
+ {state(), ra_machine:effects()}.
+discard(Msgs, Reason, undefined, State) ->
+ {State, [{mod_call, rabbit_global_counters, messages_dead_lettered,
+ [Reason, rabbit_quorum_queue, disabled, length(Msgs)]}]};
+discard(Msgs0, Reason, {at_most_once, {Mod, Fun, Args}}, State) ->
+ Idxs = [I || ?MSG(I, _) <- Msgs0],
+ Effect = {log, Idxs,
+ fun (Log) ->
+ Lookup = maps:from_list(lists:zip(Idxs, Log)),
+ Msgs = [begin
+ {enqueue, _, _, Msg} = maps:get(Idx, Lookup),
+ Msg
+ end || ?MSG(Idx, _) <- Msgs0],
+ [{mod_call, Mod, Fun, Args ++ [Reason, Msgs]}]
+ end},
+ {State, [Effect]};
+discard(Msgs, Reason, at_least_once, State0)
+ when Reason =/= maxlen ->
+ State = lists:foldl(fun(?MSG(Idx, _) = Msg0,
+ #?MODULE{discards = D0,
+ msg_bytes = B0,
+ ra_indexes = I0} = S0) ->
+ MsgSize = size_in_bytes(Msg0),
+ %% Condense header to an integer representing the message size.
+ %% We need neither delivery_count nor expiry anymore.
+ Msg = ?MSG(Idx, MsgSize),
+ D = lqueue:in(?TUPLE(Reason, Msg), D0),
+ B = B0 + MsgSize,
+ I = rabbit_fifo_index:append(Idx, I0),
+ S0#?MODULE{discards = D,
+ msg_bytes = B,
+ ra_indexes = I}
+ end, State0, Msgs),
+ {State, [{mod_call, rabbit_global_counters, messages_dead_lettered,
+ [Reason, rabbit_quorum_queue, at_least_once, length(Msgs)]}]}.
+
+-spec checkout(dead_letter_handler(), state()) ->
+ {state(), ra_machine:effects()}.
+checkout(at_least_once, #?MODULE{consumer = #dlx_consumer{}} = State) ->
+ checkout0(checkout_one(State), []);
+checkout(_, State) ->
+ {State, []}.
+
+checkout0({success, MsgId, ?TUPLE(Reason, ?MSG(Idx, _)), State}, SendAcc) ->
+ DelMsg = {Idx, {Reason, MsgId}},
+ checkout0(checkout_one(State), [DelMsg | SendAcc]);
+checkout0(#?MODULE{consumer = #dlx_consumer{pid = Pid}} = State, SendAcc) ->
+ Effects = delivery_effects(Pid, SendAcc),
+ {State, Effects}.
+
+checkout_one(#?MODULE{consumer = #dlx_consumer{checked_out = Checked,
+ prefetch = Prefetch}} = State)
+ when map_size(Checked) >= Prefetch ->
+ State;
+checkout_one(#?MODULE{discards = Discards0,
+ msg_bytes = Bytes,
+ msg_bytes_checkout = BytesCheckout,
+ consumer = #dlx_consumer{checked_out = Checked0,
+ next_msg_id = Next} = Con0} = State0) ->
+ case lqueue:out(Discards0) of
+ {{value, ?TUPLE(_, Msg) = ReasonMsg}, Discards} ->
+ Checked = maps:put(Next, ReasonMsg, Checked0),
+ Size = size_in_bytes(Msg),
+ State = State0#?MODULE{discards = Discards,
+ msg_bytes = Bytes - Size,
+ msg_bytes_checkout = BytesCheckout + Size,
+ consumer = Con0#dlx_consumer{checked_out = Checked,
+ next_msg_id = Next + 1}},
+ {success, Next, ReasonMsg, State};
+ {empty, _} ->
+ State0
+ end.
+
+size_in_bytes(MSG) ->
+ Header = rabbit_fifo:get_msg_header(MSG),
+ rabbit_fifo:get_header(size, Header).
+
+delivery_effects(_CPid, []) ->
+ [];
+delivery_effects(CPid, Msgs0) ->
+ Msgs1 = lists:reverse(Msgs0),
+ {RaftIdxs, RsnIds} = lists:unzip(Msgs1),
+ [{log, RaftIdxs,
+ fun(Log) ->
+ Msgs = lists:zipwith(fun ({enqueue, _, _, Msg}, {Reason, MsgId}) ->
+ {MsgId, {Reason, Msg}}
+ end, Log, RsnIds),
+ [{send_msg, CPid, {dlx_delivery, Msgs}, [ra_event]}]
+ end}].
+
+-spec state_enter(ra_server:ra_state() | eol, rabbit_types:r('queue'), dead_letter_handler(), state()) ->
+ ra_machine:effects().
+state_enter(leader, QRes, at_least_once, State) ->
+ ensure_worker_started(QRes, State),
+ [];
+state_enter(_, _, at_least_once, State) ->
+ ensure_worker_terminated(State),
+ [];
+state_enter(_, _, _, _) ->
+ [].
+
+ensure_worker_started(QRef, #?MODULE{consumer = undefined}) ->
+ start_worker(QRef);
+ensure_worker_started(QRef, #?MODULE{consumer = #dlx_consumer{pid = Pid}}) ->
+ case is_local_and_alive(Pid) of
+ true ->
+ rabbit_log:debug("rabbit_fifo_dlx_worker ~p already started for ~s",
+ [Pid, rabbit_misc:rs(QRef)]);
+ false ->
+ start_worker(QRef)
+ end.
+
+%% Ensure that starting the rabbit_fifo_dlx_worker succeeds.
+%% Therefore, do not use an effect.
+%% Also therefore, if starting the rabbit_fifo_dlx_worker fails, let the
+%% Ra server process crash in which case another Ra node will become leader.
+start_worker(QRef) ->
+ {ok, Pid} = supervisor:start_child(rabbit_fifo_dlx_sup, [QRef]),
+ rabbit_log:debug("started rabbit_fifo_dlx_worker ~p for ~s",
+ [Pid, rabbit_misc:rs(QRef)]).
+
+ensure_worker_terminated(#?MODULE{consumer = undefined}) ->
+ ok;
+ensure_worker_terminated(#?MODULE{consumer = #dlx_consumer{pid = Pid}}) ->
+ case is_local_and_alive(Pid) of
+ true ->
+ %% Note that we can't return a mod_call effect here
+ %% because mod_call is executed on the leader only.
+ ok = supervisor:terminate_child(rabbit_fifo_dlx_sup, Pid),
+ rabbit_log:debug("terminated rabbit_fifo_dlx_worker ~p", [Pid]);
+ false ->
+ ok
+ end.
+
+local_alive_consumer_pid(#?MODULE{consumer = undefined}) ->
+ undefined;
+local_alive_consumer_pid(#?MODULE{consumer = #dlx_consumer{pid = Pid}}) ->
+ case is_local_and_alive(Pid) of
+ true ->
+ Pid;
+ false ->
+ undefined
+ end.
+
+is_local_and_alive(Pid)
+ when node(Pid) =:= node() ->
+ is_process_alive(Pid);
+is_local_and_alive(_) ->
+ false.
+
+-spec update_config(Old :: dead_letter_handler(), New :: dead_letter_handler(),
+ rabbit_types:r('queue'), state()) ->
+ {state(), ra_machine:effects()}.
+update_config(at_least_once, at_least_once, _, State) ->
+ case local_alive_consumer_pid(State) of
+ undefined ->
+ {State, []};
+ Pid ->
+ %% Notify rabbit_fifo_dlx_worker about potentially updated policies.
+ {State, [{send_msg, Pid, lookup_topology, ra_event}]}
+ end;
+update_config(SameDLH, SameDLH, _, State) ->
+ {State, []};
+update_config(OldDLH, NewDLH, QRes, State0) ->
+ LogOnLeader = {mod_call, rabbit_log, debug,
+ ["Switching dead_letter_handler from ~p to ~p for ~s",
+ [OldDLH, NewDLH, rabbit_misc:rs(QRes)]]},
+ {State1, Effects0} = switch_from(OldDLH, QRes, State0),
+ {State, Effects} = switch_to(NewDLH, State1, Effects0),
+ {State, [LogOnLeader|Effects]}.
+
+-spec switch_from(Old :: dead_letter_handler(), rabbit_types:r('queue'), state()) ->
+ {state(), ra_machine:effects()}.
+switch_from(at_least_once, QRes, State) ->
+ %% Switch from at-least-once to some other strategy.
+ ensure_worker_terminated(State),
+ {Num, Bytes} = stat(State),
+ %% Log only on leader.
+ {init(), [{mod_call, rabbit_log, info,
+ ["Deleted ~b dead-lettered messages (with total messages size of ~b bytes) in ~s",
+ [Num, Bytes, rabbit_misc:rs(QRes)]]}]};
+switch_from(_, _, State) ->
+ {State, []}.
+
+-spec switch_to(New :: dead_letter_handler(), state(), ra_machine:effects()) ->
+ {state(), ra_machine:effects()}.
+switch_to(at_least_once, _, Effects) ->
+ %% Switch from some other strategy to at-least-once.
+ %% Dlx worker needs to be started on the leader.
+ %% The cleanest way to determine the Ra state of this node is delegation to handle_aux.
+ {init(), [{aux, {dlx, setup}} | Effects]};
+switch_to(_, State, Effects) ->
+ {State, Effects}.
+
+-spec handle_aux(ra_server:ra_state(), Cmd :: term(), Aux :: term(),
+ rabbit_types:r('queue'), dead_letter_handler(), state()) ->
+ term().
+handle_aux(leader, {dlx, setup}, Aux, QRes, at_least_once, State) ->
+ ensure_worker_started(QRes, State),
+ Aux;
+handle_aux(_, _, Aux, _, _, _) ->
+ Aux.
+
+-spec dehydrate(state()) ->
+ state().
+dehydrate(State) ->
+ State#?MODULE{ra_indexes = rabbit_fifo_index:empty()}.
+
+-spec normalize(state()) ->
+ state().
+normalize(#?MODULE{discards = Discards,
+ ra_indexes = Indexes} = State) ->
+ State#?MODULE{discards = lqueue:from_list(lqueue:to_list(Discards)),
+ ra_indexes = rabbit_fifo_index:normalize(Indexes)}.
+
+-spec smallest_raft_index(state()) ->
+ option(non_neg_integer()).
+smallest_raft_index(#?MODULE{ra_indexes = Indexes}) ->
+ rabbit_fifo_index:smallest(Indexes).
diff --git a/deps/rabbit/src/rabbit_fifo_dlx.hrl b/deps/rabbit/src/rabbit_fifo_dlx.hrl
new file mode 100644
index 0000000000..43d8d360df
--- /dev/null
+++ b/deps/rabbit/src/rabbit_fifo_dlx.hrl
@@ -0,0 +1,21 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+-record(dlx_consumer,
+ {pid :: pid(),
+ prefetch :: non_neg_integer(),
+ checked_out = #{} :: #{msg_id() => tuple(rabbit_dead_letter:reason(), msg())},
+ next_msg_id = 0 :: msg_id()}).
+
+-record(rabbit_fifo_dlx,
+ {consumer :: option(#dlx_consumer{}),
+ %% Queue of dead-lettered messages.
+ discards = lqueue:new() :: lqueue:lqueue(tuple(rabbit_dead_letter:reason(), msg())),
+ %% Raft indexes of messages in both discards queue and dlx_consumer's checked_out map
+ %% so that we get the smallest ra index in O(1).
+ ra_indexes = rabbit_fifo_index:empty() :: rabbit_fifo_index:state(),
+ msg_bytes = 0 :: non_neg_integer(),
+ msg_bytes_checkout = 0 :: non_neg_integer()}).
diff --git a/deps/rabbit/src/rabbit_fifo_dlx_client.erl b/deps/rabbit/src/rabbit_fifo_dlx_client.erl
new file mode 100644
index 0000000000..32ea672158
--- /dev/null
+++ b/deps/rabbit/src/rabbit_fifo_dlx_client.erl
@@ -0,0 +1,91 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+-module(rabbit_fifo_dlx_client).
+
+-export([checkout/3, settle/2, handle_ra_event/3,
+ overview/1]).
+
+-record(state,{
+ queue_resource :: rabbit_types:r(queue),
+ leader :: ra:server_id(),
+ last_msg_id :: non_neg_integer() | -1
+ }).
+-type state() :: #state{}.
+-type action() :: {deliver, [{rabbit_amqqueue:name(),
+ MsgId :: non_neg_integer(),
+ rabbit_types:message(),
+ rabbit_dead_letter:reason()}]}.
+-type actions() :: [action()].
+-export_type([state/0,
+ actions/0]).
+
+-spec settle([non_neg_integer()], state()) ->
+ {ok, state()}.
+settle(MsgIds, #state{leader = Leader} = State)
+ when is_list(MsgIds) ->
+ Cmd = rabbit_fifo_dlx:make_settle(MsgIds),
+ ra:pipeline_command(Leader, Cmd),
+ {ok, State}.
+
+-spec checkout(rabbit_amqqueue:name(), ra:server_id(), non_neg_integer()) ->
+ {ok, state()} | {error, ra_command_failed}.
+checkout(QResource, Leader, NumUnsettled) ->
+ Cmd = rabbit_fifo_dlx:make_checkout(self(), NumUnsettled),
+ State = #state{queue_resource = QResource,
+ leader = Leader,
+ last_msg_id = -1},
+ process_command(Cmd, State, 5).
+
+process_command(_Cmd, _State, 0) ->
+ {error, ra_command_failed};
+process_command(Cmd, #state{leader = Leader} = State, Tries) ->
+ case ra:process_command(Leader, Cmd, 60_000) of
+ {ok, ok, Leader} ->
+ {ok, State#state{leader = Leader}};
+ {ok, ok, L} ->
+ rabbit_log:warning("Failed to process command ~p on quorum queue leader ~p because actual leader is ~p.",
+ [Cmd, Leader, L]),
+ {error, ra_command_failed};
+ Err ->
+ rabbit_log:warning("Failed to process command ~p on quorum queue leader ~p: ~p~n"
+ "Trying ~b more time(s)...",
+ [Cmd, Leader, Err, Tries]),
+ process_command(Cmd, State, Tries - 1)
+ end.
+
+-spec handle_ra_event(ra:server_id(), term(), state()) ->
+ {ok, state(), actions()}.
+handle_ra_event(Leader, {machine, {dlx_delivery, _} = Del}, #state{leader = Leader} = State) ->
+ handle_delivery(Del, State);
+handle_ra_event(From, Evt, State) ->
+ rabbit_log:debug("Ignoring ra event ~p from ~p", [Evt, From]),
+ {ok, State, []}.
+
+handle_delivery({dlx_delivery, [{FstId, _} | _] = IdMsgs},
+ #state{queue_resource = QRes,
+ last_msg_id = Prev} = State0) ->
+ %% Assert that messages get delivered in order since deliveries are node local.
+ %% (In contrast to rabbit_fifo_client, we expect neither duplicate nor missing messages.)
+ %% Let it crash if this assertion is wrong.
+ FstId = Prev + 1,
+ %% Format as a deliver action.
+ Del = {deliver, transform_msgs(QRes, IdMsgs)},
+ {LastId, _} = lists:last(IdMsgs),
+ State = State0#state{last_msg_id = LastId},
+ {ok, State, [Del]}.
+
+transform_msgs(QRes, Msgs) ->
+ lists:map(
+ fun({MsgId, {Reason, Msg}}) ->
+ {QRes, MsgId, Msg, Reason}
+ end, Msgs).
+
+-spec overview(state()) -> map().
+overview(#state{leader = Leader,
+ last_msg_id = LastMsgId}) ->
+ #{leader => Leader,
+ last_msg_id => LastMsgId}.
diff --git a/deps/rabbit/src/rabbit_fifo_dlx_sup.erl b/deps/rabbit/src/rabbit_fifo_dlx_sup.erl
new file mode 100644
index 0000000000..7df83b7098
--- /dev/null
+++ b/deps/rabbit/src/rabbit_fifo_dlx_sup.erl
@@ -0,0 +1,34 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+-module(rabbit_fifo_dlx_sup).
+
+-behaviour(supervisor).
+
+-rabbit_boot_step({?MODULE,
+ [{description, "supervisor of quorum queue dead-letter workers"},
+ {mfa, {rabbit_sup, start_supervisor_child, [?MODULE]}},
+ {requires, kernel_ready},
+ {enables, core_initialized}]}).
+
+%% supervisor callback
+-export([init/1]).
+%% client API
+-export([start_link/0]).
+
+start_link() ->
+ supervisor:start_link({local, ?MODULE}, ?MODULE, []).
+
+init([]) ->
+ SupFlags = #{strategy => simple_one_for_one,
+ intensity => 1,
+ period => 5},
+ Worker = rabbit_fifo_dlx_worker,
+ ChildSpec = #{id => Worker,
+ start => {Worker, start_link, []},
+ type => worker,
+ modules => [Worker]},
+ {ok, {SupFlags, [ChildSpec]}}.
diff --git a/deps/rabbit/src/rabbit_fifo_dlx_worker.erl b/deps/rabbit/src/rabbit_fifo_dlx_worker.erl
new file mode 100644
index 0000000000..d9acc857c9
--- /dev/null
+++ b/deps/rabbit/src/rabbit_fifo_dlx_worker.erl
@@ -0,0 +1,642 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+%% One rabbit_fifo_dlx_worker process exists per (source) quorum queue that has at-least-once dead lettering
+%% enabled. The rabbit_fifo_dlx_worker process is co-located on the quorum queue leader node.
+%% Its job is to consume from the quorum queue's 'discards' queue (containing dead lettered messages)
+%% and to forward each dead lettered message at least once to every target queue.
+%% This is in contrast to at-most-once semantics of rabbit_dead_letter:publish/5 which is
+%% the only option for classic queues and was the only option for quorum queues in RMQ <= v3.9
+%%
+%% Some parts of this module resemble the channel process in the sense that it needs to keep track what messages
+%% are consumed but not acked yet and what messages are published but not confirmed yet.
+%% Compared to the channel process, this module is protocol independent since it does not deal with AMQP clients.
+%%
+%% This module consumes directly from the rabbit_fifo_dlx_client bypassing the rabbit_queue_type interface,
+%% but publishes via the rabbit_queue_type interface.
+%% While consuming via rabbit_queue_type interface would have worked in practice (by using a special consumer argument,
+%% e.g. {<<"x-internal-queue">>, longstr, <<"discards">>}) using the rabbit_fifo_dlx_client directly provides
+%% separation of concerns making things easier to test, to debug, and to understand.
+
+-module(rabbit_fifo_dlx_worker).
+
+-include_lib("rabbit_common/include/rabbit.hrl").
+-include_lib("rabbit_common/include/rabbit_framing.hrl").
+
+-behaviour(gen_server).
+
+-export([start_link/1]).
+%% gen_server callbacks
+-export([init/1, terminate/2, handle_continue/2,
+ handle_cast/2, handle_call/3, handle_info/2,
+ code_change/3, format_status/2]).
+
+-define(HIBERNATE_AFTER, 4*60*1000).
+
+-record(pending, {
+ %% consumed_msg_id is not to be confused with consumer delivery tag.
+ %% The latter represents a means for AMQP clients to (multi-)ack to a channel process.
+ %% However, queues are not aware of delivery tags.
+ %% This rabbit_fifo_dlx_worker does not have the concept of delivery tags because it settles (acks)
+ %% message IDs directly back to the queue (and there is no AMQP consumer).
+ consumed_msg_id :: non_neg_integer(),
+ delivery :: rabbit_types:delivery(),
+ reason :: rabbit_dead_letter:reason(),
+ %% target queues for which publisher confirm has not been received yet
+ unsettled = [] :: [rabbit_amqqueue:name()],
+ %% target queues for which publisher rejection was received recently
+ rejected = [] :: [rabbit_amqqueue:name()],
+ %% target queues for which publisher confirm was received
+ settled = [] :: [rabbit_amqqueue:name()],
+ %% Number of times the message was published (i.e. rabbit_queue_type:deliver/3 invoked).
+ %% Can be 0 if the message was never published (for example no route exists).
+ publish_count = 0 :: non_neg_integer(),
+ %% Epoch time in milliseconds when the message was last published (i.e. rabbit_queue_type:deliver/3 invoked).
+ %% It can be 'undefined' if the message was never published (for example no route exists).
+ last_published_at :: undefined | integer(),
+ %% Epoch time in milliseconds when the message was consumed from the source quorum queue.
+ %% This value never changes.
+ %% It's mainly informational and meant for debugging to understand for how long the message
+ %% is sitting around without having received all publisher confirms.
+ consumed_at :: integer()
+ }).
+
+-record(state, {
+ %% source queue
+ queue_ref :: rabbit_amqqueue:name(),
+ %% monitors source queue
+ monitor_ref :: reference(),
+ %% configured (x-)dead-letter-exchange of source queue
+ exchange_ref :: rabbit_exchange:name() | undefined,
+ %% configured (x-)dead-letter-routing-key of source queue
+ routing_key,
+ %% client of source queue
+ dlx_client_state :: rabbit_fifo_dlx_client:state(),
+ %% clients of target queues
+ queue_type_state :: rabbit_queue_type:state(),
+ %% Consumed messages for which we are awaiting publisher confirms.
+ pendings = #{} :: #{OutSeq :: non_neg_integer() => #pending{}},
+ %% Consumed message IDs for which we received all publisher confirms.
+ settled_ids = [] :: [non_neg_integer()],
+ %% next outgoing message sequence number
+ next_out_seq = 1,
+ %% If no publisher confirm was received for at least settle_timeout milliseconds, message will be redelivered.
+ %% To prevent duplicates in the target queue and to ensure message will eventually be acked to the source queue,
+ %% set this value higher than the maximum time it takes for a queue to settle a message.
+ settle_timeout :: non_neg_integer(),
+ %% Timer firing every settle_timeout milliseconds
+ %% redelivering messages for which not all publisher confirms were received.
+ %% If there are no pending messages, this timer will eventually be cancelled to allow
+ %% this worker to hibernate.
+ timer :: undefined | reference(),
+ logged = #{} :: map()
+ }).
+
+-type state() :: #state{}.
+
+start_link(QRef) ->
+ gen_server:start_link(?MODULE, QRef, [{hibernate_after, ?HIBERNATE_AFTER}]).
+
+-spec init(rabbit_amqqueue:name()) ->
+ {ok, undefined, {continue, rabbit_amqqueue:name()}}.
+init(QRef) ->
+ {ok, undefined, {continue, QRef}}.
+
+-spec handle_continue(rabbit_amqqueue:name(), undefined) ->
+ {noreply, state()}.
+handle_continue(QRef, undefined) ->
+ {ok, Prefetch} = application:get_env(rabbit,
+ dead_letter_worker_consumer_prefetch),
+ {ok, SettleTimeout} = application:get_env(rabbit,
+ dead_letter_worker_publisher_confirm_timeout),
+ {ok, Q} = rabbit_amqqueue:lookup(QRef),
+ {ClusterName, _MaybeOldLeaderNode} = amqqueue:get_pid(Q),
+ {ok, ConsumerState} = rabbit_fifo_dlx_client:checkout(QRef,
+ {ClusterName, node()},
+ Prefetch),
+ {noreply, lookup_topology(#state{queue_ref = QRef,
+ queue_type_state = rabbit_queue_type:init(),
+ settle_timeout = SettleTimeout,
+ dlx_client_state = ConsumerState,
+ monitor_ref = erlang:monitor(process, ClusterName)
+ })}.
+
+terminate(_Reason, State) ->
+ cancel_timer(State).
+
+handle_call(Request, From, State) ->
+ rabbit_log:info("~s received unhandled call from ~p: ~p", [?MODULE, From, Request]),
+ {noreply, State}.
+
+handle_cast({queue_event, QRef, {_From, {machine, lookup_topology}}},
+ #state{queue_ref = QRef} = State0) ->
+ State = lookup_topology(State0),
+ redeliver_and_ack(State);
+handle_cast({queue_event, QRef, {From, Evt}},
+ #state{queue_ref = QRef,
+ dlx_client_state = DlxState0} = State0) ->
+ %% received dead-letter message from source queue
+ {ok, DlxState, Actions} = rabbit_fifo_dlx_client:handle_ra_event(From, Evt, DlxState0),
+ State1 = State0#state{dlx_client_state = DlxState},
+ State = handle_queue_actions(Actions, State1),
+ {noreply, State};
+handle_cast({queue_event, QRef, Evt},
+ #state{queue_type_state = QTypeState0} = State0) ->
+ case rabbit_queue_type:handle_event(QRef, Evt, QTypeState0) of
+ {ok, QTypeState1, Actions} ->
+ %% received e.g. confirm from target queue
+ State1 = State0#state{queue_type_state = QTypeState1},
+ State = handle_queue_actions(Actions, State1),
+ {noreply, State};
+ eol ->
+ remove_queue(QRef, State0);
+ {protocol_error, _Type, _Reason, _Args} ->
+ {noreply, State0}
+ end;
+handle_cast(settle_timeout, State0) ->
+ State = State0#state{timer = undefined},
+ redeliver_and_ack(State);
+handle_cast(Request, State) ->
+ rabbit_log:info("~s received unhandled cast ~p", [?MODULE, Request]),
+ {noreply, State}.
+
+redeliver_and_ack(State0) ->
+ State1 = redeliver_messages(State0),
+ State2 = ack(State1),
+ State = maybe_set_timer(State2),
+ {noreply, State}.
+
+handle_info({'DOWN', Ref, process, _, _},
+ #state{monitor_ref = Ref,
+ queue_ref = QRef}) ->
+ %% Source quorum queue is down. Therefore, terminate ourself.
+ %% The new leader will re-create another dlx_worker.
+ rabbit_log:debug("~s terminating itself because leader of ~s is down...",
+ [?MODULE, rabbit_misc:rs(QRef)]),
+ supervisor:terminate_child(rabbit_fifo_dlx_sup, self());
+handle_info({'DOWN', _MRef, process, QPid, Reason},
+ #state{queue_type_state = QTypeState0} = State0) ->
+ %% received from target classic queue
+ case rabbit_queue_type:handle_down(QPid, Reason, QTypeState0) of
+ {ok, QTypeState, Actions} ->
+ State = State0#state{queue_type_state = QTypeState},
+ {noreply, handle_queue_actions(Actions, State)};
+ {eol, QTypeState, QRef} ->
+ remove_queue(QRef, State0#state{queue_type_state = QTypeState})
+ end;
+handle_info(Info, State) ->
+ rabbit_log:info("~s received unhandled info ~p", [?MODULE, Info]),
+ {noreply, State}.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+remove_queue(QRef, #state{pendings = Pendings0,
+ queue_type_state = QTypeState0} = State) ->
+ Pendings = maps:map(fun(_Seq, #pending{unsettled = Unsettled} = Pending) ->
+ Pending#pending{unsettled = lists:delete(QRef, Unsettled)}
+ end, Pendings0),
+ QTypeState = rabbit_queue_type:remove(QRef, QTypeState0),
+ %% Wait for max 1s (we don't want to block the gen_server process for a longer time)
+ %% until target queue is deleted from ETS table to prevent subsequently consumed message(s)
+ %% from being routed to a deleted target queue. (If that happens for a target quorum or
+ %% stream queue and that queue gets re-created with the same name, these messages will
+ %% be stuck in our 'pendings' state.)
+ wait_for_queue_deleted(QRef, 20),
+ {noreply, State#state{pendings = Pendings,
+ queue_type_state = QTypeState}}.
+
+wait_for_queue_deleted(QRef, 0) ->
+ rabbit_log:debug("Received deletion event for ~s but queue still exists in ETS table.",
+ [rabbit_misc:rs(QRef)]);
+wait_for_queue_deleted(QRef, N) ->
+ case rabbit_amqqueue:lookup(QRef) of
+ {error, not_found} ->
+ ok;
+ _ ->
+ timer:sleep(50),
+ wait_for_queue_deleted(QRef, N-1)
+ end.
+
+-spec lookup_topology(state()) -> state().
+lookup_topology(#state{queue_ref = {resource, Vhost, queue, _} = QRef} = State) ->
+ {ok, Q} = rabbit_amqqueue:lookup(QRef),
+ DLRKey = rabbit_queue_type_util:args_policy_lookup(<<"dead-letter-routing-key">>,
+ fun(_Pol, QArg) -> QArg end, Q),
+ DLX = rabbit_queue_type_util:args_policy_lookup(<<"dead-letter-exchange">>,
+ fun(_Pol, QArg) -> QArg end, Q),
+ DLXRef = rabbit_misc:r(Vhost, exchange, DLX),
+ State#state{exchange_ref = DLXRef,
+ routing_key = DLRKey}.
+
+-spec handle_queue_actions(rabbit_queue_type:actions() | rabbit_fifo_dlx_client:actions(), state()) ->
+ state().
+handle_queue_actions(Actions, State0) ->
+ lists:foldl(
+ fun ({deliver, Msgs}, S0) ->
+ S1 = handle_deliver(Msgs, S0),
+ maybe_set_timer(S1);
+ ({settled, QRef, MsgSeqs}, S0) ->
+ S1 = handle_settled(QRef, MsgSeqs, S0),
+ S2 = ack(S1),
+ maybe_cancel_timer(S2);
+ ({rejected, QRef, MsgSeqs}, S0) ->
+ handle_rejected(QRef, MsgSeqs, S0);
+ ({queue_down, _QRef}, S0) ->
+ %% target classic queue is down, but not deleted
+ S0
+ end, State0, Actions).
+
+handle_deliver(Msgs, #state{queue_ref = QRef} = State0)
+ when is_list(Msgs) ->
+ {DLX, State} = lookup_dlx(State0),
+ lists:foldl(fun({_QRef, MsgId, Msg, Reason}, S) ->
+ forward(Msg, MsgId, QRef, DLX, Reason, S)
+ end, State, Msgs).
+
+handle_rejected(QRef, MsgSeqNos, #state{pendings = Pendings0} = State)
+ when is_list(MsgSeqNos) ->
+ Pendings = lists:foldl(fun(SeqNo, P) ->
+ rejected(SeqNo, [QRef], P)
+ end, Pendings0, MsgSeqNos),
+ State#state{pendings = Pendings}.
+
+rejected(SeqNo, Qs, Pendings)
+ when is_list(Qs) ->
+ case maps:is_key(SeqNo, Pendings) of
+ true ->
+ maps:update_with(SeqNo,
+ fun(#pending{unsettled = Unsettled,
+ rejected = Rejected} = P) ->
+ P#pending{unsettled = Unsettled -- Qs,
+ rejected = Qs ++ Rejected}
+ end,
+ Pendings);
+ false ->
+ rabbit_log:debug("Ignoring rejection for unknown sequence number ~b "
+ "from target dead letter queues ~p",
+ [SeqNo, Qs]),
+ Pendings
+ end.
+
+-spec lookup_dlx(state()) ->
+ {rabbit_types:exchange() | not_found, state()}.
+lookup_dlx(#state{exchange_ref = DLXRef} = State0) ->
+ case rabbit_exchange:lookup(DLXRef) of
+ {error, not_found} ->
+ State = log_missing_dlx_once(State0),
+ {not_found, State};
+ {ok, X} ->
+ {X, State0}
+ end.
+
+-spec forward(rabbit_types:message(), non_neg_integer(), rabbit_amqqueue:name(),
+ rabbit_types:exchange() | not_found, rabbit_dead_letter:reason(), state()) ->
+ state().
+forward(ConsumedMsg, ConsumedMsgId, ConsumedQRef, DLX, Reason,
+ #state{next_out_seq = OutSeq,
+ pendings = Pendings,
+ exchange_ref = DLXRef,
+ routing_key = RKey} = State0) ->
+ #basic_message{routing_keys = RKeys} = Msg = rabbit_dead_letter:make_msg(ConsumedMsg, Reason,
+ DLXRef, RKey, ConsumedQRef),
+ %% Field 'mandatory' is set to false because we check ourselves whether the message is routable.
+ Delivery = rabbit_basic:delivery(_Mandatory = false, _Confirm = true, Msg, OutSeq),
+ {TargetQs, State3} = case DLX of
+ not_found ->
+ {[], State0};
+ _ ->
+ RouteToQs0 = rabbit_exchange:route(DLX, Delivery),
+ {RouteToQs1, Cycles} = rabbit_dead_letter:detect_cycles(Reason, Msg, RouteToQs0),
+ State1 = log_cycles(Cycles, RKeys, State0),
+ RouteToQs = rabbit_amqqueue:lookup(RouteToQs1),
+ State2 = case RouteToQs of
+ [] ->
+ log_no_route_once(State1);
+ _ ->
+ State1
+ end,
+ {RouteToQs, State2}
+ end,
+ Now = os:system_time(millisecond),
+ Pend0 = #pending{
+ consumed_msg_id = ConsumedMsgId,
+ consumed_at = Now,
+ delivery = Delivery,
+ reason = Reason
+ },
+ case TargetQs of
+ [] ->
+ %% We can't deliver this message since there is no target queue we can route to.
+ %% We buffer this message and retry to send every settle_timeout milliseonds.
+ State3#state{next_out_seq = OutSeq + 1,
+ pendings = maps:put(OutSeq, Pend0, Pendings)};
+ _ ->
+ Pend = Pend0#pending{publish_count = 1,
+ last_published_at = Now,
+ unsettled = queue_names(TargetQs)},
+ State = State3#state{next_out_seq = OutSeq + 1,
+ pendings = maps:put(OutSeq, Pend, Pendings)},
+ deliver_to_queues(Delivery, TargetQs, State)
+ end.
+
+-spec deliver_to_queues(rabbit_types:delivery(), [amqqueue:amqqueue()], state()) ->
+ state().
+deliver_to_queues(#delivery{msg_seq_no = SeqNo} = Delivery, Qs, #state{queue_type_state = QTypeState0,
+ pendings = Pendings} = State0) ->
+ {State, Actions} = case rabbit_queue_type:deliver(Qs, Delivery, QTypeState0) of
+ {ok, QTypeState, Actions0} ->
+ {State0#state{queue_type_state = QTypeState}, Actions0};
+ {error, Reason} ->
+ %% rabbit_queue_type:deliver/3 does not tell us which target queue failed.
+ %% Therefore, reject all target queues. We need to reject them such that
+ %% we won't rely on rabbit_fifo_client to re-deliver on behalf of us
+ %% (and therefore preventing messages to get stuck in our 'unsettled' state).
+ QNames = queue_names(Qs),
+ rabbit_log:debug("Failed to deliver message with seq_no ~b to queues ~p: ~p",
+ [SeqNo, QNames, Reason]),
+ {State0#state{pendings = rejected(SeqNo, QNames, Pendings)}, []}
+ end,
+ handle_queue_actions(Actions, State).
+
+handle_settled(QRef, MsgSeqs, State) ->
+ lists:foldl(fun (MsgSeq, S) ->
+ handle_settled0(QRef, MsgSeq, S)
+ end, State, MsgSeqs).
+
+handle_settled0(QRef, MsgSeq, #state{pendings = Pendings,
+ settled_ids = SettledIds} = State) ->
+ case maps:find(MsgSeq, Pendings) of
+ {ok, #pending{unsettled = [QRef],
+ rejected = [],
+ consumed_msg_id = ConsumedId}} ->
+ State#state{pendings = maps:remove(MsgSeq, Pendings),
+ settled_ids = [ConsumedId | SettledIds]};
+ {ok, #pending{unsettled = [],
+ rejected = [QRef],
+ consumed_msg_id = ConsumedId}} ->
+ State#state{pendings = maps:remove(MsgSeq, Pendings),
+ settled_ids = [ConsumedId | SettledIds]};
+ {ok, #pending{unsettled = Unsettled,
+ rejected = Rejected,
+ settled = Settled} = Pend0} ->
+ Pend = Pend0#pending{unsettled = lists:delete(QRef, Unsettled),
+ rejected = lists:delete(QRef, Rejected),
+ settled = [QRef | Settled]},
+ State#state{pendings = maps:update(MsgSeq, Pend, Pendings)};
+ error ->
+ rabbit_log:debug("Ignoring publisher confirm for unknown sequence number ~b "
+ "from target dead letter ~s",
+ [MsgSeq, rabbit_misc:rs(QRef)]),
+ State
+ end.
+
+ack(#state{settled_ids = []} = State) ->
+ State;
+ack(#state{settled_ids = Ids,
+ dlx_client_state = DlxState0} = State) ->
+ {ok, DlxState} = rabbit_fifo_dlx_client:settle(Ids, DlxState0),
+ State#state{settled_ids = [],
+ dlx_client_state = DlxState}.
+
+%% Re-deliver messages that
+%% 1. timed out waiting on publisher confirm, or
+%% 2. got rejected by target queue, or
+%% 3. never got sent due to routing topology misconfiguration.
+-spec redeliver_messages(state()) ->
+ state().
+redeliver_messages(#state{pendings = Pendings,
+ settle_timeout = SettleTimeout} = State0) ->
+ case lookup_dlx(State0) of
+ {not_found, State} ->
+ %% Configured dead-letter-exchange does (still) not exist.
+ %% Keep the same Pendings in our state until user creates or re-configures the dead-letter-exchange.
+ State;
+ {DLX, State} ->
+ Now = os:system_time(millisecond),
+ maps:fold(fun(OutSeq, #pending{last_published_at = LastPub} = Pend, S0)
+ when LastPub + SettleTimeout =< Now ->
+ %% Publisher confirm timed out.
+ redeliver(Pend, DLX, OutSeq, S0);
+ (OutSeq, #pending{last_published_at = undefined} = Pend, S0) ->
+ %% Message was never published due to dead-letter routing topology misconfiguration.
+ redeliver(Pend, DLX, OutSeq, S0);
+ (_OutSeq, _Pending, S) ->
+ %% Publisher confirm did not time out.
+ S
+ end, State, Pendings)
+ end.
+
+redeliver(#pending{delivery = #delivery{message = #basic_message{content = Content}}} = Pend,
+ DLX, OutSeq, #state{routing_key = undefined} = State) ->
+ %% No dead-letter-routing-key defined for source quorum queue.
+ %% Therefore use all of messages's original routing keys (which can include CC and BCC recipients).
+ %% This complies with the behaviour of the rabbit_dead_letter module.
+ %% We stored these original routing keys in the 1st (i.e. most recent) x-death entry.
+ #content{properties = #'P_basic'{headers = Headers}} =
+ rabbit_binary_parser:ensure_content_decoded(Content),
+ {array, [{table, MostRecentDeath}|_]} = rabbit_misc:table_lookup(Headers, <<"x-death">>),
+ {<<"routing-keys">>, array, Routes0} = lists:keyfind(<<"routing-keys">>, 1, MostRecentDeath),
+ Routes = [Route || {longstr, Route} <- Routes0],
+ redeliver0(Pend, DLX, Routes, OutSeq, State);
+redeliver(Pend, DLX, OutSeq, #state{routing_key = DLRKey} = State) ->
+ redeliver0(Pend, DLX, [DLRKey], OutSeq, State).
+
+redeliver0(#pending{delivery = #delivery{message = BasicMsg} = Delivery0,
+ unsettled = Unsettled0,
+ settled = Settled,
+ publish_count = PublishCount,
+ reason = Reason,
+ consumed_msg_id = ConsumedId} = Pend0,
+ DLX, DLRKeys, OutSeq,
+ #state{pendings = Pendings,
+ settled_ids = SettledIds,
+ exchange_ref = DLXRef,
+ queue_type_state = QTypeState} = State0)
+ when is_list(DLRKeys) ->
+ Delivery = Delivery0#delivery{message = BasicMsg#basic_message{exchange_name = DLXRef,
+ routing_keys = DLRKeys}},
+ RouteToQs0 = rabbit_exchange:route(DLX, Delivery),
+ %% rabbit_exchange:route/2 can route to target queues that do not exist (e.g. in case of default exchange).
+ %% Therefore, filter out non-existent target queues.
+ RouteToQs1 = queue_names(rabbit_amqqueue:lookup(RouteToQs0)),
+ case {RouteToQs1, Settled} of
+ {[], [_|_]} ->
+ %% Routes changed dynamically so that we don't await any publisher confirms anymore.
+ %% Since we also received at least once publisher confirm (mandatory flag semantics),
+ %% we can ack the messasge to the source quorum queue.
+ State0#state{pendings = maps:remove(OutSeq, Pendings),
+ settled_ids = [ConsumedId | SettledIds]};
+ _ ->
+ %% Do not redeliver message to a target queue
+ %% 1. for which we already received a publisher confirm, or
+ Unsettled = RouteToQs1 -- Settled,
+ %% 2. whose queue client redelivers on our behalf.
+ %% Note that a quorum queue client does not redeliver on our behalf if it previously
+ %% rejected the message. This is why we always redeliver rejected messages here.
+ RouteToQs2 = Unsettled -- clients_redeliver(Unsettled0, QTypeState),
+ {RouteToQs, Cycles} = rabbit_dead_letter:detect_cycles(Reason, BasicMsg, RouteToQs2),
+ State1 = log_cycles(Cycles, DLRKeys, State0),
+ case RouteToQs of
+ [] ->
+ State1;
+ _ ->
+ Pend = Pend0#pending{publish_count = PublishCount + 1,
+ last_published_at = os:system_time(millisecond),
+ delivery = Delivery,
+ %% Override 'unsettled' because topology could have changed.
+ unsettled = Unsettled,
+ %% Any target queue that rejected previously and still need
+ %% to be routed to is moved back to 'unsettled'.
+ rejected = []},
+ State = State0#state{pendings = maps:update(OutSeq, Pend, Pendings)},
+ deliver_to_queues(Delivery, rabbit_amqqueue:lookup(RouteToQs), State)
+ end
+ end.
+
+%% Returns queues whose queue clients take care of redelivering messages.
+-spec clients_redeliver([rabbit_amqqueue:name()], rabbit_queue_type:state()) ->
+ [rabbit_amqqueue:name()].
+clients_redeliver(Qs, QTypeState) ->
+ lists:filter(fun(Q) ->
+ case rabbit_queue_type:module(Q, QTypeState) of
+ {ok, rabbit_quorum_queue} ->
+ % If #enqueue{} Raft command does not get applied
+ % rabbit_fifo_client will resend.
+ true;
+ {ok, rabbit_stream_queue} ->
+ true;
+ _ ->
+ false
+ end
+ end, Qs).
+
+maybe_set_timer(#state{timer = TRef} = State)
+ when is_reference(TRef) ->
+ State;
+maybe_set_timer(#state{timer = undefined,
+ pendings = Pendings} = State)
+ when map_size(Pendings) =:= 0 ->
+ State;
+maybe_set_timer(#state{timer = undefined,
+ settle_timeout = SettleTimeout} = State) ->
+ TRef = erlang:send_after(SettleTimeout, self(), {'$gen_cast', settle_timeout}),
+ State#state{timer = TRef}.
+
+maybe_cancel_timer(#state{timer = TRef,
+ pendings = Pendings} = State)
+ when is_reference(TRef),
+ map_size(Pendings) =:= 0 ->
+ erlang:cancel_timer(TRef, [{async, true}, {info, false}]),
+ State#state{timer = undefined};
+maybe_cancel_timer(State) ->
+ State.
+
+cancel_timer(#state{timer = TRef} = State)
+ when is_reference(TRef) ->
+ erlang:cancel_timer(TRef, [{async, true}, {info, false}]),
+ State#state{timer = undefined};
+cancel_timer(State) ->
+ State.
+
+queue_names(Qs)
+ when is_list(Qs) ->
+ lists:map(fun amqqueue:get_name/1, Qs).
+
+format_status(_Opt, [_PDict, #state{
+ queue_ref = QueueRef,
+ exchange_ref = ExchangeRef,
+ routing_key = RoutingKey,
+ dlx_client_state = DlxClientState,
+ queue_type_state = QueueTypeState,
+ pendings = Pendings,
+ settled_ids = SettledIds,
+ next_out_seq = NextOutSeq,
+ settle_timeout = SettleTimeout,
+ timer = Timer,
+ logged = Logged
+ }]) ->
+ S = #{queue_ref => QueueRef,
+ exchange_ref => ExchangeRef,
+ routing_key => RoutingKey,
+ dlx_client_state => rabbit_fifo_dlx_client:overview(DlxClientState),
+ queue_type_state => QueueTypeState,
+ pendings => maps:map(fun(_, P) -> format_pending(P) end, Pendings),
+ settled_ids => SettledIds,
+ next_out_seq => NextOutSeq,
+ settle_timeout => SettleTimeout,
+ timer_is_active => Timer =/= undefined,
+ logged => Logged},
+ [{data, [{"State", S}]}].
+
+format_pending(#pending{consumed_msg_id = ConsumedMsgId,
+ delivery = _DoNotLogLargeBinary,
+ reason = Reason,
+ unsettled = Unsettled,
+ rejected = Rejected,
+ settled = Settled,
+ publish_count = PublishCount,
+ last_published_at = LastPublishedAt,
+ consumed_at = ConsumedAt}) ->
+ #{consumed_msg_id => ConsumedMsgId,
+ reason => Reason,
+ unsettled => Unsettled,
+ rejected => Rejected,
+ settled => Settled,
+ publish_count => PublishCount,
+ last_published_at => LastPublishedAt,
+ consumed_at => ConsumedAt}.
+
+log_missing_dlx_once(#state{exchange_ref = SameDlx,
+ logged = #{missing_dlx := SameDlx}} = State) ->
+ State;
+log_missing_dlx_once(#state{exchange_ref = DlxResource,
+ queue_ref = QueueResource,
+ logged = Logged} = State) ->
+ rabbit_log:warning("Cannot forward any dead-letter messages from source quorum ~s because "
+ "its configured dead-letter-exchange ~s does not exist. "
+ "Either create the configured dead-letter-exchange or re-configure "
+ "the dead-letter-exchange policy for the source quorum queue to prevent "
+ "dead-lettered messages from piling up in the source quorum queue. "
+ "This message will not be logged again.",
+ [rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource)]),
+ State#state{logged = maps:put(missing_dlx, DlxResource, Logged)}.
+
+log_no_route_once(#state{exchange_ref = SameDlx,
+ routing_key = SameRoutingKey,
+ logged = #{no_route := {SameDlx, SameRoutingKey}}} = State) ->
+ State;
+log_no_route_once(#state{queue_ref = QueueResource,
+ exchange_ref = DlxResource,
+ routing_key = RoutingKey,
+ logged = Logged} = State) ->
+ rabbit_log:warning("Cannot forward any dead-letter messages from source quorum ~s "
+ "with configured dead-letter-exchange ~s and configured "
+ "dead-letter-routing-key '~s'. This can happen either if the dead-letter "
+ "routing topology is misconfigured (for example no queue bound to "
+ "dead-letter-exchange or wrong dead-letter-routing-key configured) or if "
+ "non-mirrored classic queues are bound whose host node is down. "
+ "Fix this issue to prevent dead-lettered messages from piling up "
+ "in the source quorum queue. "
+ "This message will not be logged again.",
+ [rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource), RoutingKey]),
+ State#state{logged = maps:put(no_route, {DlxResource, RoutingKey}, Logged)}.
+
+log_cycles(Cycles, RoutingKeys, State) ->
+ lists:foldl(fun(Cycle, S) -> log_cycle_once(Cycle, RoutingKeys, S) end, State, Cycles).
+
+log_cycle_once(Queues, _, #state{logged = Logged} = State)
+ when is_map_key({cycle, Queues}, Logged) ->
+ State;
+log_cycle_once(Queues, RoutingKeys, #state{exchange_ref = DlxResource,
+ queue_ref = QueueResource,
+ logged = Logged} = State) ->
+ rabbit_log:warning("Dead-letter queues cycle detected for source quorum ~s "
+ "with dead-letter exchange ~s and routing keys ~p: ~p "
+ "This message will not be logged again.",
+ [rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource),
+ RoutingKeys, Queues]),
+ State#state{logged = maps:put({cycle, Queues}, true, Logged)}.
diff --git a/deps/rabbit/src/rabbit_fifo_v0.erl b/deps/rabbit/src/rabbit_fifo_v0.erl
index 971c789217..8cc9fc8cca 100644
--- a/deps/rabbit/src/rabbit_fifo_v0.erl
+++ b/deps/rabbit/src/rabbit_fifo_v0.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_fifo_v0).
diff --git a/deps/rabbit/src/rabbit_fifo_v1.erl b/deps/rabbit/src/rabbit_fifo_v1.erl
new file mode 100644
index 0000000000..4e4e91d76a
--- /dev/null
+++ b/deps/rabbit/src/rabbit_fifo_v1.erl
@@ -0,0 +1,2248 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module(rabbit_fifo_v1).
+
+-behaviour(ra_machine).
+
+-compile(inline_list_funcs).
+-compile(inline).
+-compile({no_auto_import, [apply/3]}).
+
+-include("rabbit_fifo_v1.hrl").
+-include_lib("rabbit_common/include/rabbit.hrl").
+
+-export([
+ init/1,
+ apply/3,
+ state_enter/2,
+ tick/2,
+ overview/1,
+ get_checked_out/4,
+ %% versioning
+ version/0,
+ which_module/1,
+ %% aux
+ init_aux/1,
+ handle_aux/6,
+ % queries
+ query_messages_ready/1,
+ query_messages_checked_out/1,
+ query_messages_total/1,
+ query_processes/1,
+ query_ra_indexes/1,
+ query_consumer_count/1,
+ query_consumers/1,
+ query_stat/1,
+ query_single_active_consumer/1,
+ query_in_memory_usage/1,
+ query_peek/2,
+ query_notify_decorators_info/1,
+ usage/1,
+
+ zero/1,
+
+ %% misc
+ dehydrate_state/1,
+ normalize/1,
+
+
+ %% getters for coversions
+ get_field/2,
+ get_cfg_field/2,
+
+ %% protocol helpers
+ make_enqueue/3,
+ make_register_enqueuer/1,
+ make_checkout/3,
+ make_settle/2,
+ make_return/2,
+ make_discard/2,
+ make_credit/4,
+ make_purge/0,
+ make_purge_nodes/1,
+ make_update_config/1,
+ make_garbage_collection/0,
+
+ enqueue_all_pending/1
+ ]).
+
+-export([convert_v0_to_v1/1]).
+
+%% command records representing all the protocol actions that are supported
+-record(enqueue, {pid :: option(pid()),
+ seq :: option(msg_seqno()),
+ msg :: raw_msg()}).
+-record(register_enqueuer, {pid :: pid()}).
+-record(checkout, {consumer_id :: consumer_id(),
+ spec :: checkout_spec(),
+ meta :: consumer_meta()}).
+-record(settle, {consumer_id :: consumer_id(),
+ msg_ids :: [msg_id()]}).
+-record(return, {consumer_id :: consumer_id(),
+ msg_ids :: [msg_id()]}).
+-record(discard, {consumer_id :: consumer_id(),
+ msg_ids :: [msg_id()]}).
+-record(credit, {consumer_id :: consumer_id(),
+ credit :: non_neg_integer(),
+ delivery_count :: non_neg_integer(),
+ drain :: boolean()}).
+-record(purge, {}).
+-record(purge_nodes, {nodes :: [node()]}).
+-record(update_config, {config :: config()}).
+-record(garbage_collection, {}).
+
+-opaque protocol() ::
+ #enqueue{} |
+ #register_enqueuer{} |
+ #checkout{} |
+ #settle{} |
+ #return{} |
+ #discard{} |
+ #credit{} |
+ #purge{} |
+ #purge_nodes{} |
+ #update_config{} |
+ #garbage_collection{}.
+
+-type command() :: protocol() | ra_machine:builtin_command().
+%% all the command types supported by ra fifo
+
+-type client_msg() :: delivery().
+%% the messages `rabbit_fifo' can send to consumers.
+
+-opaque state() :: #?STATE{}.
+
+-export_type([protocol/0,
+ delivery/0,
+ command/0,
+ credit_mode/0,
+ consumer_tag/0,
+ consumer_meta/0,
+ consumer_id/0,
+ client_msg/0,
+ msg/0,
+ msg_id/0,
+ msg_seqno/0,
+ delivery_msg/0,
+ state/0,
+ config/0]).
+
+%% This function is never called since only rabbit_fifo_v0:init/1 is called.
+%% See https://github.com/rabbitmq/ra/blob/e0d1e6315a45f5d3c19875d66f9d7bfaf83a46e3/src/ra_machine.erl#L258-L265
+-spec init(config()) -> state().
+init(#{name := Name,
+ queue_resource := Resource} = Conf) ->
+ update_config(Conf, #?STATE{cfg = #cfg{name = Name,
+ resource = Resource}}).
+
+update_config(Conf, State) ->
+ DLH = maps:get(dead_letter_handler, Conf, undefined),
+ BLH = maps:get(become_leader_handler, Conf, undefined),
+ RCI = maps:get(release_cursor_interval, Conf, ?RELEASE_CURSOR_EVERY),
+ Overflow = maps:get(overflow_strategy, Conf, drop_head),
+ MaxLength = maps:get(max_length, Conf, undefined),
+ MaxBytes = maps:get(max_bytes, Conf, undefined),
+ MaxMemoryLength = maps:get(max_in_memory_length, Conf, undefined),
+ MaxMemoryBytes = maps:get(max_in_memory_bytes, Conf, undefined),
+ DeliveryLimit = maps:get(delivery_limit, Conf, undefined),
+ Expires = maps:get(expires, Conf, undefined),
+ ConsumerStrategy = case maps:get(single_active_consumer_on, Conf, false) of
+ true ->
+ single_active;
+ false ->
+ competing
+ end,
+ Cfg = State#?STATE.cfg,
+ RCISpec = {RCI, RCI},
+
+ LastActive = maps:get(created, Conf, undefined),
+ State#?STATE{cfg = Cfg#cfg{release_cursor_interval = RCISpec,
+ dead_letter_handler = DLH,
+ become_leader_handler = BLH,
+ overflow_strategy = Overflow,
+ max_length = MaxLength,
+ max_bytes = MaxBytes,
+ max_in_memory_length = MaxMemoryLength,
+ max_in_memory_bytes = MaxMemoryBytes,
+ consumer_strategy = ConsumerStrategy,
+ delivery_limit = DeliveryLimit,
+ expires = Expires},
+ last_active = LastActive}.
+
+zero(_) ->
+ 0.
+
+% msg_ids are scoped per consumer
+% ra_indexes holds all raft indexes for enqueues currently on queue
+-spec apply(ra_machine:command_meta_data(), command(), state()) ->
+ {state(), Reply :: term(), ra_machine:effects()} |
+ {state(), Reply :: term()}.
+apply(Meta, #enqueue{pid = From, seq = Seq,
+ msg = RawMsg}, State00) ->
+ apply_enqueue(Meta, From, Seq, RawMsg, State00);
+apply(_Meta, #register_enqueuer{pid = Pid},
+ #?STATE{enqueuers = Enqueuers0,
+ cfg = #cfg{overflow_strategy = Overflow}} = State0) ->
+
+ State = case maps:is_key(Pid, Enqueuers0) of
+ true ->
+ %% if the enqueuer exits just echo the overflow state
+ State0;
+ false ->
+ State0#?STATE{enqueuers = Enqueuers0#{Pid => #enqueuer{}}}
+ end,
+ Res = case is_over_limit(State) of
+ true when Overflow == reject_publish ->
+ reject_publish;
+ _ ->
+ ok
+ end,
+ {State, Res, [{monitor, process, Pid}]};
+apply(Meta,
+ #settle{msg_ids = MsgIds, consumer_id = ConsumerId},
+ #?STATE{consumers = Cons0} = State) ->
+ case Cons0 of
+ #{ConsumerId := Con0} ->
+ % need to increment metrics before completing as any snapshot
+ % states taken need to include them
+ complete_and_checkout(Meta, MsgIds, ConsumerId,
+ Con0, [], State);
+ _ ->
+ {State, ok}
+
+ end;
+apply(Meta, #discard{msg_ids = MsgIds, consumer_id = ConsumerId},
+ #?STATE{consumers = Cons0} = State0) ->
+ case Cons0 of
+ #{ConsumerId := Con0} ->
+ Discarded = maps:with(MsgIds, Con0#consumer.checked_out),
+ Effects = dead_letter_effects(rejected, Discarded, State0, []),
+ complete_and_checkout(Meta, MsgIds, ConsumerId, Con0,
+ Effects, State0);
+ _ ->
+ {State0, ok}
+ end;
+apply(Meta, #return{msg_ids = MsgIds, consumer_id = ConsumerId},
+ #?STATE{consumers = Cons0} = State) ->
+ case Cons0 of
+ #{ConsumerId := #consumer{checked_out = Checked0}} ->
+ Returned = maps:with(MsgIds, Checked0),
+ return(Meta, ConsumerId, Returned, [], State);
+ _ ->
+ {State, ok}
+ end;
+apply(Meta, #credit{credit = NewCredit, delivery_count = RemoteDelCnt,
+ drain = Drain, consumer_id = ConsumerId},
+ #?STATE{consumers = Cons0,
+ service_queue = ServiceQueue0,
+ waiting_consumers = Waiting0} = State0) ->
+ case Cons0 of
+ #{ConsumerId := #consumer{delivery_count = DelCnt} = Con0} ->
+ %% this can go below 0 when credit is reduced
+ C = max(0, RemoteDelCnt + NewCredit - DelCnt),
+ %% grant the credit
+ Con1 = Con0#consumer{credit = C},
+ ServiceQueue = maybe_queue_consumer(ConsumerId, Con1,
+ ServiceQueue0),
+ Cons = maps:put(ConsumerId, Con1, Cons0),
+ {State1, ok, Effects} =
+ checkout(Meta, State0,
+ State0#?STATE{service_queue = ServiceQueue,
+ consumers = Cons}, [], false),
+ Response = {send_credit_reply, messages_ready(State1)},
+ %% by this point all checkouts for the updated credit value
+ %% should be processed so we can evaluate the drain
+ case Drain of
+ false ->
+ %% just return the result of the checkout
+ {State1, Response, Effects};
+ true ->
+ Con = #consumer{credit = PostCred} =
+ maps:get(ConsumerId, State1#?STATE.consumers),
+ %% add the outstanding credit to the delivery count
+ DeliveryCount = Con#consumer.delivery_count + PostCred,
+ Consumers = maps:put(ConsumerId,
+ Con#consumer{delivery_count = DeliveryCount,
+ credit = 0},
+ State1#?STATE.consumers),
+ Drained = Con#consumer.credit,
+ {CTag, _} = ConsumerId,
+ {State1#?STATE{consumers = Consumers},
+ %% returning a multi response with two client actions
+ %% for the channel to execute
+ {multi, [Response, {send_drained, {CTag, Drained}}]},
+ Effects}
+ end;
+ _ when Waiting0 /= [] ->
+ %% there are waiting consuemrs
+ case lists:keytake(ConsumerId, 1, Waiting0) of
+ {value, {_, Con0 = #consumer{delivery_count = DelCnt}}, Waiting} ->
+ %% the consumer is a waiting one
+ %% grant the credit
+ C = max(0, RemoteDelCnt + NewCredit - DelCnt),
+ Con = Con0#consumer{credit = C},
+ State = State0#?STATE{waiting_consumers =
+ [{ConsumerId, Con} | Waiting]},
+ {State, {send_credit_reply, messages_ready(State)}};
+ false ->
+ {State0, ok}
+ end;
+ _ ->
+ %% credit for unknown consumer - just ignore
+ {State0, ok}
+ end;
+apply(_, #checkout{spec = {dequeue, _}},
+ #?STATE{cfg = #cfg{consumer_strategy = single_active}} = State0) ->
+ {State0, {error, {unsupported, single_active_consumer}}};
+apply(#{index := Index,
+ system_time := Ts,
+ from := From} = Meta, #checkout{spec = {dequeue, Settlement},
+ meta = ConsumerMeta,
+ consumer_id = ConsumerId},
+ #?STATE{consumers = Consumers} = State00) ->
+ %% dequeue always updates last_active
+ State0 = State00#?STATE{last_active = Ts},
+ %% all dequeue operations result in keeping the queue from expiring
+ Exists = maps:is_key(ConsumerId, Consumers),
+ case messages_ready(State0) of
+ 0 ->
+ update_smallest_raft_index(Index, {dequeue, empty}, State0,
+ [notify_decorators_effect(State0)]);
+ _ when Exists ->
+ %% a dequeue using the same consumer_id isn't possible at this point
+ {State0, {dequeue, empty}};
+ Ready ->
+ State1 = update_consumer(ConsumerId, ConsumerMeta,
+ {once, 1, simple_prefetch}, 0,
+ State0),
+ {success, _, MsgId, Msg, State2} = checkout_one(Meta, State1),
+ {State4, Effects1} = case Settlement of
+ unsettled ->
+ {_, Pid} = ConsumerId,
+ {State2, [{monitor, process, Pid}]};
+ settled ->
+ %% immediately settle the checkout
+ {State3, _, Effects0} =
+ apply(Meta, make_settle(ConsumerId, [MsgId]),
+ State2),
+ {State3, Effects0}
+ end,
+ {Reply, Effects2} =
+ case Msg of
+ {RaftIdx, {Header, empty}} ->
+ %% TODO add here new log effect with reply
+ {'$ra_no_reply',
+ [reply_log_effect(RaftIdx, MsgId, Header, Ready - 1, From) |
+ Effects1]};
+ _ ->
+ {{dequeue, {MsgId, Msg}, Ready-1}, Effects1}
+
+ end,
+ NotifyEffect = notify_decorators_effect(State4),
+ case evaluate_limit(Index, false, State0, State4, [NotifyEffect | Effects2]) of
+ {State, true, Effects} ->
+ update_smallest_raft_index(Index, Reply, State, Effects);
+ {State, false, Effects} ->
+ {State, Reply, Effects}
+ end
+ end;
+apply(#{index := Idx} = Meta,
+ #checkout{spec = cancel,
+ consumer_id = ConsumerId}, State0) ->
+ {State1, Effects1} = cancel_consumer(Meta, ConsumerId, State0, [],
+ consumer_cancel),
+ {State, Reply, Effects} = checkout(Meta, State0, State1, Effects1),
+ update_smallest_raft_index(Idx, Reply, State, Effects);
+apply(Meta, #checkout{spec = Spec, meta = ConsumerMeta,
+ consumer_id = {_, Pid} = ConsumerId},
+ State0) ->
+ Priority = get_priority_from_args(ConsumerMeta),
+ State1 = update_consumer(ConsumerId, ConsumerMeta, Spec, Priority, State0),
+ checkout(Meta, State0, State1, [{monitor, process, Pid}]);
+apply(#{index := Index}, #purge{},
+ #?STATE{ra_indexes = Indexes0,
+ returns = Returns,
+ messages = Messages} = State0) ->
+ Total = messages_ready(State0),
+ Indexes1 = lists:foldl(fun rabbit_fifo_index:delete/2, Indexes0,
+ [I || {_, {I, _}} <- lqueue:to_list(Messages)]),
+ Indexes = lists:foldl(fun rabbit_fifo_index:delete/2, Indexes1,
+ [I || {_, {I, _}} <- lqueue:to_list(Returns)]),
+
+ State1 = State0#?STATE{ra_indexes = Indexes,
+ messages = lqueue:new(),
+ returns = lqueue:new(),
+ msg_bytes_enqueue = 0,
+ prefix_msgs = {0, [], 0, []},
+ msg_bytes_in_memory = 0,
+ msgs_ready_in_memory = 0},
+ Effects0 = [garbage_collection],
+ Reply = {purge, Total},
+ {State, _, Effects} = evaluate_limit(Index, false, State0,
+ State1, Effects0),
+ update_smallest_raft_index(Index, Reply, State, Effects);
+apply(#{index := Idx}, #garbage_collection{}, State) ->
+ update_smallest_raft_index(Idx, ok, State, [{aux, garbage_collection}]);
+apply(#{system_time := Ts} = Meta, {down, Pid, noconnection},
+ #?STATE{consumers = Cons0,
+ cfg = #cfg{consumer_strategy = single_active},
+ waiting_consumers = Waiting0,
+ enqueuers = Enqs0} = State0) ->
+ Node = node(Pid),
+ %% if the pid refers to an active or cancelled consumer,
+ %% mark it as suspected and return it to the waiting queue
+ {State1, Effects0} =
+ maps:fold(fun({_, P} = Cid, C0, {S0, E0})
+ when node(P) =:= Node ->
+ %% the consumer should be returned to waiting
+ %% and checked out messages should be returned
+ Effs = consumer_update_active_effects(
+ S0, Cid, C0, false, suspected_down, E0),
+ Checked = C0#consumer.checked_out,
+ Credit = increase_credit(C0, maps:size(Checked)),
+ {St, Effs1} = return_all(Meta, S0, Effs,
+ Cid, C0#consumer{credit = Credit}),
+ %% if the consumer was cancelled there is a chance it got
+ %% removed when returning hence we need to be defensive here
+ Waiting = case St#?STATE.consumers of
+ #{Cid := C} ->
+ Waiting0 ++ [{Cid, C}];
+ _ ->
+ Waiting0
+ end,
+ {St#?STATE{consumers = maps:remove(Cid, St#?STATE.consumers),
+ waiting_consumers = Waiting,
+ last_active = Ts},
+ Effs1};
+ (_, _, S) ->
+ S
+ end, {State0, []}, Cons0),
+ WaitingConsumers = update_waiting_consumer_status(Node, State1,
+ suspected_down),
+
+ %% select a new consumer from the waiting queue and run a checkout
+ State2 = State1#?STATE{waiting_consumers = WaitingConsumers},
+ {State, Effects1} = activate_next_consumer(State2, Effects0),
+
+ %% mark any enquers as suspected
+ Enqs = maps:map(fun(P, E) when node(P) =:= Node ->
+ E#enqueuer{status = suspected_down};
+ (_, E) -> E
+ end, Enqs0),
+ Effects = [{monitor, node, Node} | Effects1],
+ checkout(Meta, State0, State#?STATE{enqueuers = Enqs}, Effects);
+apply(#{system_time := Ts} = Meta, {down, Pid, noconnection},
+ #?STATE{consumers = Cons0,
+ enqueuers = Enqs0} = State0) ->
+ %% A node has been disconnected. This doesn't necessarily mean that
+ %% any processes on this node are down, they _may_ come back so here
+ %% we just mark them as suspected (effectively deactivated)
+ %% and return all checked out messages to the main queue for delivery to any
+ %% live consumers
+ %%
+ %% all pids for the disconnected node will be marked as suspected not just
+ %% the one we got the `down' command for
+ Node = node(Pid),
+
+ {State, Effects1} =
+ maps:fold(
+ fun({_, P} = Cid, #consumer{checked_out = Checked0,
+ status = up} = C0,
+ {St0, Eff}) when node(P) =:= Node ->
+ Credit = increase_credit(C0, map_size(Checked0)),
+ C = C0#consumer{status = suspected_down,
+ credit = Credit},
+ {St, Eff0} = return_all(Meta, St0, Eff, Cid, C),
+ Eff1 = consumer_update_active_effects(St, Cid, C, false,
+ suspected_down, Eff0),
+ {St, Eff1};
+ (_, _, {St, Eff}) ->
+ {St, Eff}
+ end, {State0, []}, Cons0),
+ Enqs = maps:map(fun(P, E) when node(P) =:= Node ->
+ E#enqueuer{status = suspected_down};
+ (_, E) -> E
+ end, Enqs0),
+
+ % Monitor the node so that we can "unsuspect" these processes when the node
+ % comes back, then re-issue all monitors and discover the final fate of
+ % these processes
+
+ Effects = case maps:size(State#?STATE.consumers) of
+ 0 ->
+ [{aux, inactive}, {monitor, node, Node}];
+ _ ->
+ [{monitor, node, Node}]
+ end ++ Effects1,
+ checkout(Meta, State0, State#?STATE{enqueuers = Enqs,
+ last_active = Ts}, Effects);
+apply(Meta, {down, Pid, _Info}, State0) ->
+ {State, Effects} = handle_down(Meta, Pid, State0),
+ checkout(Meta, State0, State, Effects);
+apply(Meta, {nodeup, Node}, #?STATE{consumers = Cons0,
+ enqueuers = Enqs0,
+ service_queue = _SQ0} = State0) ->
+ %% A node we are monitoring has come back.
+ %% If we have suspected any processes of being
+ %% down we should now re-issue the monitors for them to detect if they're
+ %% actually down or not
+ Monitors = [{monitor, process, P}
+ || P <- suspected_pids_for(Node, State0)],
+
+ Enqs1 = maps:map(fun(P, E) when node(P) =:= Node ->
+ E#enqueuer{status = up};
+ (_, E) -> E
+ end, Enqs0),
+ ConsumerUpdateActiveFun = consumer_active_flag_update_function(State0),
+ %% mark all consumers as up
+ {State1, Effects1} =
+ maps:fold(fun({_, P} = ConsumerId, C, {SAcc, EAcc})
+ when (node(P) =:= Node) and
+ (C#consumer.status =/= cancelled) ->
+ EAcc1 = ConsumerUpdateActiveFun(SAcc, ConsumerId,
+ C, true, up, EAcc),
+ {update_or_remove_sub(Meta, ConsumerId,
+ C#consumer{status = up},
+ SAcc), EAcc1};
+ (_, _, Acc) ->
+ Acc
+ end, {State0, Monitors}, Cons0),
+ Waiting = update_waiting_consumer_status(Node, State1, up),
+ State2 = State1#?STATE{
+ enqueuers = Enqs1,
+ waiting_consumers = Waiting},
+ {State, Effects} = activate_next_consumer(State2, Effects1),
+ checkout(Meta, State0, State, Effects);
+apply(_, {nodedown, _Node}, State) ->
+ {State, ok};
+apply(#{index := Idx} = Meta, #purge_nodes{nodes = Nodes}, State0) ->
+ {State, Effects} = lists:foldl(fun(Node, {S, E}) ->
+ purge_node(Meta, Node, S, E)
+ end, {State0, []}, Nodes),
+ update_smallest_raft_index(Idx, ok, State, Effects);
+apply(#{index := Idx} = Meta, #update_config{config = Conf}, State0) ->
+ {State, Reply, Effects} = checkout(Meta, State0, update_config(Conf, State0), []),
+ update_smallest_raft_index(Idx, Reply, State, Effects);
+apply(_Meta, {machine_version, 0, 1}, V0State) ->
+ State = convert_v0_to_v1(V0State),
+ {State, ok, []};
+apply(_Meta, Cmd, State) ->
+ %% handle unhandled commands gracefully
+ rabbit_log:debug("rabbit_fifo: unhandled command ~W", [Cmd, 10]),
+ {State, ok, []}.
+
+convert_v0_to_v1(V0State0) ->
+ V0State = rabbit_fifo_v0:normalize_for_v1(V0State0),
+ V0Msgs = rabbit_fifo_v0:get_field(messages, V0State),
+ V1Msgs = lqueue:from_list(lists:sort(maps:to_list(V0Msgs))),
+ V0Enqs = rabbit_fifo_v0:get_field(enqueuers, V0State),
+ V1Enqs = maps:map(
+ fun (_EPid, E) ->
+ #enqueuer{next_seqno = element(2, E),
+ pending = element(3, E),
+ status = element(4, E)}
+ end, V0Enqs),
+ V0Cons = rabbit_fifo_v0:get_field(consumers, V0State),
+ V1Cons = maps:map(
+ fun (_CId, C0) ->
+ %% add the priority field
+ list_to_tuple(tuple_to_list(C0) ++ [0])
+ end, V0Cons),
+ V0SQ = rabbit_fifo_v0:get_field(service_queue, V0State),
+ V1SQ = priority_queue:from_list([{0, C} || C <- queue:to_list(V0SQ)]),
+ Cfg = #cfg{name = rabbit_fifo_v0:get_cfg_field(name, V0State),
+ resource = rabbit_fifo_v0:get_cfg_field(resource, V0State),
+ release_cursor_interval = rabbit_fifo_v0:get_cfg_field(release_cursor_interval, V0State),
+ dead_letter_handler = rabbit_fifo_v0:get_cfg_field(dead_letter_handler, V0State),
+ become_leader_handler = rabbit_fifo_v0:get_cfg_field(become_leader_handler, V0State),
+ %% TODO: what if policy enabling reject_publish was applied before conversion?
+ overflow_strategy = drop_head,
+ max_length = rabbit_fifo_v0:get_cfg_field(max_length, V0State),
+ max_bytes = rabbit_fifo_v0:get_cfg_field(max_bytes, V0State),
+ consumer_strategy = rabbit_fifo_v0:get_cfg_field(consumer_strategy, V0State),
+ delivery_limit = rabbit_fifo_v0:get_cfg_field(delivery_limit, V0State),
+ max_in_memory_length = rabbit_fifo_v0:get_cfg_field(max_in_memory_length, V0State),
+ max_in_memory_bytes = rabbit_fifo_v0:get_cfg_field(max_in_memory_bytes, V0State)
+ },
+
+ #?STATE{cfg = Cfg,
+ messages = V1Msgs,
+ next_msg_num = rabbit_fifo_v0:get_field(next_msg_num, V0State),
+ returns = rabbit_fifo_v0:get_field(returns, V0State),
+ enqueue_count = rabbit_fifo_v0:get_field(enqueue_count, V0State),
+ enqueuers = V1Enqs,
+ ra_indexes = rabbit_fifo_v0:get_field(ra_indexes, V0State),
+ release_cursors = rabbit_fifo_v0:get_field(release_cursors, V0State),
+ consumers = V1Cons,
+ service_queue = V1SQ,
+ prefix_msgs = rabbit_fifo_v0:get_field(prefix_msgs, V0State),
+ msg_bytes_enqueue = rabbit_fifo_v0:get_field(msg_bytes_enqueue, V0State),
+ msg_bytes_checkout = rabbit_fifo_v0:get_field(msg_bytes_checkout, V0State),
+ waiting_consumers = rabbit_fifo_v0:get_field(waiting_consumers, V0State),
+ msg_bytes_in_memory = rabbit_fifo_v0:get_field(msg_bytes_in_memory, V0State),
+ msgs_ready_in_memory = rabbit_fifo_v0:get_field(msgs_ready_in_memory, V0State)
+ }.
+
+purge_node(Meta, Node, State, Effects) ->
+ lists:foldl(fun(Pid, {S0, E0}) ->
+ {S, E} = handle_down(Meta, Pid, S0),
+ {S, E0 ++ E}
+ end, {State, Effects}, all_pids_for(Node, State)).
+
+%% used by v1 -> v2 conversion code
+enqueue_all_pending(#?STATE{enqueuers = Enqs} = State) ->
+ maps:fold(fun(_, #enqueuer{pending = Pend}, Acc) ->
+ lists:foldl(fun ({_, RIdx, RawMsg}, S) ->
+ enqueue(RIdx, RawMsg, S)
+ end, Acc, Pend)
+ end, State, Enqs).
+
+
+%% any downs that re not noconnection
+handle_down(Meta, Pid, #?STATE{consumers = Cons0,
+ enqueuers = Enqs0} = State0) ->
+ % Remove any enqueuer for the same pid and enqueue any pending messages
+ % This should be ok as we won't see any more enqueues from this pid
+ State1 = case maps:take(Pid, Enqs0) of
+ {#enqueuer{pending = Pend}, Enqs} ->
+ lists:foldl(fun ({_, RIdx, RawMsg}, S) ->
+ enqueue(RIdx, RawMsg, S)
+ end, State0#?STATE{enqueuers = Enqs}, Pend);
+ error ->
+ State0
+ end,
+ {Effects1, State2} = handle_waiting_consumer_down(Pid, State1),
+ % return checked out messages to main queue
+ % Find the consumers for the down pid
+ DownConsumers = maps:keys(
+ maps:filter(fun({_, P}, _) -> P =:= Pid end, Cons0)),
+ lists:foldl(fun(ConsumerId, {S, E}) ->
+ cancel_consumer(Meta, ConsumerId, S, E, down)
+ end, {State2, Effects1}, DownConsumers).
+
+consumer_active_flag_update_function(#?STATE{cfg = #cfg{consumer_strategy = competing}}) ->
+ fun(State, ConsumerId, Consumer, Active, ActivityStatus, Effects) ->
+ consumer_update_active_effects(State, ConsumerId, Consumer, Active,
+ ActivityStatus, Effects)
+ end;
+consumer_active_flag_update_function(#?STATE{cfg = #cfg{consumer_strategy = single_active}}) ->
+ fun(_, _, _, _, _, Effects) ->
+ Effects
+ end.
+
+handle_waiting_consumer_down(_Pid,
+ #?STATE{cfg = #cfg{consumer_strategy = competing}} = State) ->
+ {[], State};
+handle_waiting_consumer_down(_Pid,
+ #?STATE{cfg = #cfg{consumer_strategy = single_active},
+ waiting_consumers = []} = State) ->
+ {[], State};
+handle_waiting_consumer_down(Pid,
+ #?STATE{cfg = #cfg{consumer_strategy = single_active},
+ waiting_consumers = WaitingConsumers0} = State0) ->
+ % get cancel effects for down waiting consumers
+ Down = lists:filter(fun({{_, P}, _}) -> P =:= Pid end,
+ WaitingConsumers0),
+ Effects = lists:foldl(fun ({ConsumerId, _}, Effects) ->
+ cancel_consumer_effects(ConsumerId, State0,
+ Effects)
+ end, [], Down),
+ % update state to have only up waiting consumers
+ StillUp = lists:filter(fun({{_, P}, _}) -> P =/= Pid end,
+ WaitingConsumers0),
+ State = State0#?STATE{waiting_consumers = StillUp},
+ {Effects, State}.
+
+update_waiting_consumer_status(Node,
+ #?STATE{waiting_consumers = WaitingConsumers},
+ Status) ->
+ [begin
+ case node(Pid) of
+ Node ->
+ {ConsumerId, Consumer#consumer{status = Status}};
+ _ ->
+ {ConsumerId, Consumer}
+ end
+ end || {{_, Pid} = ConsumerId, Consumer} <- WaitingConsumers,
+ Consumer#consumer.status =/= cancelled].
+
+-spec state_enter(ra_server:ra_state(), state()) -> ra_machine:effects().
+state_enter(leader, #?STATE{consumers = Cons,
+ enqueuers = Enqs,
+ waiting_consumers = WaitingConsumers,
+ cfg = #cfg{name = Name,
+ resource = Resource,
+ become_leader_handler = BLH},
+ prefix_msgs = {0, [], 0, []}
+ }) ->
+ % return effects to monitor all current consumers and enqueuers
+ Pids = lists:usort(maps:keys(Enqs)
+ ++ [P || {_, P} <- maps:keys(Cons)]
+ ++ [P || {{_, P}, _} <- WaitingConsumers]),
+ Mons = [{monitor, process, P} || P <- Pids],
+ Nots = [{send_msg, P, leader_change, ra_event} || P <- Pids],
+ NodeMons = lists:usort([{monitor, node, node(P)} || P <- Pids]),
+ FHReservation = [{mod_call, rabbit_quorum_queue, file_handle_leader_reservation, [Resource]}],
+ Effects = Mons ++ Nots ++ NodeMons ++ FHReservation,
+ case BLH of
+ undefined ->
+ Effects;
+ {Mod, Fun, Args} ->
+ [{mod_call, Mod, Fun, Args ++ [Name]} | Effects]
+ end;
+state_enter(eol, #?STATE{enqueuers = Enqs,
+ consumers = Custs0,
+ waiting_consumers = WaitingConsumers0}) ->
+ Custs = maps:fold(fun({_, P}, V, S) -> S#{P => V} end, #{}, Custs0),
+ WaitingConsumers1 = lists:foldl(fun({{_, P}, V}, Acc) -> Acc#{P => V} end,
+ #{}, WaitingConsumers0),
+ AllConsumers = maps:merge(Custs, WaitingConsumers1),
+ [{send_msg, P, eol, ra_event}
+ || P <- maps:keys(maps:merge(Enqs, AllConsumers))] ++
+ [{aux, eol},
+ {mod_call, rabbit_quorum_queue, file_handle_release_reservation, []}];
+state_enter(State, #?STATE{cfg = #cfg{resource = _Resource}}) when State =/= leader ->
+ FHReservation = {mod_call, rabbit_quorum_queue, file_handle_other_reservation, []},
+ [FHReservation];
+ state_enter(_, _) ->
+ %% catch all as not handling all states
+ [].
+
+
+-spec tick(non_neg_integer(), state()) -> ra_machine:effects().
+tick(Ts, #?STATE{cfg = #cfg{name = Name,
+ resource = QName},
+ msg_bytes_enqueue = EnqueueBytes,
+ msg_bytes_checkout = CheckoutBytes} = State) ->
+ case is_expired(Ts, State) of
+ true ->
+ [{mod_call, rabbit_quorum_queue, spawn_deleter, [QName]}];
+ false ->
+ Metrics = {Name,
+ messages_ready(State),
+ num_checked_out(State), % checked out
+ messages_total(State),
+ query_consumer_count(State), % Consumers
+ EnqueueBytes,
+ CheckoutBytes},
+ [{mod_call, rabbit_quorum_queue,
+ handle_tick, [QName, Metrics, all_nodes(State)]}]
+ end.
+
+-spec overview(state()) -> map().
+overview(#?STATE{consumers = Cons,
+ enqueuers = Enqs,
+ release_cursors = Cursors,
+ enqueue_count = EnqCount,
+ msg_bytes_enqueue = EnqueueBytes,
+ msg_bytes_checkout = CheckoutBytes,
+ ra_indexes = Indexes,
+ cfg = Cfg} = State) ->
+ Conf = #{name => Cfg#cfg.name,
+ resource => Cfg#cfg.resource,
+ release_cursor_interval => Cfg#cfg.release_cursor_interval,
+ dead_lettering_enabled => undefined =/= Cfg#cfg.dead_letter_handler,
+ max_length => Cfg#cfg.max_length,
+ max_bytes => Cfg#cfg.max_bytes,
+ consumer_strategy => Cfg#cfg.consumer_strategy,
+ max_in_memory_length => Cfg#cfg.max_in_memory_length,
+ max_in_memory_bytes => Cfg#cfg.max_in_memory_bytes,
+ expires => Cfg#cfg.expires,
+ delivery_limit => Cfg#cfg.delivery_limit
+ },
+ Smallest = rabbit_fifo_index:smallest(Indexes),
+ #{type => ?STATE,
+ config => Conf,
+ num_consumers => maps:size(Cons),
+ num_checked_out => num_checked_out(State),
+ num_enqueuers => maps:size(Enqs),
+ num_ready_messages => messages_ready(State),
+ num_messages => messages_total(State),
+ num_release_cursors => lqueue:len(Cursors),
+ release_cursors => [I || {_, I, _} <- lqueue:to_list(Cursors)],
+ release_cursor_enqueue_counter => EnqCount,
+ enqueue_message_bytes => EnqueueBytes,
+ checkout_message_bytes => CheckoutBytes,
+ smallest_raft_index => Smallest}.
+
+-spec get_checked_out(consumer_id(), msg_id(), msg_id(), state()) ->
+ [delivery_msg()].
+get_checked_out(Cid, From, To, #?STATE{consumers = Consumers}) ->
+ case Consumers of
+ #{Cid := #consumer{checked_out = Checked}} ->
+ [{K, snd(snd(maps:get(K, Checked)))}
+ || K <- lists:seq(From, To),
+ maps:is_key(K, Checked)];
+ _ ->
+ []
+ end.
+
+-spec version() -> pos_integer().
+version() -> 1.
+
+which_module(0) -> rabbit_fifo_v0;
+which_module(1) -> ?STATE.
+
+-record(aux_gc, {last_raft_idx = 0 :: ra:index()}).
+-record(aux, {name :: atom(),
+ capacity :: term(),
+ gc = #aux_gc{} :: #aux_gc{}}).
+
+init_aux(Name) when is_atom(Name) ->
+ %% TODO: catch specific exception throw if table already exists
+ ok = ra_machine_ets:create_table(rabbit_fifo_usage,
+ [named_table, set, public,
+ {write_concurrency, true}]),
+ Now = erlang:monotonic_time(micro_seconds),
+ #aux{name = Name,
+ capacity = {inactive, Now, 1, 1.0}}.
+
+handle_aux(leader, _, garbage_collection, State, Log, MacState) ->
+ % ra_log_wal:force_roll_over(ra_log_wal),
+ {no_reply, force_eval_gc(Log, MacState, State), Log};
+handle_aux(follower, _, garbage_collection, State, Log, MacState) ->
+ % ra_log_wal:force_roll_over(ra_log_wal),
+ {no_reply, force_eval_gc(Log, MacState, State), Log};
+handle_aux(_RaState, cast, eval, Aux0, Log, _MacState) ->
+ {no_reply, Aux0, Log};
+handle_aux(_RaState, cast, Cmd, #aux{capacity = Use0} = Aux0,
+ Log, _MacState)
+ when Cmd == active orelse Cmd == inactive ->
+ {no_reply, Aux0#aux{capacity = update_use(Use0, Cmd)}, Log};
+handle_aux(_RaState, cast, tick, #aux{name = Name,
+ capacity = Use0} = State0,
+ Log, MacState) ->
+ true = ets:insert(rabbit_fifo_usage,
+ {Name, capacity(Use0)}),
+ Aux = eval_gc(Log, MacState, State0),
+ {no_reply, Aux, Log};
+handle_aux(_RaState, cast, eol, #aux{name = Name} = Aux, Log, _) ->
+ ets:delete(rabbit_fifo_usage, Name),
+ {no_reply, Aux, Log};
+handle_aux(_RaState, {call, _From}, oldest_entry_timestamp, Aux,
+ Log, #?STATE{ra_indexes = Indexes}) ->
+ Ts = case rabbit_fifo_index:smallest(Indexes) of
+ %% if there are no entries, we return current timestamp
+ %% so that any previously obtained entries are considered older than this
+ undefined ->
+ erlang:system_time(millisecond);
+ Idx when is_integer(Idx) ->
+ {{_, _, {_, Meta, _, _}}, _Log1} = ra_log:fetch(Idx, Log),
+ #{ts := Timestamp} = Meta,
+ Timestamp
+ end,
+ {reply, {ok, Ts}, Aux, Log};
+handle_aux(_RaState, {call, _From}, {peek, Pos}, Aux0,
+ Log0, MacState) ->
+ case rabbit_fifo:query_peek(Pos, MacState) of
+ {ok, {Idx, {Header, empty}}} ->
+ %% need to re-hydrate from the log
+ {{_, _, {_, _, Cmd, _}}, Log} = ra_log:fetch(Idx, Log0),
+ #enqueue{msg = Msg} = Cmd,
+ {reply, {ok, {Header, Msg}}, Aux0, Log};
+ {ok, {_Idx, {Header, Msg}}} ->
+ {reply, {ok, {Header, Msg}}, Aux0, Log0};
+ Err ->
+ {reply, Err, Aux0, Log0}
+ end.
+
+
+eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}} = MacState,
+ #aux{gc = #aux_gc{last_raft_idx = LastGcIdx} = Gc} = AuxState) ->
+ {Idx, _} = ra_log:last_index_term(Log),
+ {memory, Mem} = erlang:process_info(self(), memory),
+ case messages_total(MacState) of
+ 0 when Idx > LastGcIdx andalso
+ Mem > ?GC_MEM_LIMIT_B ->
+ garbage_collect(),
+ {memory, MemAfter} = erlang:process_info(self(), memory),
+ rabbit_log:debug("~s: full GC sweep complete. "
+ "Process memory changed from ~.2fMB to ~.2fMB.",
+ [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
+ AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}};
+ _ ->
+ AuxState
+ end.
+
+force_eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}},
+ #aux{gc = #aux_gc{last_raft_idx = LastGcIdx} = Gc} = AuxState) ->
+ {Idx, _} = ra_log:last_index_term(Log),
+ {memory, Mem} = erlang:process_info(self(), memory),
+ case Idx > LastGcIdx of
+ true ->
+ garbage_collect(),
+ {memory, MemAfter} = erlang:process_info(self(), memory),
+ rabbit_log:debug("~s: full GC sweep complete. "
+ "Process memory changed from ~.2fMB to ~.2fMB.",
+ [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
+ AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}};
+ false ->
+ AuxState
+ end.
+
+%%% Queries
+
+query_messages_ready(State) ->
+ messages_ready(State).
+
+query_messages_checked_out(#?STATE{consumers = Consumers}) ->
+ maps:fold(fun (_, #consumer{checked_out = C}, S) ->
+ maps:size(C) + S
+ end, 0, Consumers).
+
+query_messages_total(State) ->
+ messages_total(State).
+
+query_processes(#?STATE{enqueuers = Enqs, consumers = Cons0}) ->
+ Cons = maps:fold(fun({_, P}, V, S) -> S#{P => V} end, #{}, Cons0),
+ maps:keys(maps:merge(Enqs, Cons)).
+
+
+query_ra_indexes(#?STATE{ra_indexes = RaIndexes}) ->
+ RaIndexes.
+
+query_consumer_count(#?STATE{consumers = Consumers,
+ waiting_consumers = WaitingConsumers}) ->
+ Up = maps:filter(fun(_ConsumerId, #consumer{status = Status}) ->
+ Status =/= suspected_down
+ end, Consumers),
+ maps:size(Up) + length(WaitingConsumers).
+
+query_consumers(#?STATE{consumers = Consumers,
+ waiting_consumers = WaitingConsumers,
+ cfg = #cfg{consumer_strategy = ConsumerStrategy}} = State) ->
+ ActiveActivityStatusFun =
+ case ConsumerStrategy of
+ competing ->
+ fun(_ConsumerId,
+ #consumer{status = Status}) ->
+ case Status of
+ suspected_down ->
+ {false, Status};
+ _ ->
+ {true, Status}
+ end
+ end;
+ single_active ->
+ SingleActiveConsumer = query_single_active_consumer(State),
+ fun({Tag, Pid} = _Consumer, _) ->
+ case SingleActiveConsumer of
+ {value, {Tag, Pid}} ->
+ {true, single_active};
+ _ ->
+ {false, waiting}
+ end
+ end
+ end,
+ FromConsumers =
+ maps:fold(fun (_, #consumer{status = cancelled}, Acc) ->
+ Acc;
+ ({Tag, Pid}, #consumer{meta = Meta} = Consumer, Acc) ->
+ {Active, ActivityStatus} =
+ ActiveActivityStatusFun({Tag, Pid}, Consumer),
+ maps:put({Tag, Pid},
+ {Pid, Tag,
+ maps:get(ack, Meta, undefined),
+ maps:get(prefetch, Meta, undefined),
+ Active,
+ ActivityStatus,
+ maps:get(args, Meta, []),
+ maps:get(username, Meta, undefined)},
+ Acc)
+ end, #{}, Consumers),
+ FromWaitingConsumers =
+ lists:foldl(fun ({_, #consumer{status = cancelled}}, Acc) ->
+ Acc;
+ ({{Tag, Pid}, #consumer{meta = Meta} = Consumer}, Acc) ->
+ {Active, ActivityStatus} =
+ ActiveActivityStatusFun({Tag, Pid}, Consumer),
+ maps:put({Tag, Pid},
+ {Pid, Tag,
+ maps:get(ack, Meta, undefined),
+ maps:get(prefetch, Meta, undefined),
+ Active,
+ ActivityStatus,
+ maps:get(args, Meta, []),
+ maps:get(username, Meta, undefined)},
+ Acc)
+ end, #{}, WaitingConsumers),
+ maps:merge(FromConsumers, FromWaitingConsumers).
+
+
+query_single_active_consumer(#?STATE{cfg = #cfg{consumer_strategy = single_active},
+ consumers = Consumers}) ->
+ case maps:size(Consumers) of
+ 0 ->
+ {error, no_value};
+ 1 ->
+ {value, lists:nth(1, maps:keys(Consumers))};
+ _
+ ->
+ {error, illegal_size}
+ end ;
+query_single_active_consumer(_) ->
+ disabled.
+
+query_stat(#?STATE{consumers = Consumers} = State) ->
+ {messages_ready(State), maps:size(Consumers)}.
+
+query_in_memory_usage(#?STATE{msg_bytes_in_memory = Bytes,
+ msgs_ready_in_memory = Length}) ->
+ {Length, Bytes}.
+
+query_peek(Pos, State0) when Pos > 0 ->
+ case take_next_msg(State0) of
+ empty ->
+ {error, no_message_at_pos};
+ {{_Seq, IdxMsg}, _State}
+ when Pos == 1 ->
+ {ok, IdxMsg};
+ {_Msg, State} ->
+ query_peek(Pos-1, State)
+ end.
+
+query_notify_decorators_info(#?STATE{consumers = Consumers} = State) ->
+ MaxActivePriority = maps:fold(fun(_, #consumer{credit = C,
+ status = up,
+ priority = P0}, MaxP) when C > 0 ->
+ P = -P0,
+ case MaxP of
+ empty -> P;
+ MaxP when MaxP > P -> MaxP;
+ _ -> P
+ end;
+ (_, _, MaxP) ->
+ MaxP
+ end, empty, Consumers),
+ IsEmpty = (messages_ready(State) == 0),
+ {MaxActivePriority, IsEmpty}.
+
+-spec usage(atom()) -> float().
+usage(Name) when is_atom(Name) ->
+ case ets:lookup(rabbit_fifo_usage, Name) of
+ [] -> 0.0;
+ [{_, Use}] -> Use
+ end.
+
+%%% Internal
+
+messages_ready(#?STATE{messages = M,
+ prefix_msgs = {RCnt, _R, PCnt, _P},
+ returns = R}) ->
+ %% prefix messages will rarely have anything in them during normal
+ %% operations so length/1 is fine here
+ lqueue:len(M) + lqueue:len(R) + RCnt + PCnt.
+
+messages_total(#?STATE{ra_indexes = I,
+ prefix_msgs = {RCnt, _R, PCnt, _P}}) ->
+ rabbit_fifo_index:size(I) + RCnt + PCnt.
+
+update_use({inactive, _, _, _} = CUInfo, inactive) ->
+ CUInfo;
+update_use({active, _, _} = CUInfo, active) ->
+ CUInfo;
+update_use({active, Since, Avg}, inactive) ->
+ Now = erlang:monotonic_time(micro_seconds),
+ {inactive, Now, Now - Since, Avg};
+update_use({inactive, Since, Active, Avg}, active) ->
+ Now = erlang:monotonic_time(micro_seconds),
+ {active, Now, use_avg(Active, Now - Since, Avg)}.
+
+capacity({active, Since, Avg}) ->
+ use_avg(erlang:monotonic_time(micro_seconds) - Since, 0, Avg);
+capacity({inactive, _, 1, 1.0}) ->
+ 1.0;
+capacity({inactive, Since, Active, Avg}) ->
+ use_avg(Active, erlang:monotonic_time(micro_seconds) - Since, Avg).
+
+use_avg(0, 0, Avg) ->
+ Avg;
+use_avg(Active, Inactive, Avg) ->
+ Time = Inactive + Active,
+ moving_average(Time, ?USE_AVG_HALF_LIFE, Active / Time, Avg).
+
+moving_average(_Time, _, Next, undefined) ->
+ Next;
+moving_average(Time, HalfLife, Next, Current) ->
+ Weight = math:exp(Time * math:log(0.5) / HalfLife),
+ Next * (1 - Weight) + Current * Weight.
+
+num_checked_out(#?STATE{consumers = Cons}) ->
+ maps:fold(fun (_, #consumer{checked_out = C}, Acc) ->
+ maps:size(C) + Acc
+ end, 0, Cons).
+
+cancel_consumer(Meta, ConsumerId,
+ #?STATE{cfg = #cfg{consumer_strategy = competing}} = State,
+ Effects, Reason) ->
+ cancel_consumer0(Meta, ConsumerId, State, Effects, Reason);
+cancel_consumer(Meta, ConsumerId,
+ #?STATE{cfg = #cfg{consumer_strategy = single_active},
+ waiting_consumers = []} = State,
+ Effects, Reason) ->
+ %% single active consumer on, no consumers are waiting
+ cancel_consumer0(Meta, ConsumerId, State, Effects, Reason);
+cancel_consumer(Meta, ConsumerId,
+ #?STATE{consumers = Cons0,
+ cfg = #cfg{consumer_strategy = single_active},
+ waiting_consumers = Waiting0} = State0,
+ Effects0, Reason) ->
+ %% single active consumer on, consumers are waiting
+ case maps:is_key(ConsumerId, Cons0) of
+ true ->
+ % The active consumer is to be removed
+ {State1, Effects1} = cancel_consumer0(Meta, ConsumerId, State0,
+ Effects0, Reason),
+ activate_next_consumer(State1, Effects1);
+ false ->
+ % The cancelled consumer is not active or cancelled
+ % Just remove it from idle_consumers
+ Waiting = lists:keydelete(ConsumerId, 1, Waiting0),
+ Effects = cancel_consumer_effects(ConsumerId, State0, Effects0),
+ % A waiting consumer isn't supposed to have any checked out messages,
+ % so nothing special to do here
+ {State0#?STATE{waiting_consumers = Waiting}, Effects}
+ end.
+
+consumer_update_active_effects(#?STATE{cfg = #cfg{resource = QName}},
+ ConsumerId, #consumer{meta = Meta},
+ Active, ActivityStatus,
+ Effects) ->
+ Ack = maps:get(ack, Meta, undefined),
+ Prefetch = maps:get(prefetch, Meta, undefined),
+ Args = maps:get(args, Meta, []),
+ [{mod_call, rabbit_quorum_queue, update_consumer_handler,
+ [QName, ConsumerId, false, Ack, Prefetch, Active, ActivityStatus, Args]}
+ | Effects].
+
+cancel_consumer0(Meta, ConsumerId,
+ #?STATE{consumers = C0} = S0, Effects0, Reason) ->
+ case C0 of
+ #{ConsumerId := Consumer} ->
+ {S, Effects2} = maybe_return_all(Meta, ConsumerId, Consumer,
+ S0, Effects0, Reason),
+
+ %% The effects are emitted before the consumer is actually removed
+ %% if the consumer has unacked messages. This is a bit weird but
+ %% in line with what classic queues do (from an external point of
+ %% view)
+ Effects = cancel_consumer_effects(ConsumerId, S, Effects2),
+
+ case maps:size(S#?STATE.consumers) of
+ 0 ->
+ {S, [{aux, inactive} | Effects]};
+ _ ->
+ {S, Effects}
+ end;
+ _ ->
+ %% already removed: do nothing
+ {S0, Effects0}
+ end.
+
+activate_next_consumer(#?STATE{consumers = Cons,
+ waiting_consumers = Waiting0} = State0,
+ Effects0) ->
+ case maps:filter(fun (_, #consumer{status = S}) -> S == up end, Cons) of
+ Up when map_size(Up) == 0 ->
+ %% there are no active consumer in the consumer map
+ case lists:filter(fun ({_, #consumer{status = Status}}) ->
+ Status == up
+ end, Waiting0) of
+ [{NextConsumerId, NextConsumer} | _] ->
+ %% there is a potential next active consumer
+ Remaining = lists:keydelete(NextConsumerId, 1, Waiting0),
+ #?STATE{service_queue = ServiceQueue} = State0,
+ ServiceQueue1 = maybe_queue_consumer(NextConsumerId,
+ NextConsumer,
+ ServiceQueue),
+ State = State0#?STATE{consumers = Cons#{NextConsumerId => NextConsumer},
+ service_queue = ServiceQueue1,
+ waiting_consumers = Remaining},
+ Effects = consumer_update_active_effects(State, NextConsumerId,
+ NextConsumer, true,
+ single_active, Effects0),
+ {State, Effects};
+ [] ->
+ {State0, [{aux, inactive} | Effects0]}
+ end;
+ _ ->
+ {State0, Effects0}
+ end.
+
+
+
+maybe_return_all(#{system_time := Ts} = Meta, ConsumerId, Consumer, S0, Effects0, Reason) ->
+ case Reason of
+ consumer_cancel ->
+ {update_or_remove_sub(Meta, ConsumerId,
+ Consumer#consumer{lifetime = once,
+ credit = 0,
+ status = cancelled},
+ S0), Effects0};
+ down ->
+ {S1, Effects1} = return_all(Meta, S0, Effects0, ConsumerId, Consumer),
+ {S1#?STATE{consumers = maps:remove(ConsumerId, S1#?STATE.consumers),
+ last_active = Ts},
+ Effects1}
+ end.
+
+apply_enqueue(#{index := RaftIdx} = Meta, From, Seq, RawMsg, State0) ->
+ case maybe_enqueue(RaftIdx, From, Seq, RawMsg, [], State0) of
+ {ok, State1, Effects1} ->
+ State2 = append_to_master_index(RaftIdx, State1),
+ {State, ok, Effects} = checkout(Meta, State0, State2, Effects1, false),
+ {maybe_store_dehydrated_state(RaftIdx, State), ok, Effects};
+ {duplicate, State, Effects} ->
+ {State, ok, Effects}
+ end.
+
+drop_head(#?STATE{ra_indexes = Indexes0} = State0, Effects0) ->
+ case take_next_msg(State0) of
+ {FullMsg = {_MsgId, {RaftIdxToDrop, {Header, Msg}}},
+ State1} ->
+ Indexes = rabbit_fifo_index:delete(RaftIdxToDrop, Indexes0),
+ State2 = add_bytes_drop(Header, State1#?STATE{ra_indexes = Indexes}),
+ State = case Msg of
+ 'empty' -> State2;
+ _ -> subtract_in_memory_counts(Header, State2)
+ end,
+ Effects = dead_letter_effects(maxlen, #{none => FullMsg},
+ State, Effects0),
+ {State, Effects};
+ {{'$prefix_msg', Header}, State1} ->
+ State2 = subtract_in_memory_counts(Header, add_bytes_drop(Header, State1)),
+ {State2, Effects0};
+ {{'$empty_msg', Header}, State1} ->
+ State2 = add_bytes_drop(Header, State1),
+ {State2, Effects0};
+ empty ->
+ {State0, Effects0}
+ end.
+
+enqueue(RaftIdx, RawMsg, #?STATE{messages = Messages,
+ next_msg_num = NextMsgNum} = State0) ->
+ %% the initial header is an integer only - it will get expanded to a map
+ %% when the next required key is added
+ Header = message_size(RawMsg),
+ {State1, Msg} =
+ case evaluate_memory_limit(Header, State0) of
+ true ->
+ % indexed message with header map
+ {State0,
+ {RaftIdx, {Header, 'empty'}}};
+ false ->
+ {add_in_memory_counts(Header, State0),
+ {RaftIdx, {Header, RawMsg}}} % indexed message with header map
+ end,
+ State = add_bytes_enqueue(Header, State1),
+ State#?STATE{messages = lqueue:in({NextMsgNum, Msg}, Messages),
+ next_msg_num = NextMsgNum + 1}.
+
+append_to_master_index(RaftIdx,
+ #?STATE{ra_indexes = Indexes0} = State0) ->
+ State = incr_enqueue_count(State0),
+ Indexes = rabbit_fifo_index:append(RaftIdx, Indexes0),
+ State#?STATE{ra_indexes = Indexes}.
+
+
+incr_enqueue_count(#?STATE{enqueue_count = EC,
+ cfg = #cfg{release_cursor_interval = {_Base, C}}
+ } = State0) when EC >= C->
+ %% this will trigger a dehydrated version of the state to be stored
+ %% at this raft index for potential future snapshot generation
+ %% Q: Why don't we just stash the release cursor here?
+ %% A: Because it needs to be the very last thing we do and we
+ %% first needs to run the checkout logic.
+ State0#?STATE{enqueue_count = 0};
+incr_enqueue_count(#?STATE{enqueue_count = C} = State) ->
+ State#?STATE{enqueue_count = C + 1}.
+
+maybe_store_dehydrated_state(RaftIdx,
+ #?STATE{cfg =
+ #cfg{release_cursor_interval = {Base, _}}
+ = Cfg,
+ ra_indexes = Indexes,
+ enqueue_count = 0,
+ release_cursors = Cursors0} = State0) ->
+ case rabbit_fifo_index:exists(RaftIdx, Indexes) of
+ false ->
+ %% the incoming enqueue must already have been dropped
+ State0;
+ true ->
+ Interval = case Base of
+ 0 -> 0;
+ _ ->
+ Total = messages_total(State0),
+ min(max(Total, Base), ?RELEASE_CURSOR_EVERY_MAX)
+ end,
+ State = State0#?STATE{cfg = Cfg#cfg{release_cursor_interval =
+ {Base, Interval}}},
+ Dehydrated = dehydrate_state(State),
+ Cursor = {release_cursor, RaftIdx, Dehydrated},
+ Cursors = lqueue:in(Cursor, Cursors0),
+ State#?STATE{release_cursors = Cursors}
+ end;
+maybe_store_dehydrated_state(_RaftIdx, State) ->
+ State.
+
+enqueue_pending(From,
+ #enqueuer{next_seqno = Next,
+ pending = [{Next, RaftIdx, RawMsg} | Pending]} = Enq0,
+ State0) ->
+ State = enqueue(RaftIdx, RawMsg, State0),
+ Enq = Enq0#enqueuer{next_seqno = Next + 1, pending = Pending},
+ enqueue_pending(From, Enq, State);
+enqueue_pending(From, Enq, #?STATE{enqueuers = Enqueuers0} = State) ->
+ State#?STATE{enqueuers = Enqueuers0#{From => Enq}}.
+
+maybe_enqueue(RaftIdx, undefined, undefined, RawMsg, Effects, State0) ->
+ % direct enqueue without tracking
+ State = enqueue(RaftIdx, RawMsg, State0),
+ {ok, State, Effects};
+maybe_enqueue(RaftIdx, From, MsgSeqNo, RawMsg, Effects0,
+ #?STATE{enqueuers = Enqueuers0} = State0) ->
+ case maps:get(From, Enqueuers0, undefined) of
+ undefined ->
+ State1 = State0#?STATE{enqueuers = Enqueuers0#{From => #enqueuer{}}},
+ {ok, State, Effects} = maybe_enqueue(RaftIdx, From, MsgSeqNo,
+ RawMsg, Effects0, State1),
+ {ok, State, [{monitor, process, From} | Effects]};
+ #enqueuer{next_seqno = MsgSeqNo} = Enq0 ->
+ % it is the next expected seqno
+ State1 = enqueue(RaftIdx, RawMsg, State0),
+ Enq = Enq0#enqueuer{next_seqno = MsgSeqNo + 1},
+ State = enqueue_pending(From, Enq, State1),
+ {ok, State, Effects0};
+ #enqueuer{next_seqno = Next,
+ pending = Pending0} = Enq0
+ when MsgSeqNo > Next ->
+ % out of order delivery
+ Pending = [{MsgSeqNo, RaftIdx, RawMsg} | Pending0],
+ Enq = Enq0#enqueuer{pending = lists:sort(Pending)},
+ {ok, State0#?STATE{enqueuers = Enqueuers0#{From => Enq}}, Effects0};
+ #enqueuer{next_seqno = Next} when MsgSeqNo =< Next ->
+ % duplicate delivery - remove the raft index from the ra_indexes
+ % map as it was added earlier
+ {duplicate, State0, Effects0}
+ end.
+
+snd(T) ->
+ element(2, T).
+
+return(#{index := IncomingRaftIdx} = Meta, ConsumerId, Returned,
+ Effects0, State0) ->
+ {State1, Effects1} = maps:fold(
+ fun(MsgId, {Tag, _} = Msg, {S0, E0})
+ when Tag == '$prefix_msg';
+ Tag == '$empty_msg'->
+ return_one(Meta, MsgId, 0, Msg, S0, E0, ConsumerId);
+ (MsgId, {MsgNum, Msg}, {S0, E0}) ->
+ return_one(Meta, MsgId, MsgNum, Msg, S0, E0,
+ ConsumerId)
+ end, {State0, Effects0}, Returned),
+ State2 =
+ case State1#?STATE.consumers of
+ #{ConsumerId := Con0} ->
+ Con = Con0#consumer{credit = increase_credit(Con0,
+ map_size(Returned))},
+ update_or_remove_sub(Meta, ConsumerId, Con, State1);
+ _ ->
+ State1
+ end,
+ {State, ok, Effects} = checkout(Meta, State0, State2, Effects1, false),
+ update_smallest_raft_index(IncomingRaftIdx, State, Effects).
+
+% used to processes messages that are finished
+complete(Meta, ConsumerId, Discarded,
+ #consumer{checked_out = Checked} = Con0, Effects,
+ #?STATE{ra_indexes = Indexes0} = State0) ->
+ %% TODO optimise use of Discarded map here
+ MsgRaftIdxs = [RIdx || {_, {RIdx, _}} <- maps:values(Discarded)],
+ %% credit_mode = simple_prefetch should automatically top-up credit
+ %% as messages are simple_prefetch or otherwise returned
+ Con = Con0#consumer{checked_out = maps:without(maps:keys(Discarded), Checked),
+ credit = increase_credit(Con0, map_size(Discarded))},
+ State1 = update_or_remove_sub(Meta, ConsumerId, Con, State0),
+ Indexes = lists:foldl(fun rabbit_fifo_index:delete/2, Indexes0,
+ MsgRaftIdxs),
+ %% TODO: use maps:fold instead
+ State2 = lists:foldl(fun({_, {_, {Header, _}}}, Acc) ->
+ add_bytes_settle(Header, Acc);
+ ({'$prefix_msg', Header}, Acc) ->
+ add_bytes_settle(Header, Acc);
+ ({'$empty_msg', Header}, Acc) ->
+ add_bytes_settle(Header, Acc)
+ end, State1, maps:values(Discarded)),
+ {State2#?STATE{ra_indexes = Indexes}, Effects}.
+
+increase_credit(#consumer{lifetime = once,
+ credit = Credit}, _) ->
+ %% once consumers cannot increment credit
+ Credit;
+increase_credit(#consumer{lifetime = auto,
+ credit_mode = credited,
+ credit = Credit}, _) ->
+ %% credit_mode: credit also doesn't automatically increment credit
+ Credit;
+increase_credit(#consumer{credit = Current}, Credit) ->
+ Current + Credit.
+
+complete_and_checkout(#{index := IncomingRaftIdx} = Meta, MsgIds, ConsumerId,
+ #consumer{checked_out = Checked0} = Con0,
+ Effects0, State0) ->
+ Discarded = maps:with(MsgIds, Checked0),
+ {State1, Effects1} = complete(Meta, ConsumerId, Discarded, Con0,
+ Effects0, State0),
+ {State, ok, Effects} = checkout(Meta, State0, State1, Effects1, false),
+ update_smallest_raft_index(IncomingRaftIdx, State, Effects).
+
+dead_letter_effects(_Reason, _Discarded,
+ #?STATE{cfg = #cfg{dead_letter_handler = undefined}},
+ Effects) ->
+ Effects;
+dead_letter_effects(Reason, Discarded,
+ #?STATE{cfg = #cfg{dead_letter_handler = {Mod, Fun, Args}}},
+ Effects) ->
+ RaftIdxs = maps:fold(
+ fun (_, {_, {RaftIdx, {_Header, 'empty'}}}, Acc) ->
+ [RaftIdx | Acc];
+ (_, _, Acc) ->
+ Acc
+ end, [], Discarded),
+ [{log, RaftIdxs,
+ fun (Log) ->
+ Lookup = maps:from_list(lists:zip(RaftIdxs, Log)),
+ DeadLetters = maps:fold(
+ fun (_, {_, {RaftIdx, {_Header, 'empty'}}}, Acc) ->
+ {enqueue, _, _, Msg} = maps:get(RaftIdx, Lookup),
+ [{Reason, Msg} | Acc];
+ (_, {_, {_, {_Header, Msg}}}, Acc) ->
+ [{Reason, Msg} | Acc];
+ (_, _, Acc) ->
+ Acc
+ end, [], Discarded),
+ [{mod_call, Mod, Fun, Args ++ [DeadLetters]}]
+ end} | Effects].
+
+cancel_consumer_effects(ConsumerId,
+ #?STATE{cfg = #cfg{resource = QName}} = State, Effects) ->
+ [{mod_call, rabbit_quorum_queue,
+ cancel_consumer_handler, [QName, ConsumerId]},
+ notify_decorators_effect(State) | Effects].
+
+update_smallest_raft_index(Idx, State, Effects) ->
+ update_smallest_raft_index(Idx, ok, State, Effects).
+
+update_smallest_raft_index(IncomingRaftIdx, Reply,
+ #?STATE{cfg = Cfg,
+ ra_indexes = Indexes,
+ release_cursors = Cursors0} = State0,
+ Effects) ->
+ case rabbit_fifo_index:size(Indexes) of
+ 0 ->
+ % there are no messages on queue anymore and no pending enqueues
+ % we can forward release_cursor all the way until
+ % the last received command, hooray
+ %% reset the release cursor interval
+ #cfg{release_cursor_interval = {Base, _}} = Cfg,
+ RCI = {Base, Base},
+ State = State0#?STATE{cfg = Cfg#cfg{release_cursor_interval = RCI},
+ release_cursors = lqueue:new(),
+ enqueue_count = 0},
+ {State, Reply, Effects ++ [{release_cursor, IncomingRaftIdx, State}]};
+ _ ->
+ Smallest = rabbit_fifo_index:smallest(Indexes),
+ case find_next_cursor(Smallest, Cursors0) of
+ {empty, Cursors} ->
+ {State0#?STATE{release_cursors = Cursors}, Reply, Effects};
+ {Cursor, Cursors} ->
+ %% we can emit a release cursor when we've passed the smallest
+ %% release cursor available.
+ {State0#?STATE{release_cursors = Cursors}, Reply,
+ Effects ++ [Cursor]}
+ end
+ end.
+
+find_next_cursor(Idx, Cursors) ->
+ find_next_cursor(Idx, Cursors, empty).
+
+find_next_cursor(Smallest, Cursors0, Potential) ->
+ case lqueue:out(Cursors0) of
+ {{value, {_, Idx, _} = Cursor}, Cursors} when Idx < Smallest ->
+ %% we found one but it may not be the largest one
+ find_next_cursor(Smallest, Cursors, Cursor);
+ _ ->
+ {Potential, Cursors0}
+ end.
+
+update_header(Key, UpdateFun, Default, Header)
+ when is_integer(Header) ->
+ update_header(Key, UpdateFun, Default, #{size => Header});
+update_header(Key, UpdateFun, Default, Header) ->
+ maps:update_with(Key, UpdateFun, Default, Header).
+
+
+return_one(Meta, MsgId, 0, {Tag, Header0},
+ #?STATE{returns = Returns,
+ consumers = Consumers,
+ cfg = #cfg{delivery_limit = DeliveryLimit}} = State0,
+ Effects0, ConsumerId)
+ when Tag == '$prefix_msg'; Tag == '$empty_msg' ->
+ #consumer{checked_out = Checked} = Con0 = maps:get(ConsumerId, Consumers),
+ Header = update_header(delivery_count, fun (C) -> C+1 end, 1, Header0),
+ Msg0 = {Tag, Header},
+ case maps:get(delivery_count, Header) of
+ DeliveryCount when DeliveryCount > DeliveryLimit ->
+ complete(Meta, ConsumerId, #{MsgId => Msg0}, Con0, Effects0, State0);
+ _ ->
+ %% this should not affect the release cursor in any way
+ Con = Con0#consumer{checked_out = maps:remove(MsgId, Checked)},
+ {Msg, State1} = case Tag of
+ '$empty_msg' ->
+ {Msg0, State0};
+ _ -> case evaluate_memory_limit(Header, State0) of
+ true ->
+ {{'$empty_msg', Header}, State0};
+ false ->
+ {Msg0, add_in_memory_counts(Header, State0)}
+ end
+ end,
+ {add_bytes_return(
+ Header,
+ State1#?STATE{consumers = Consumers#{ConsumerId => Con},
+ returns = lqueue:in(Msg, Returns)}),
+ Effects0}
+ end;
+return_one(Meta, MsgId, MsgNum, {RaftId, {Header0, RawMsg}},
+ #?STATE{returns = Returns,
+ consumers = Consumers,
+ cfg = #cfg{delivery_limit = DeliveryLimit}} = State0,
+ Effects0, ConsumerId) ->
+ #consumer{checked_out = Checked} = Con0 = maps:get(ConsumerId, Consumers),
+ Header = update_header(delivery_count, fun (C) -> C+1 end, 1, Header0),
+ Msg0 = {RaftId, {Header, RawMsg}},
+ case maps:get(delivery_count, Header) of
+ DeliveryCount when DeliveryCount > DeliveryLimit ->
+ DlMsg = {MsgNum, Msg0},
+ Effects = dead_letter_effects(delivery_limit, #{none => DlMsg},
+ State0, Effects0),
+ complete(Meta, ConsumerId, #{MsgId => DlMsg}, Con0, Effects, State0);
+ _ ->
+ Con = Con0#consumer{checked_out = maps:remove(MsgId, Checked)},
+ %% this should not affect the release cursor in any way
+ {Msg, State1} = case RawMsg of
+ 'empty' ->
+ {Msg0, State0};
+ _ ->
+ case evaluate_memory_limit(Header, State0) of
+ true ->
+ {{RaftId, {Header, 'empty'}}, State0};
+ false ->
+ {Msg0, add_in_memory_counts(Header, State0)}
+ end
+ end,
+ {add_bytes_return(
+ Header,
+ State1#?STATE{consumers = Consumers#{ConsumerId => Con},
+ returns = lqueue:in({MsgNum, Msg}, Returns)}),
+ Effects0}
+ end.
+
+return_all(Meta, #?STATE{consumers = Cons} = State0, Effects0, ConsumerId,
+ #consumer{checked_out = Checked0} = Con) ->
+ %% need to sort the list so that we return messages in the order
+ %% they were checked out
+ Checked = lists:sort(maps:to_list(Checked0)),
+ State = State0#?STATE{consumers = Cons#{ConsumerId => Con}},
+ lists:foldl(fun ({MsgId, {'$prefix_msg', _} = Msg}, {S, E}) ->
+ return_one(Meta, MsgId, 0, Msg, S, E, ConsumerId);
+ ({MsgId, {'$empty_msg', _} = Msg}, {S, E}) ->
+ return_one(Meta, MsgId, 0, Msg, S, E, ConsumerId);
+ ({MsgId, {MsgNum, Msg}}, {S, E}) ->
+ return_one(Meta, MsgId, MsgNum, Msg, S, E, ConsumerId)
+ end, {State, Effects0}, Checked).
+
+%% checkout new messages to consumers
+checkout(Meta, OldState, State, Effects) ->
+ checkout(Meta, OldState, State, Effects, true).
+
+checkout(#{index := Index} = Meta, #?STATE{cfg = #cfg{resource = QName}} = OldState, State0,
+ Effects0, HandleConsumerChanges) ->
+ {State1, _Result, Effects1} = checkout0(Meta, checkout_one(Meta, State0),
+ Effects0, #{}),
+ case evaluate_limit(Index, false, OldState, State1, Effects1) of
+ {State, true, Effects} ->
+ case maybe_notify_decorators(State, HandleConsumerChanges) of
+ {true, {MaxActivePriority, IsEmpty}} ->
+ NotifyEffect = notify_decorators_effect(QName, MaxActivePriority, IsEmpty),
+ update_smallest_raft_index(Index, State, [NotifyEffect | Effects]);
+ false ->
+ update_smallest_raft_index(Index, State, Effects)
+ end;
+ {State, false, Effects} ->
+ case maybe_notify_decorators(State, HandleConsumerChanges) of
+ {true, {MaxActivePriority, IsEmpty}} ->
+ NotifyEffect = notify_decorators_effect(QName, MaxActivePriority, IsEmpty),
+ {State, ok, [NotifyEffect | Effects]};
+ false ->
+ {State, ok, Effects}
+ end
+ end.
+
+checkout0(Meta, {success, ConsumerId, MsgId, {RaftIdx, {Header, 'empty'}}, State},
+ Effects, SendAcc0) ->
+ DelMsg = {RaftIdx, {MsgId, Header}},
+ SendAcc = maps:update_with(ConsumerId,
+ fun ({InMem, LogMsgs}) ->
+ {InMem, [DelMsg | LogMsgs]}
+ end, {[], [DelMsg]}, SendAcc0),
+ checkout0(Meta, checkout_one(Meta, State), Effects, SendAcc);
+checkout0(Meta, {success, ConsumerId, MsgId, Msg, State}, Effects,
+ SendAcc0) ->
+ DelMsg = {MsgId, Msg},
+ SendAcc = maps:update_with(ConsumerId,
+ fun ({InMem, LogMsgs}) ->
+ {[DelMsg | InMem], LogMsgs}
+ end, {[DelMsg], []}, SendAcc0),
+ checkout0(Meta, checkout_one(Meta, State), Effects, SendAcc);
+checkout0(_Meta, {Activity, State0}, Effects0, SendAcc) ->
+ Effects1 = case Activity of
+ nochange ->
+ append_delivery_effects(Effects0, SendAcc);
+ inactive ->
+ [{aux, inactive}
+ | append_delivery_effects(Effects0, SendAcc)]
+ end,
+ {State0, ok, lists:reverse(Effects1)}.
+
+evaluate_limit(_Index, Result, _BeforeState,
+ #?STATE{cfg = #cfg{max_length = undefined,
+ max_bytes = undefined}} = State,
+ Effects) ->
+ {State, Result, Effects};
+evaluate_limit(Index, Result, BeforeState,
+ #?STATE{cfg = #cfg{overflow_strategy = Strategy},
+ enqueuers = Enqs0} = State0,
+ Effects0) ->
+ case is_over_limit(State0) of
+ true when Strategy == drop_head ->
+ {State, Effects} = drop_head(State0, Effects0),
+ evaluate_limit(Index, true, BeforeState, State, Effects);
+ true when Strategy == reject_publish ->
+ %% generate send_msg effect for each enqueuer to let them know
+ %% they need to block
+ {Enqs, Effects} =
+ maps:fold(
+ fun (P, #enqueuer{blocked = undefined} = E0, {Enqs, Acc}) ->
+ E = E0#enqueuer{blocked = Index},
+ {Enqs#{P => E},
+ [{send_msg, P, {queue_status, reject_publish},
+ [ra_event]} | Acc]};
+ (_P, _E, Acc) ->
+ Acc
+ end, {Enqs0, Effects0}, Enqs0),
+ {State0#?STATE{enqueuers = Enqs}, Result, Effects};
+ false when Strategy == reject_publish ->
+ %% TODO: optimise as this case gets called for every command
+ %% pretty much
+ Before = is_below_soft_limit(BeforeState),
+ case {Before, is_below_soft_limit(State0)} of
+ {false, true} ->
+ %% we have moved below the lower limit which
+ {Enqs, Effects} =
+ maps:fold(
+ fun (P, #enqueuer{} = E0, {Enqs, Acc}) ->
+ E = E0#enqueuer{blocked = undefined},
+ {Enqs#{P => E},
+ [{send_msg, P, {queue_status, go}, [ra_event]}
+ | Acc]};
+ (_P, _E, Acc) ->
+ Acc
+ end, {Enqs0, Effects0}, Enqs0),
+ {State0#?STATE{enqueuers = Enqs}, Result, Effects};
+ _ ->
+ {State0, Result, Effects0}
+ end;
+ false ->
+ {State0, Result, Effects0}
+ end.
+
+evaluate_memory_limit(_Header,
+ #?STATE{cfg = #cfg{max_in_memory_length = undefined,
+ max_in_memory_bytes = undefined}}) ->
+ false;
+evaluate_memory_limit(#{size := Size}, State) ->
+ evaluate_memory_limit(Size, State);
+evaluate_memory_limit(Size,
+ #?STATE{cfg = #cfg{max_in_memory_length = MaxLength,
+ max_in_memory_bytes = MaxBytes},
+ msg_bytes_in_memory = Bytes,
+ msgs_ready_in_memory = Length})
+ when is_integer(Size) ->
+ (Length >= MaxLength) orelse ((Bytes + Size) > MaxBytes).
+
+append_delivery_effects(Effects0, AccMap) when map_size(AccMap) == 0 ->
+ %% does this ever happen?
+ Effects0;
+append_delivery_effects(Effects0, AccMap) ->
+ [{aux, active} |
+ maps:fold(fun (C, {InMemMsgs, LogMsgs}, Ef) ->
+ [delivery_effect(C, lists:reverse(LogMsgs), InMemMsgs) | Ef]
+ end, Effects0, AccMap)].
+
+%% next message is determined as follows:
+%% First we check if there are are prefex returns
+%% Then we check if there are current returns
+%% then we check prefix msgs
+%% then we check current messages
+%%
+%% When we return it is always done to the current return queue
+%% for both prefix messages and current messages
+take_next_msg(#?STATE{prefix_msgs = {R, P}} = State) ->
+ %% conversion
+ take_next_msg(State#?STATE{prefix_msgs = {length(R), R, length(P), P}});
+take_next_msg(#?STATE{prefix_msgs = {NumR, [{'$empty_msg', _} = Msg | Rem],
+ NumP, P}} = State) ->
+ %% there are prefix returns, these should be served first
+ {Msg, State#?STATE{prefix_msgs = {NumR-1, Rem, NumP, P}}};
+take_next_msg(#?STATE{prefix_msgs = {NumR, [Header | Rem], NumP, P}} = State) ->
+ %% there are prefix returns, these should be served first
+ {{'$prefix_msg', Header},
+ State#?STATE{prefix_msgs = {NumR-1, Rem, NumP, P}}};
+take_next_msg(#?STATE{returns = Returns,
+ messages = Messages0,
+ prefix_msgs = {NumR, R, NumP, P}} = State) ->
+ %% use peek rather than out there as the most likely case is an empty
+ %% queue
+ case lqueue:peek(Returns) of
+ {value, NextMsg} ->
+ {NextMsg,
+ State#?STATE{returns = lqueue:drop(Returns)}};
+ empty when P == [] ->
+ case lqueue:out(Messages0) of
+ {empty, _} ->
+ empty;
+ {{value, {_, _} = SeqMsg}, Messages} ->
+ {SeqMsg, State#?STATE{messages = Messages }}
+ end;
+ empty ->
+ [Msg | Rem] = P,
+ case Msg of
+ {Header, 'empty'} ->
+ %% There are prefix msgs
+ {{'$empty_msg', Header},
+ State#?STATE{prefix_msgs = {NumR, R, NumP-1, Rem}}};
+ Header ->
+ {{'$prefix_msg', Header},
+ State#?STATE{prefix_msgs = {NumR, R, NumP-1, Rem}}}
+ end
+ end.
+
+delivery_effect({CTag, CPid}, [], InMemMsgs) ->
+ {send_msg, CPid, {delivery, CTag, lists:reverse(InMemMsgs)},
+ [local, ra_event]};
+delivery_effect({CTag, CPid}, IdxMsgs, InMemMsgs) ->
+ {RaftIdxs, Data} = lists:unzip(IdxMsgs),
+ {log, RaftIdxs,
+ fun(Log) ->
+ Msgs0 = lists:zipwith(fun ({enqueue, _, _, Msg}, {MsgId, Header}) ->
+ {MsgId, {Header, Msg}}
+ end, Log, Data),
+ Msgs = case InMemMsgs of
+ [] ->
+ Msgs0;
+ _ ->
+ lists:sort(InMemMsgs ++ Msgs0)
+ end,
+ [{send_msg, CPid, {delivery, CTag, Msgs}, [local, ra_event]}]
+ end,
+ {local, node(CPid)}}.
+
+reply_log_effect(RaftIdx, MsgId, Header, Ready, From) ->
+ {log, [RaftIdx],
+ fun([{enqueue, _, _, Msg}]) ->
+ [{reply, From, {wrap_reply,
+ {dequeue, {MsgId, {Header, Msg}}, Ready}}}]
+ end}.
+
+checkout_one(Meta, #?STATE{service_queue = SQ0,
+ messages = Messages0,
+ consumers = Cons0} = InitState) ->
+ case priority_queue:out(SQ0) of
+ {{value, ConsumerId}, SQ1}
+ when is_map_key(ConsumerId, Cons0) ->
+ case take_next_msg(InitState) of
+ {ConsumerMsg, State0} ->
+ %% there are consumers waiting to be serviced
+ %% process consumer checkout
+ case maps:get(ConsumerId, Cons0) of
+ #consumer{credit = 0} ->
+ %% no credit but was still on queue
+ %% can happen when draining
+ %% recurse without consumer on queue
+ checkout_one(Meta, InitState#?STATE{service_queue = SQ1});
+ #consumer{status = cancelled} ->
+ checkout_one(Meta, InitState#?STATE{service_queue = SQ1});
+ #consumer{status = suspected_down} ->
+ checkout_one(Meta, InitState#?STATE{service_queue = SQ1});
+ #consumer{checked_out = Checked0,
+ next_msg_id = Next,
+ credit = Credit,
+ delivery_count = DelCnt} = Con0 ->
+ Checked = maps:put(Next, ConsumerMsg, Checked0),
+ Con = Con0#consumer{checked_out = Checked,
+ next_msg_id = Next + 1,
+ credit = Credit - 1,
+ delivery_count = DelCnt + 1},
+ State1 = update_or_remove_sub(Meta,
+ ConsumerId, Con,
+ State0#?STATE{service_queue = SQ1}),
+ {State, Msg} =
+ case ConsumerMsg of
+ {'$prefix_msg', Header} ->
+ {subtract_in_memory_counts(
+ Header, add_bytes_checkout(Header, State1)),
+ ConsumerMsg};
+ {'$empty_msg', Header} ->
+ {add_bytes_checkout(Header, State1),
+ ConsumerMsg};
+ {_, {_, {Header, 'empty'}} = M} ->
+ {add_bytes_checkout(Header, State1),
+ M};
+ {_, {_, {Header, _} = M}} ->
+ {subtract_in_memory_counts(
+ Header,
+ add_bytes_checkout(Header, State1)),
+ M}
+ end,
+ {success, ConsumerId, Next, Msg, State}
+ end;
+ empty ->
+ {nochange, InitState}
+ end;
+ {{value, _ConsumerId}, SQ1} ->
+ %% consumer did not exist but was queued, recurse
+ checkout_one(Meta, InitState#?STATE{service_queue = SQ1});
+ {empty, _} ->
+ case lqueue:len(Messages0) of
+ 0 -> {nochange, InitState};
+ _ -> {inactive, InitState}
+ end
+ end.
+
+update_or_remove_sub(_Meta, ConsumerId, #consumer{lifetime = auto,
+ credit = 0} = Con,
+ #?STATE{consumers = Cons} = State) ->
+ State#?STATE{consumers = maps:put(ConsumerId, Con, Cons)};
+update_or_remove_sub(_Meta, ConsumerId, #consumer{lifetime = auto} = Con,
+ #?STATE{consumers = Cons,
+ service_queue = ServiceQueue} = State) ->
+ State#?STATE{consumers = maps:put(ConsumerId, Con, Cons),
+ service_queue = uniq_queue_in(ConsumerId, Con, ServiceQueue)};
+update_or_remove_sub(#{system_time := Ts},
+ ConsumerId, #consumer{lifetime = once,
+ checked_out = Checked,
+ credit = 0} = Con,
+ #?STATE{consumers = Cons} = State) ->
+ case maps:size(Checked) of
+ 0 ->
+ % we're done with this consumer
+ State#?STATE{consumers = maps:remove(ConsumerId, Cons),
+ last_active = Ts};
+ _ ->
+ % there are unsettled items so need to keep around
+ State#?STATE{consumers = maps:put(ConsumerId, Con, Cons)}
+ end;
+update_or_remove_sub(_Meta, ConsumerId, #consumer{lifetime = once} = Con,
+ #?STATE{consumers = Cons,
+ service_queue = ServiceQueue} = State) ->
+ State#?STATE{consumers = maps:put(ConsumerId, Con, Cons),
+ service_queue = uniq_queue_in(ConsumerId, Con, ServiceQueue)}.
+
+uniq_queue_in(Key, #consumer{priority = P}, Queue) ->
+ % TODO: queue:member could surely be quite expensive, however the practical
+ % number of unique consumers may not be large enough for it to matter
+ case priority_queue:member(Key, Queue) of
+ true ->
+ Queue;
+ false ->
+ priority_queue:in(Key, P, Queue)
+ end.
+
+update_consumer(ConsumerId, Meta, Spec, Priority,
+ #?STATE{cfg = #cfg{consumer_strategy = competing}} = State0) ->
+ %% general case, single active consumer off
+ update_consumer0(ConsumerId, Meta, Spec, Priority, State0);
+update_consumer(ConsumerId, Meta, Spec, Priority,
+ #?STATE{consumers = Cons0,
+ cfg = #cfg{consumer_strategy = single_active}} = State0)
+ when map_size(Cons0) == 0 ->
+ %% single active consumer on, no one is consuming yet
+ update_consumer0(ConsumerId, Meta, Spec, Priority, State0);
+update_consumer(ConsumerId, Meta, {Life, Credit, Mode}, Priority,
+ #?STATE{cfg = #cfg{consumer_strategy = single_active},
+ waiting_consumers = WaitingConsumers0} = State0) ->
+ %% single active consumer on and one active consumer already
+ %% adding the new consumer to the waiting list
+ Consumer = #consumer{lifetime = Life, meta = Meta,
+ priority = Priority,
+ credit = Credit, credit_mode = Mode},
+ WaitingConsumers1 = WaitingConsumers0 ++ [{ConsumerId, Consumer}],
+ State0#?STATE{waiting_consumers = WaitingConsumers1}.
+
+update_consumer0(ConsumerId, Meta, {Life, Credit, Mode}, Priority,
+ #?STATE{consumers = Cons0,
+ service_queue = ServiceQueue0} = State0) ->
+ %% TODO: this logic may not be correct for updating a pre-existing consumer
+ Init = #consumer{lifetime = Life, meta = Meta,
+ priority = Priority,
+ credit = Credit, credit_mode = Mode},
+ Cons = maps:update_with(ConsumerId,
+ fun(S) ->
+ %% remove any in-flight messages from
+ %% the credit update
+ N = maps:size(S#consumer.checked_out),
+ C = max(0, Credit - N),
+ S#consumer{lifetime = Life, credit = C}
+ end, Init, Cons0),
+ ServiceQueue = maybe_queue_consumer(ConsumerId, maps:get(ConsumerId, Cons),
+ ServiceQueue0),
+ State0#?STATE{consumers = Cons, service_queue = ServiceQueue}.
+
+maybe_queue_consumer(ConsumerId, #consumer{credit = Credit} = Con,
+ ServiceQueue0) ->
+ case Credit > 0 of
+ true ->
+ % consumerect needs service - check if already on service queue
+ uniq_queue_in(ConsumerId, Con, ServiceQueue0);
+ false ->
+ ServiceQueue0
+ end.
+
+%% creates a dehydrated version of the current state to be cached and
+%% potentially used to for a snaphot at a later point
+dehydrate_state(#?STATE{messages = Messages,
+ consumers = Consumers,
+ returns = Returns,
+ prefix_msgs = {PRCnt, PrefRet0, PPCnt, PrefMsg0},
+ waiting_consumers = Waiting0} = State) ->
+ RCnt = lqueue:len(Returns),
+ %% TODO: optimise this function as far as possible
+ PrefRet1 = lists:foldr(fun ({'$prefix_msg', Header}, Acc) ->
+ [Header | Acc];
+ ({'$empty_msg', _} = Msg, Acc) ->
+ [Msg | Acc];
+ ({_, {_, {Header, 'empty'}}}, Acc) ->
+ [{'$empty_msg', Header} | Acc];
+ ({_, {_, {Header, _}}}, Acc) ->
+ [Header | Acc]
+ end,
+ [],
+ lqueue:to_list(Returns)),
+ PrefRet = PrefRet0 ++ PrefRet1,
+ PrefMsgsSuff = dehydrate_messages(Messages, []),
+ %% prefix messages are not populated in normal operation only after
+ %% recovering from a snapshot
+ PrefMsgs = PrefMsg0 ++ PrefMsgsSuff,
+ Waiting = [{Cid, dehydrate_consumer(C)} || {Cid, C} <- Waiting0],
+ State#?STATE{messages = lqueue:new(),
+ ra_indexes = rabbit_fifo_index:empty(),
+ release_cursors = lqueue:new(),
+ consumers = maps:map(fun (_, C) ->
+ dehydrate_consumer(C)
+ end, Consumers),
+ returns = lqueue:new(),
+ prefix_msgs = {PRCnt + RCnt, PrefRet,
+ PPCnt + lqueue:len(Messages), PrefMsgs},
+ waiting_consumers = Waiting}.
+
+%% TODO make body recursive to avoid allocating lists:reverse call
+dehydrate_messages(Msgs0, Acc0) ->
+ {OutRes, Msgs} = lqueue:out(Msgs0),
+ case OutRes of
+ {value, {_MsgId, {_RaftId, {_, 'empty'} = Msg}}} ->
+ dehydrate_messages(Msgs, [Msg | Acc0]);
+ {value, {_MsgId, {_RaftId, {Header, _}}}} ->
+ dehydrate_messages(Msgs, [Header | Acc0]);
+ empty ->
+ lists:reverse(Acc0)
+ end.
+
+dehydrate_consumer(#consumer{checked_out = Checked0} = Con) ->
+ Checked = maps:map(fun (_, {'$prefix_msg', _} = M) ->
+ M;
+ (_, {'$empty_msg', _} = M) ->
+ M;
+ (_, {_, {_, {Header, 'empty'}}}) ->
+ {'$empty_msg', Header};
+ (_, {_, {_, {Header, _}}}) ->
+ {'$prefix_msg', Header}
+ end, Checked0),
+ Con#consumer{checked_out = Checked}.
+
+%% make the state suitable for equality comparison
+normalize(#?STATE{messages = Messages,
+ release_cursors = Cursors} = State) ->
+ State#?STATE{messages = lqueue:from_list(lqueue:to_list(Messages)),
+ release_cursors = lqueue:from_list(lqueue:to_list(Cursors))}.
+
+is_over_limit(#?STATE{cfg = #cfg{max_length = undefined,
+ max_bytes = undefined}}) ->
+ false;
+is_over_limit(#?STATE{cfg = #cfg{max_length = MaxLength,
+ max_bytes = MaxBytes},
+ msg_bytes_enqueue = BytesEnq} = State) ->
+ messages_ready(State) > MaxLength orelse (BytesEnq > MaxBytes).
+
+is_below_soft_limit(#?STATE{cfg = #cfg{max_length = undefined,
+ max_bytes = undefined}}) ->
+ false;
+is_below_soft_limit(#?STATE{cfg = #cfg{max_length = MaxLength,
+ max_bytes = MaxBytes},
+ msg_bytes_enqueue = BytesEnq} = State) ->
+ is_below(MaxLength, messages_ready(State)) andalso
+ is_below(MaxBytes, BytesEnq).
+
+is_below(undefined, _Num) ->
+ true;
+is_below(Val, Num) when is_integer(Val) andalso is_integer(Num) ->
+ Num =< trunc(Val * ?LOW_LIMIT).
+
+-spec make_enqueue(option(pid()), option(msg_seqno()), raw_msg()) -> protocol().
+make_enqueue(Pid, Seq, Msg) ->
+ #enqueue{pid = Pid, seq = Seq, msg = Msg}.
+
+-spec make_register_enqueuer(pid()) -> protocol().
+make_register_enqueuer(Pid) ->
+ #register_enqueuer{pid = Pid}.
+
+-spec make_checkout(consumer_id(),
+ checkout_spec(), consumer_meta()) -> protocol().
+make_checkout(ConsumerId, Spec, Meta) ->
+ #checkout{consumer_id = ConsumerId,
+ spec = Spec, meta = Meta}.
+
+-spec make_settle(consumer_id(), [msg_id()]) -> protocol().
+make_settle(ConsumerId, MsgIds) when is_list(MsgIds) ->
+ #settle{consumer_id = ConsumerId, msg_ids = MsgIds}.
+
+-spec make_return(consumer_id(), [msg_id()]) -> protocol().
+make_return(ConsumerId, MsgIds) ->
+ #return{consumer_id = ConsumerId, msg_ids = MsgIds}.
+
+-spec make_discard(consumer_id(), [msg_id()]) -> protocol().
+make_discard(ConsumerId, MsgIds) ->
+ #discard{consumer_id = ConsumerId, msg_ids = MsgIds}.
+
+-spec make_credit(consumer_id(), non_neg_integer(), non_neg_integer(),
+ boolean()) -> protocol().
+make_credit(ConsumerId, Credit, DeliveryCount, Drain) ->
+ #credit{consumer_id = ConsumerId,
+ credit = Credit,
+ delivery_count = DeliveryCount,
+ drain = Drain}.
+
+-spec make_purge() -> protocol().
+make_purge() -> #purge{}.
+
+-spec make_garbage_collection() -> protocol().
+make_garbage_collection() -> #garbage_collection{}.
+
+-spec make_purge_nodes([node()]) -> protocol().
+make_purge_nodes(Nodes) ->
+ #purge_nodes{nodes = Nodes}.
+
+-spec make_update_config(config()) -> protocol().
+make_update_config(Config) ->
+ #update_config{config = Config}.
+
+add_bytes_enqueue(Bytes,
+ #?STATE{msg_bytes_enqueue = Enqueue} = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_enqueue = Enqueue + Bytes};
+add_bytes_enqueue(#{size := Bytes}, State) ->
+ add_bytes_enqueue(Bytes, State).
+
+add_bytes_drop(Bytes,
+ #?STATE{msg_bytes_enqueue = Enqueue} = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_enqueue = Enqueue - Bytes};
+add_bytes_drop(#{size := Bytes}, State) ->
+ add_bytes_drop(Bytes, State).
+
+add_bytes_checkout(Bytes,
+ #?STATE{msg_bytes_checkout = Checkout,
+ msg_bytes_enqueue = Enqueue } = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_checkout = Checkout + Bytes,
+ msg_bytes_enqueue = Enqueue - Bytes};
+add_bytes_checkout(#{size := Bytes}, State) ->
+ add_bytes_checkout(Bytes, State).
+
+add_bytes_settle(Bytes,
+ #?STATE{msg_bytes_checkout = Checkout} = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_checkout = Checkout - Bytes};
+add_bytes_settle(#{size := Bytes}, State) ->
+ add_bytes_settle(Bytes, State).
+
+add_bytes_return(Bytes,
+ #?STATE{msg_bytes_checkout = Checkout,
+ msg_bytes_enqueue = Enqueue} = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_checkout = Checkout - Bytes,
+ msg_bytes_enqueue = Enqueue + Bytes};
+add_bytes_return(#{size := Bytes}, State) ->
+ add_bytes_return(Bytes, State).
+
+add_in_memory_counts(Bytes,
+ #?STATE{msg_bytes_in_memory = InMemoryBytes,
+ msgs_ready_in_memory = InMemoryCount} = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_in_memory = InMemoryBytes + Bytes,
+ msgs_ready_in_memory = InMemoryCount + 1};
+add_in_memory_counts(#{size := Bytes}, State) ->
+ add_in_memory_counts(Bytes, State).
+
+subtract_in_memory_counts(Bytes,
+ #?STATE{msg_bytes_in_memory = InMemoryBytes,
+ msgs_ready_in_memory = InMemoryCount} = State)
+ when is_integer(Bytes) ->
+ State#?STATE{msg_bytes_in_memory = InMemoryBytes - Bytes,
+ msgs_ready_in_memory = InMemoryCount - 1};
+subtract_in_memory_counts(#{size := Bytes}, State) ->
+ subtract_in_memory_counts(Bytes, State).
+
+message_size(#basic_message{content = Content}) ->
+ #content{payload_fragments_rev = PFR} = Content,
+ iolist_size(PFR);
+message_size({'$prefix_msg', H}) ->
+ get_size_from_header(H);
+message_size({'$empty_msg', H}) ->
+ get_size_from_header(H);
+message_size(B) when is_binary(B) ->
+ byte_size(B);
+message_size(Msg) ->
+ %% probably only hit this for testing so ok to use erts_debug
+ erts_debug:size(Msg).
+
+get_size_from_header(Size) when is_integer(Size) ->
+ Size;
+get_size_from_header(#{size := B}) ->
+ B.
+
+
+all_nodes(#?STATE{consumers = Cons0,
+ enqueuers = Enqs0,
+ waiting_consumers = WaitingConsumers0}) ->
+ Nodes0 = maps:fold(fun({_, P}, _, Acc) ->
+ Acc#{node(P) => ok}
+ end, #{}, Cons0),
+ Nodes1 = maps:fold(fun(P, _, Acc) ->
+ Acc#{node(P) => ok}
+ end, Nodes0, Enqs0),
+ maps:keys(
+ lists:foldl(fun({{_, P}, _}, Acc) ->
+ Acc#{node(P) => ok}
+ end, Nodes1, WaitingConsumers0)).
+
+all_pids_for(Node, #?STATE{consumers = Cons0,
+ enqueuers = Enqs0,
+ waiting_consumers = WaitingConsumers0}) ->
+ Cons = maps:fold(fun({_, P}, _, Acc)
+ when node(P) =:= Node ->
+ [P | Acc];
+ (_, _, Acc) -> Acc
+ end, [], Cons0),
+ Enqs = maps:fold(fun(P, _, Acc)
+ when node(P) =:= Node ->
+ [P | Acc];
+ (_, _, Acc) -> Acc
+ end, Cons, Enqs0),
+ lists:foldl(fun({{_, P}, _}, Acc)
+ when node(P) =:= Node ->
+ [P | Acc];
+ (_, Acc) -> Acc
+ end, Enqs, WaitingConsumers0).
+
+suspected_pids_for(Node, #?STATE{consumers = Cons0,
+ enqueuers = Enqs0,
+ waiting_consumers = WaitingConsumers0}) ->
+ Cons = maps:fold(fun({_, P}, #consumer{status = suspected_down}, Acc)
+ when node(P) =:= Node ->
+ [P | Acc];
+ (_, _, Acc) -> Acc
+ end, [], Cons0),
+ Enqs = maps:fold(fun(P, #enqueuer{status = suspected_down}, Acc)
+ when node(P) =:= Node ->
+ [P | Acc];
+ (_, _, Acc) -> Acc
+ end, Cons, Enqs0),
+ lists:foldl(fun({{_, P},
+ #consumer{status = suspected_down}}, Acc)
+ when node(P) =:= Node ->
+ [P | Acc];
+ (_, Acc) -> Acc
+ end, Enqs, WaitingConsumers0).
+
+is_expired(Ts, #?STATE{cfg = #cfg{expires = Expires},
+ last_active = LastActive,
+ consumers = Consumers})
+ when is_number(LastActive) andalso is_number(Expires) ->
+ %% TODO: should it be active consumers?
+ Active = maps:filter(fun (_, #consumer{status = suspected_down}) ->
+ false;
+ (_, _) ->
+ true
+ end, Consumers),
+
+ Ts > (LastActive + Expires) andalso maps:size(Active) == 0;
+is_expired(_Ts, _State) ->
+ false.
+
+get_priority_from_args(#{args := Args}) ->
+ case rabbit_misc:table_lookup(Args, <<"x-priority">>) of
+ {_Key, Value} ->
+ Value;
+ _ -> 0
+ end;
+get_priority_from_args(_) ->
+ 0.
+
+maybe_notify_decorators(_, false) ->
+ false;
+maybe_notify_decorators(State, _) ->
+ {true, query_notify_decorators_info(State)}.
+
+notify_decorators_effect(#?STATE{cfg = #cfg{resource = QName}} = State) ->
+ {MaxActivePriority, IsEmpty} = query_notify_decorators_info(State),
+ notify_decorators_effect(QName, MaxActivePriority, IsEmpty).
+
+notify_decorators_effect(QName, MaxActivePriority, IsEmpty) ->
+ {mod_call, rabbit_quorum_queue, spawn_notify_decorators,
+ [QName, consumer_state_changed, [MaxActivePriority, IsEmpty]]}.
+
+get_field(Field, State) ->
+ Fields = record_info(fields, ?STATE),
+ Index = record_index_of(Field, Fields),
+ element(Index, State).
+
+get_cfg_field(Field, #?STATE{cfg = Cfg} ) ->
+ Fields = record_info(fields, cfg),
+ Index = record_index_of(Field, Fields),
+ element(Index, Cfg).
+
+record_index_of(F, Fields) ->
+ index_of(2, F, Fields).
+
+index_of(_, F, []) ->
+ exit({field_not_found, F});
+index_of(N, F, [F | _]) ->
+ N;
+index_of(N, F, [_ | T]) ->
+ index_of(N+1, F, T).
diff --git a/deps/rabbit/src/rabbit_file.erl b/deps/rabbit/src/rabbit_file.erl
index 2060c354c5..50d4caa982 100644
--- a/deps/rabbit/src/rabbit_file.erl
+++ b/deps/rabbit/src/rabbit_file.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_file).
diff --git a/deps/rabbit/src/rabbit_framing.erl b/deps/rabbit/src/rabbit_framing.erl
index 6ff80120ae..f4518eb6e7 100644
--- a/deps/rabbit/src/rabbit_framing.erl
+++ b/deps/rabbit/src/rabbit_framing.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% TODO auto-generate
diff --git a/deps/rabbit/src/rabbit_global_counters.erl b/deps/rabbit/src/rabbit_global_counters.erl
index 2689cca0e7..07caa7b696 100644
--- a/deps/rabbit/src/rabbit_global_counters.erl
+++ b/deps/rabbit/src/rabbit_global_counters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_global_counters).
diff --git a/deps/rabbit/src/rabbit_guid.erl b/deps/rabbit/src/rabbit_guid.erl
index c71321d4d3..8bcae2d478 100644
--- a/deps/rabbit/src/rabbit_guid.erl
+++ b/deps/rabbit/src/rabbit_guid.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_guid).
diff --git a/deps/rabbit/src/rabbit_health_check.erl b/deps/rabbit/src/rabbit_health_check.erl
index b04c4f9853..e3499c447f 100644
--- a/deps/rabbit/src/rabbit_health_check.erl
+++ b/deps/rabbit/src/rabbit_health_check.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_health_check).
diff --git a/deps/rabbit/src/rabbit_limiter.erl b/deps/rabbit/src/rabbit_limiter.erl
index 93946836eb..5170fd99a8 100644
--- a/deps/rabbit/src/rabbit_limiter.erl
+++ b/deps/rabbit/src/rabbit_limiter.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% The purpose of the limiter is to stem the flow of messages from
diff --git a/deps/rabbit/src/rabbit_log_tail.erl b/deps/rabbit/src/rabbit_log_tail.erl
index ccf48a9136..d2f6572979 100644
--- a/deps/rabbit/src/rabbit_log_tail.erl
+++ b/deps/rabbit/src/rabbit_log_tail.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_log_tail).
diff --git a/deps/rabbit/src/rabbit_looking_glass.erl b/deps/rabbit/src/rabbit_looking_glass.erl
index 855d0adf49..402de3bcc1 100644
--- a/deps/rabbit/src/rabbit_looking_glass.erl
+++ b/deps/rabbit/src/rabbit_looking_glass.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_looking_glass).
diff --git a/deps/rabbit/src/rabbit_maintenance.erl b/deps/rabbit/src/rabbit_maintenance.erl
index 3f961e45a6..8ed425e3d5 100644
--- a/deps/rabbit/src/rabbit_maintenance.erl
+++ b/deps/rabbit/src/rabbit_maintenance.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_maintenance).
diff --git a/deps/rabbit/src/rabbit_memory_monitor.erl b/deps/rabbit/src/rabbit_memory_monitor.erl
index 1b1c47c3fb..c257f16782 100644
--- a/deps/rabbit/src/rabbit_memory_monitor.erl
+++ b/deps/rabbit/src/rabbit_memory_monitor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
diff --git a/deps/rabbit/src/rabbit_metrics.erl b/deps/rabbit/src/rabbit_metrics.erl
index 27c2b57cde..daa49f67ea 100644
--- a/deps/rabbit/src/rabbit_metrics.erl
+++ b/deps/rabbit/src/rabbit_metrics.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_metrics).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_coordinator.erl b/deps/rabbit/src/rabbit_mirror_queue_coordinator.erl
index 00c1b62e93..dd1dc4d843 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_coordinator.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_coordinator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_coordinator).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_master.erl b/deps/rabbit/src/rabbit_mirror_queue_master.erl
index 370a11af2b..59f9d9d6be 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_master.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_master.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_master).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_misc.erl b/deps/rabbit/src/rabbit_mirror_queue_misc.erl
index 7775489309..f6a35fda7e 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_misc.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_misc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_misc).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_mode.erl b/deps/rabbit/src/rabbit_mirror_queue_mode.erl
index 78c1aad8e1..46aad6bf88 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_mode.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_mode.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_mode).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_mode_all.erl b/deps/rabbit/src/rabbit_mirror_queue_mode_all.erl
index ce3e128de1..dbba0d2f33 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_mode_all.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_mode_all.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_mode_all).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_mode_exactly.erl b/deps/rabbit/src/rabbit_mirror_queue_mode_exactly.erl
index df6735ecd9..c5901ddc3b 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_mode_exactly.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_mode_exactly.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_mode_exactly).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_mode_nodes.erl b/deps/rabbit/src/rabbit_mirror_queue_mode_nodes.erl
index 3d9ff5d87b..169d55ba1d 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_mode_nodes.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_mode_nodes.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_mode_nodes).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_slave.erl b/deps/rabbit/src/rabbit_mirror_queue_slave.erl
index f8beb77367..175883a1f3 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_slave.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_slave.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_slave).
diff --git a/deps/rabbit/src/rabbit_mirror_queue_sync.erl b/deps/rabbit/src/rabbit_mirror_queue_sync.erl
index 896bdd5c61..da625f7c4c 100644
--- a/deps/rabbit/src/rabbit_mirror_queue_sync.erl
+++ b/deps/rabbit/src/rabbit_mirror_queue_sync.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mirror_queue_sync).
diff --git a/deps/rabbit/src/rabbit_mnesia.erl b/deps/rabbit/src/rabbit_mnesia.erl
index 216055103f..100fc6e119 100644
--- a/deps/rabbit/src/rabbit_mnesia.erl
+++ b/deps/rabbit/src/rabbit_mnesia.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mnesia).
diff --git a/deps/rabbit/src/rabbit_mnesia_rename.erl b/deps/rabbit/src/rabbit_mnesia_rename.erl
index 842662db42..9c1f708b8d 100644
--- a/deps/rabbit/src/rabbit_mnesia_rename.erl
+++ b/deps/rabbit/src/rabbit_mnesia_rename.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mnesia_rename).
diff --git a/deps/rabbit/src/rabbit_msg_file.erl b/deps/rabbit/src/rabbit_msg_file.erl
index f87c88f849..8b3a48c5bc 100644
--- a/deps/rabbit/src/rabbit_msg_file.erl
+++ b/deps/rabbit/src/rabbit_msg_file.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_msg_file).
diff --git a/deps/rabbit/src/rabbit_msg_store.erl b/deps/rabbit/src/rabbit_msg_store.erl
index 3e4c70e5b2..312529a655 100644
--- a/deps/rabbit/src/rabbit_msg_store.erl
+++ b/deps/rabbit/src/rabbit_msg_store.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_msg_store).
diff --git a/deps/rabbit/src/rabbit_msg_store_ets_index.erl b/deps/rabbit/src/rabbit_msg_store_ets_index.erl
index d3e4ac31ce..7b26b0ae3a 100644
--- a/deps/rabbit/src/rabbit_msg_store_ets_index.erl
+++ b/deps/rabbit/src/rabbit_msg_store_ets_index.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_msg_store_ets_index).
diff --git a/deps/rabbit/src/rabbit_msg_store_gc.erl b/deps/rabbit/src/rabbit_msg_store_gc.erl
index 5430f33530..f771bacbcb 100644
--- a/deps/rabbit/src/rabbit_msg_store_gc.erl
+++ b/deps/rabbit/src/rabbit_msg_store_gc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_msg_store_gc).
diff --git a/deps/rabbit/src/rabbit_networking.erl b/deps/rabbit/src/rabbit_networking.erl
index ed64e95e7a..bd76ab9845 100644
--- a/deps/rabbit/src/rabbit_networking.erl
+++ b/deps/rabbit/src/rabbit_networking.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_networking).
diff --git a/deps/rabbit/src/rabbit_node_monitor.erl b/deps/rabbit/src/rabbit_node_monitor.erl
index 55b3bcb9eb..8498cf6c2c 100644
--- a/deps/rabbit/src/rabbit_node_monitor.erl
+++ b/deps/rabbit/src/rabbit_node_monitor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_node_monitor).
diff --git a/deps/rabbit/src/rabbit_nodes.erl b/deps/rabbit/src/rabbit_nodes.erl
index 1668df78e3..f8430ebe8c 100644
--- a/deps/rabbit/src/rabbit_nodes.erl
+++ b/deps/rabbit/src/rabbit_nodes.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_nodes).
diff --git a/deps/rabbit/src/rabbit_osiris_metrics.erl b/deps/rabbit/src/rabbit_osiris_metrics.erl
index 710ce1b65e..bc232fbd5e 100644
--- a/deps/rabbit/src/rabbit_osiris_metrics.erl
+++ b/deps/rabbit/src/rabbit_osiris_metrics.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_osiris_metrics).
diff --git a/deps/rabbit/src/rabbit_parameter_validation.erl b/deps/rabbit/src/rabbit_parameter_validation.erl
index 997c6483cd..9958ff8f5a 100644
--- a/deps/rabbit/src/rabbit_parameter_validation.erl
+++ b/deps/rabbit/src/rabbit_parameter_validation.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_parameter_validation).
diff --git a/deps/rabbit/src/rabbit_password.erl b/deps/rabbit/src/rabbit_password.erl
index 872c490db2..1674db7cac 100644
--- a/deps/rabbit/src/rabbit_password.erl
+++ b/deps/rabbit/src/rabbit_password.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_password).
diff --git a/deps/rabbit/src/rabbit_password_hashing_md5.erl b/deps/rabbit/src/rabbit_password_hashing_md5.erl
index 9e3ea81490..a6923de2ae 100644
--- a/deps/rabbit/src/rabbit_password_hashing_md5.erl
+++ b/deps/rabbit/src/rabbit_password_hashing_md5.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Legacy hashing implementation, only used as a last resort when
diff --git a/deps/rabbit/src/rabbit_password_hashing_sha256.erl b/deps/rabbit/src/rabbit_password_hashing_sha256.erl
index 6bc59bd92a..de6bc1cf48 100644
--- a/deps/rabbit/src/rabbit_password_hashing_sha256.erl
+++ b/deps/rabbit/src/rabbit_password_hashing_sha256.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_password_hashing_sha256).
diff --git a/deps/rabbit/src/rabbit_password_hashing_sha512.erl b/deps/rabbit/src/rabbit_password_hashing_sha512.erl
index dab6f2e252..9215670fac 100644
--- a/deps/rabbit/src/rabbit_password_hashing_sha512.erl
+++ b/deps/rabbit/src/rabbit_password_hashing_sha512.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_password_hashing_sha512).
diff --git a/deps/rabbit/src/rabbit_peer_discovery.erl b/deps/rabbit/src/rabbit_peer_discovery.erl
index f386f36210..f30d84b2b7 100644
--- a/deps/rabbit/src/rabbit_peer_discovery.erl
+++ b/deps/rabbit/src/rabbit_peer_discovery.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery).
diff --git a/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl b/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl
index ff46321b13..2c650f1e91 100644
--- a/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl
+++ b/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_classic_config).
diff --git a/deps/rabbit/src/rabbit_peer_discovery_dns.erl b/deps/rabbit/src/rabbit_peer_discovery_dns.erl
index 3d30ac43be..4c4ff52916 100644
--- a/deps/rabbit/src/rabbit_peer_discovery_dns.erl
+++ b/deps/rabbit/src/rabbit_peer_discovery_dns.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_dns).
diff --git a/deps/rabbit/src/rabbit_plugins.erl b/deps/rabbit/src/rabbit_plugins.erl
index a631f07884..0e0659c6a0 100644
--- a/deps/rabbit/src/rabbit_plugins.erl
+++ b/deps/rabbit/src/rabbit_plugins.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_plugins).
diff --git a/deps/rabbit/src/rabbit_policies.erl b/deps/rabbit/src/rabbit_policies.erl
index e23d12d81a..9b15c1818a 100644
--- a/deps/rabbit/src/rabbit_policies.erl
+++ b/deps/rabbit/src/rabbit_policies.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_policies).
diff --git a/deps/rabbit/src/rabbit_policy.erl b/deps/rabbit/src/rabbit_policy.erl
index c60dd75ab1..64cd07bc65 100644
--- a/deps/rabbit/src/rabbit_policy.erl
+++ b/deps/rabbit/src/rabbit_policy.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_policy).
diff --git a/deps/rabbit/src/rabbit_policy_merge_strategy.erl b/deps/rabbit/src/rabbit_policy_merge_strategy.erl
index ab598af267..1a487bf160 100644
--- a/deps/rabbit/src/rabbit_policy_merge_strategy.erl
+++ b/deps/rabbit/src/rabbit_policy_merge_strategy.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_policy_merge_strategy).
diff --git a/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl b/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl
index 660db4a6d1..6c8e7ebf64 100644
--- a/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl
+++ b/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prelaunch_enabled_plugins_file).
diff --git a/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl b/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl
index 061e25468e..51040ad75c 100644
--- a/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl
+++ b/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prelaunch_feature_flags).
diff --git a/deps/rabbit/src/rabbit_prelaunch_logging.erl b/deps/rabbit/src/rabbit_prelaunch_logging.erl
index 9c0f7c6e2f..43522cff7e 100644
--- a/deps/rabbit/src/rabbit_prelaunch_logging.erl
+++ b/deps/rabbit/src/rabbit_prelaunch_logging.erl
@@ -2,11 +2,11 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @author The RabbitMQ team
-%% @copyright 2019-2021 VMware, Inc. or its affiliates.
+%% @copyright 2019-2022 VMware, Inc. or its affiliates.
%%
%% @doc
%% This module manages the configuration of the Erlang Logger facility. In
diff --git a/deps/rabbit/src/rabbit_prequeue.erl b/deps/rabbit/src/rabbit_prequeue.erl
index fd368fc9d2..e518e2fe66 100644
--- a/deps/rabbit/src/rabbit_prequeue.erl
+++ b/deps/rabbit/src/rabbit_prequeue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prequeue).
diff --git a/deps/rabbit/src/rabbit_priority_queue.erl b/deps/rabbit/src/rabbit_priority_queue.erl
index 355fadcfc3..1d4712a5ea 100644
--- a/deps/rabbit/src/rabbit_priority_queue.erl
+++ b/deps/rabbit/src/rabbit_priority_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2015-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2015-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_priority_queue).
diff --git a/deps/rabbit/src/rabbit_queue_consumers.erl b/deps/rabbit/src/rabbit_queue_consumers.erl
index 39c759aa5e..2f459a355a 100644
--- a/deps/rabbit/src/rabbit_queue_consumers.erl
+++ b/deps/rabbit/src/rabbit_queue_consumers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_consumers).
diff --git a/deps/rabbit/src/rabbit_queue_decorator.erl b/deps/rabbit/src/rabbit_queue_decorator.erl
index 1d4854cd2f..42c4b6c693 100644
--- a/deps/rabbit/src/rabbit_queue_decorator.erl
+++ b/deps/rabbit/src/rabbit_queue_decorator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_decorator).
diff --git a/deps/rabbit/src/rabbit_queue_index.erl b/deps/rabbit/src/rabbit_queue_index.erl
index e8c573c08f..2a7e7f96ad 100644
--- a/deps/rabbit/src/rabbit_queue_index.erl
+++ b/deps/rabbit/src/rabbit_queue_index.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_index).
diff --git a/deps/rabbit/src/rabbit_queue_location_client_local.erl b/deps/rabbit/src/rabbit_queue_location_client_local.erl
index 812dc4e9e0..07cfaa6319 100644
--- a/deps/rabbit/src/rabbit_queue_location_client_local.erl
+++ b/deps/rabbit/src/rabbit_queue_location_client_local.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_location_client_local).
diff --git a/deps/rabbit/src/rabbit_queue_location_min_masters.erl b/deps/rabbit/src/rabbit_queue_location_min_masters.erl
index 1147c03806..24509fbce9 100644
--- a/deps/rabbit/src/rabbit_queue_location_min_masters.erl
+++ b/deps/rabbit/src/rabbit_queue_location_min_masters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_location_min_masters).
diff --git a/deps/rabbit/src/rabbit_queue_location_random.erl b/deps/rabbit/src/rabbit_queue_location_random.erl
index 3ec8c6d585..21d7ed89b5 100644
--- a/deps/rabbit/src/rabbit_queue_location_random.erl
+++ b/deps/rabbit/src/rabbit_queue_location_random.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_location_random).
diff --git a/deps/rabbit/src/rabbit_queue_location_validator.erl b/deps/rabbit/src/rabbit_queue_location_validator.erl
index 0c55b1bc9e..910a512b64 100644
--- a/deps/rabbit/src/rabbit_queue_location_validator.erl
+++ b/deps/rabbit/src/rabbit_queue_location_validator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_location_validator).
diff --git a/deps/rabbit/src/rabbit_queue_master_location_misc.erl b/deps/rabbit/src/rabbit_queue_master_location_misc.erl
index e58890ede1..7032fca687 100644
--- a/deps/rabbit/src/rabbit_queue_master_location_misc.erl
+++ b/deps/rabbit/src/rabbit_queue_master_location_misc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_master_location_misc).
diff --git a/deps/rabbit/src/rabbit_queue_master_locator.erl b/deps/rabbit/src/rabbit_queue_master_locator.erl
index dbe0fc7401..b2a9958850 100644
--- a/deps/rabbit/src/rabbit_queue_master_locator.erl
+++ b/deps/rabbit/src/rabbit_queue_master_locator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_master_locator).
diff --git a/deps/rabbit/src/rabbit_queue_type_util.erl b/deps/rabbit/src/rabbit_queue_type_util.erl
index 6edcfa0c44..d640d95eb1 100644
--- a/deps/rabbit/src/rabbit_queue_type_util.erl
+++ b/deps/rabbit/src/rabbit_queue_type_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_type_util).
diff --git a/deps/rabbit/src/rabbit_quorum_memory_manager.erl b/deps/rabbit/src/rabbit_quorum_memory_manager.erl
index 6ff14090f7..a652abc995 100644
--- a/deps/rabbit/src/rabbit_quorum_memory_manager.erl
+++ b/deps/rabbit/src/rabbit_quorum_memory_manager.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_quorum_memory_manager).
diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl
index a4c6d5dd5f..3bc7d75c46 100644
--- a/deps/rabbit/src/rabbit_quorum_queue.erl
+++ b/deps/rabbit/src/rabbit_quorum_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_quorum_queue).
diff --git a/deps/rabbit/src/rabbit_ra_registry.erl b/deps/rabbit/src/rabbit_ra_registry.erl
index b3a8e490dd..e528edf588 100644
--- a/deps/rabbit/src/rabbit_ra_registry.erl
+++ b/deps/rabbit/src/rabbit_ra_registry.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ra_registry).
diff --git a/deps/rabbit/src/rabbit_reader.erl b/deps/rabbit/src/rabbit_reader.erl
index 2a4383dd3a..34b5deafb5 100644
--- a/deps/rabbit/src/rabbit_reader.erl
+++ b/deps/rabbit/src/rabbit_reader.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_reader).
diff --git a/deps/rabbit/src/rabbit_recovery_terms.erl b/deps/rabbit/src/rabbit_recovery_terms.erl
index 5d4546c481..358a668150 100644
--- a/deps/rabbit/src/rabbit_recovery_terms.erl
+++ b/deps/rabbit/src/rabbit_recovery_terms.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% We use a gen_server simply so that during the terminate/2 call
diff --git a/deps/rabbit/src/rabbit_restartable_sup.erl b/deps/rabbit/src/rabbit_restartable_sup.erl
index 0acfc611f8..7a4cb0ed98 100644
--- a/deps/rabbit/src/rabbit_restartable_sup.erl
+++ b/deps/rabbit/src/rabbit_restartable_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_restartable_sup).
diff --git a/deps/rabbit/src/rabbit_router.erl b/deps/rabbit/src/rabbit_router.erl
index cce6093c92..19541b5f55 100644
--- a/deps/rabbit/src/rabbit_router.erl
+++ b/deps/rabbit/src/rabbit_router.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_router).
diff --git a/deps/rabbit/src/rabbit_runtime_parameters.erl b/deps/rabbit/src/rabbit_runtime_parameters.erl
index 60f37b9dc7..3a41856ee7 100644
--- a/deps/rabbit/src/rabbit_runtime_parameters.erl
+++ b/deps/rabbit/src/rabbit_runtime_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_runtime_parameters).
diff --git a/deps/rabbit/src/rabbit_ssl.erl b/deps/rabbit/src/rabbit_ssl.erl
index 9570059373..95de8f7acf 100644
--- a/deps/rabbit/src/rabbit_ssl.erl
+++ b/deps/rabbit/src/rabbit_ssl.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ssl).
diff --git a/deps/rabbit/src/rabbit_stream_queue.erl b/deps/rabbit/src/rabbit_stream_queue.erl
index 2396ca3c9a..42eb88f1c3 100644
--- a/deps/rabbit/src/rabbit_stream_queue.erl
+++ b/deps/rabbit/src/rabbit_stream_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_queue).
diff --git a/deps/rabbit/src/rabbit_sup.erl b/deps/rabbit/src/rabbit_sup.erl
index b38127b73b..ec669dd1e0 100644
--- a/deps/rabbit/src/rabbit_sup.erl
+++ b/deps/rabbit/src/rabbit_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sup).
diff --git a/deps/rabbit/src/rabbit_sysmon_handler.erl b/deps/rabbit/src/rabbit_sysmon_handler.erl
index 8db36f0f68..ff7c5d2045 100644
--- a/deps/rabbit/src/rabbit_sysmon_handler.erl
+++ b/deps/rabbit/src/rabbit_sysmon_handler.erl
@@ -1,5 +1,5 @@
%% Copyright (c) 2011 Basho Technologies, Inc. All Rights Reserved.
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
diff --git a/deps/rabbit/src/rabbit_sysmon_minder.erl b/deps/rabbit/src/rabbit_sysmon_minder.erl
index c42bd0b905..950e81858b 100644
--- a/deps/rabbit/src/rabbit_sysmon_minder.erl
+++ b/deps/rabbit/src/rabbit_sysmon_minder.erl
@@ -1,6 +1,6 @@
%% -------------------------------------------------------------------
%% Copyright (c) 2007-2010 Basho Technologies, Inc. All Rights Reserved.
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
diff --git a/deps/rabbit/src/rabbit_table.erl b/deps/rabbit/src/rabbit_table.erl
index 291adc740b..839945cb39 100644
--- a/deps/rabbit/src/rabbit_table.erl
+++ b/deps/rabbit/src/rabbit_table.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_table).
diff --git a/deps/rabbit/src/rabbit_trace.erl b/deps/rabbit/src/rabbit_trace.erl
index 02d5bd97eb..b8e560da95 100644
--- a/deps/rabbit/src/rabbit_trace.erl
+++ b/deps/rabbit/src/rabbit_trace.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trace).
diff --git a/deps/rabbit/src/rabbit_tracking.erl b/deps/rabbit/src/rabbit_tracking.erl
index 88a825b373..87b0e7bb4d 100644
--- a/deps/rabbit/src/rabbit_tracking.erl
+++ b/deps/rabbit/src/rabbit_tracking.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracking).
diff --git a/deps/rabbit/src/rabbit_upgrade.erl b/deps/rabbit/src/rabbit_upgrade.erl
index 03aa6854de..59e67c5d4e 100644
--- a/deps/rabbit/src/rabbit_upgrade.erl
+++ b/deps/rabbit/src/rabbit_upgrade.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_upgrade).
diff --git a/deps/rabbit/src/rabbit_upgrade_functions.erl b/deps/rabbit/src/rabbit_upgrade_functions.erl
index dd856c42f0..2e61fa88b7 100644
--- a/deps/rabbit/src/rabbit_upgrade_functions.erl
+++ b/deps/rabbit/src/rabbit_upgrade_functions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_upgrade_functions).
diff --git a/deps/rabbit/src/rabbit_upgrade_preparation.erl b/deps/rabbit/src/rabbit_upgrade_preparation.erl
index b120ce3679..2dcdc50003 100644
--- a/deps/rabbit/src/rabbit_upgrade_preparation.erl
+++ b/deps/rabbit/src/rabbit_upgrade_preparation.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_upgrade_preparation).
diff --git a/deps/rabbit/src/rabbit_variable_queue.erl b/deps/rabbit/src/rabbit_variable_queue.erl
index 33fb5fefb4..206304a2be 100644
--- a/deps/rabbit/src/rabbit_variable_queue.erl
+++ b/deps/rabbit/src/rabbit_variable_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_variable_queue).
diff --git a/deps/rabbit/src/rabbit_version.erl b/deps/rabbit/src/rabbit_version.erl
index c3e69eacbe..809a1c0cce 100644
--- a/deps/rabbit/src/rabbit_version.erl
+++ b/deps/rabbit/src/rabbit_version.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_version).
diff --git a/deps/rabbit/src/rabbit_vhost.erl b/deps/rabbit/src/rabbit_vhost.erl
index 29355562bb..806844c5a1 100644
--- a/deps/rabbit/src/rabbit_vhost.erl
+++ b/deps/rabbit/src/rabbit_vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_vhost).
diff --git a/deps/rabbit/src/rabbit_vhost_limit.erl b/deps/rabbit/src/rabbit_vhost_limit.erl
index da8601c444..f7c48d15ba 100644
--- a/deps/rabbit/src/rabbit_vhost_limit.erl
+++ b/deps/rabbit/src/rabbit_vhost_limit.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_vhost_limit).
diff --git a/deps/rabbit/src/rabbit_vhost_msg_store.erl b/deps/rabbit/src/rabbit_vhost_msg_store.erl
index 32aac71da8..8daa1f3f2e 100644
--- a/deps/rabbit/src/rabbit_vhost_msg_store.erl
+++ b/deps/rabbit/src/rabbit_vhost_msg_store.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_vhost_msg_store).
diff --git a/deps/rabbit/src/rabbit_vhost_process.erl b/deps/rabbit/src/rabbit_vhost_process.erl
index bf9972e1be..8aab68cb80 100644
--- a/deps/rabbit/src/rabbit_vhost_process.erl
+++ b/deps/rabbit/src/rabbit_vhost_process.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This module implements a vhost identity process.
diff --git a/deps/rabbit/src/rabbit_vhost_sup.erl b/deps/rabbit/src/rabbit_vhost_sup.erl
index 15ece86f82..e857f4cd43 100644
--- a/deps/rabbit/src/rabbit_vhost_sup.erl
+++ b/deps/rabbit/src/rabbit_vhost_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_vhost_sup).
diff --git a/deps/rabbit/src/rabbit_vhost_sup_sup.erl b/deps/rabbit/src/rabbit_vhost_sup_sup.erl
index 2d087986d1..bd761e938f 100644
--- a/deps/rabbit/src/rabbit_vhost_sup_sup.erl
+++ b/deps/rabbit/src/rabbit_vhost_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_vhost_sup_sup).
diff --git a/deps/rabbit/src/rabbit_vhost_sup_wrapper.erl b/deps/rabbit/src/rabbit_vhost_sup_wrapper.erl
index 3c1368699a..5093ecda97 100644
--- a/deps/rabbit/src/rabbit_vhost_sup_wrapper.erl
+++ b/deps/rabbit/src/rabbit_vhost_sup_wrapper.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This module is a wrapper around vhost supervisor to
diff --git a/deps/rabbit/src/rabbit_vm.erl b/deps/rabbit/src/rabbit_vm.erl
index f01c383b63..697c5dd32d 100644
--- a/deps/rabbit/src/rabbit_vm.erl
+++ b/deps/rabbit/src/rabbit_vm.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_vm).
diff --git a/deps/rabbit/src/supervised_lifecycle.erl b/deps/rabbit/src/supervised_lifecycle.erl
index 4a88820ea4..4aea183508 100644
--- a/deps/rabbit/src/supervised_lifecycle.erl
+++ b/deps/rabbit/src/supervised_lifecycle.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Invoke callbacks on startup and termination.
diff --git a/deps/rabbit/src/tcp_listener.erl b/deps/rabbit/src/tcp_listener.erl
index 3997bc4c36..ef32fb1954 100644
--- a/deps/rabbit/src/tcp_listener.erl
+++ b/deps/rabbit/src/tcp_listener.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(tcp_listener).
diff --git a/deps/rabbit/src/tcp_listener_sup.erl b/deps/rabbit/src/tcp_listener_sup.erl
index ccc26c94bc..d1d5f1cf19 100644
--- a/deps/rabbit/src/tcp_listener_sup.erl
+++ b/deps/rabbit/src/tcp_listener_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(tcp_listener_sup).
diff --git a/deps/rabbit/src/term_to_binary_compat.erl b/deps/rabbit/src/term_to_binary_compat.erl
index ea2e2196fe..071da02d0b 100644
--- a/deps/rabbit/src/term_to_binary_compat.erl
+++ b/deps/rabbit/src/term_to_binary_compat.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(term_to_binary_compat).
diff --git a/deps/rabbit/src/vhost.erl b/deps/rabbit/src/vhost.erl
index 452e8115f8..21b3f55db0 100644
--- a/deps/rabbit/src/vhost.erl
+++ b/deps/rabbit/src/vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(vhost).
diff --git a/deps/rabbit/src/vhost_v1.erl b/deps/rabbit/src/vhost_v1.erl
index 10cee4e08e..3d94b0cb4b 100644
--- a/deps/rabbit/src/vhost_v1.erl
+++ b/deps/rabbit/src/vhost_v1.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(vhost_v1).
diff --git a/deps/rabbit/test/backing_queue_SUITE.erl b/deps/rabbit/test/backing_queue_SUITE.erl
index 0349bd7cca..0a48e249c7 100644
--- a/deps/rabbit/test/backing_queue_SUITE.erl
+++ b/deps/rabbit/test/backing_queue_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(backing_queue_SUITE).
diff --git a/deps/rabbit/test/channel_interceptor_SUITE.erl b/deps/rabbit/test/channel_interceptor_SUITE.erl
index f0bfa48a63..c63daf96e3 100644
--- a/deps/rabbit/test/channel_interceptor_SUITE.erl
+++ b/deps/rabbit/test/channel_interceptor_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(channel_interceptor_SUITE).
diff --git a/deps/rabbit/test/channel_operation_timeout_SUITE.erl b/deps/rabbit/test/channel_operation_timeout_SUITE.erl
index fec72132fe..ac9b743e57 100644
--- a/deps/rabbit/test/channel_operation_timeout_SUITE.erl
+++ b/deps/rabbit/test/channel_operation_timeout_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(channel_operation_timeout_SUITE).
diff --git a/deps/rabbit/test/channel_operation_timeout_test_queue.erl b/deps/rabbit/test/channel_operation_timeout_test_queue.erl
index f647be412e..45cb773b03 100644
--- a/deps/rabbit/test/channel_operation_timeout_test_queue.erl
+++ b/deps/rabbit/test/channel_operation_timeout_test_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(channel_operation_timeout_test_queue).
diff --git a/deps/rabbit/test/classic_queue_prop_SUITE.erl b/deps/rabbit/test/classic_queue_prop_SUITE.erl
new file mode 100644
index 0000000000..61d97d5cd0
--- /dev/null
+++ b/deps/rabbit/test/classic_queue_prop_SUITE.erl
@@ -0,0 +1,1157 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module(classic_queue_prop_SUITE).
+-compile(export_all).
+
+-define(NUM_TESTS, 500).
+
+%% Set to true to get an awful lot of debug logs.
+-if(false).
+-define(DEBUG(X,Y), logger:debug("~0p: " ++ X, [?FUNCTION_NAME|Y])).
+-else.
+-define(DEBUG(X,Y), _ = X, _ = Y, ok).
+-endif.
+
+-include_lib("amqp_client/include/amqp_client.hrl").
+-include_lib("proper/include/proper.hrl").
+
+-record(cq, {
+ amq = undefined :: amqqueue:amqqueue(),
+ name :: atom(),
+ mode :: classic | lazy,
+ version :: 1 | 2,
+
+ %% We have one queue per way of publishing messages (such as channels).
+ %% We can only confirm the publish order on a per-channel level because
+ %% the order is non-deterministic when multiple publishers concurrently
+ %% publish.
+ q = #{} :: #{pid() | internal => queue:queue()},
+
+ %% We must account for lost acks/unconfirmed publishes after restarts.
+ restarted = false :: boolean(),
+ crashed = false :: boolean(),
+ %% We must keep some received messages around because basic.ack is not
+ %% synchronous and as a result we may end up receiving messages twice
+ %% after a queue is restarted.
+ acked = [] :: list(),
+ %% We keep track of persistent messages that were confirmed and for
+ %% which we have received the publisher confirm. This is used when
+ %% restarting the queue to only move messages into 'uncertain'
+ %% when we have not received confirms.
+ confirmed = [] :: list(),
+ %% We also keep track of persistent messages that were sent before
+ %% the channel entered confirm mode. These messages will not be
+ %% confirmed retroactively and must not be considered confirmed.
+ unconfirmed = [] :: list(),
+ %% We must also keep some published messages around because when
+ %% confirms are not used, or were not received, we are uncertain
+ %% of whether the message made it to the queue or not.
+ uncertain = [] :: list(),
+ %% We may receive any message previously received after a crash.
+ received = [] :: list(),
+
+ %% CT config necessary to open channels.
+ config = no_config :: list(),
+
+ %% Limiter pid for calling rabbit_amqqueue:basic_get.
+ limiter :: pid(),
+
+ %% Channels.
+ %%
+ %% We set consumers to 'true' when there had been consumers, even if they
+ %% were closed or cancelled, because there can be a race condition between
+ %% the cancelling and the message going back to the queue, and the test
+ %% suite getting messages via basic.get.
+ consumers = false :: boolean(),
+ channels = #{} :: #{pid() => #{consumer := none | binary(), confirms := boolean()}}
+}).
+
+%% Common Test.
+
+all() ->
+ [{group, classic_queue_tests}].
+
+groups() ->
+ [{classic_queue_tests, [], [
+% manual%,
+ classic_queue_v1,
+ lazy_queue_v1,
+ classic_queue_v2,
+ lazy_queue_v2
+ ]}].
+
+init_per_suite(Config) ->
+ rabbit_ct_helpers:log_environment(),
+ rabbit_ct_helpers:run_setup_steps(Config).
+
+end_per_suite(Config) ->
+ rabbit_ct_helpers:run_teardown_steps(Config).
+
+init_per_group(Group = classic_queue_tests, Config) ->
+ Config1 = rabbit_ct_helpers:set_config(Config, [
+ {rmq_nodename_suffix, Group},
+ {rmq_nodes_count, 1},
+ {erlang_node_config, [{rabbit, [
+ %% We make sure the server can handle fast-paced forced queue crashes
+ %% for the purpose of the tests.
+ {amqqueue_max_restart_intensity, {1000000, 1}},
+ %% We reduce the segment_entry_count values to make using multiple segments more likely.
+ {queue_index_segment_entry_count, 512},
+ {classic_queue_index_v2_segment_entry_count, 512}
+ ]}]}
+ ]),
+ Config2 = rabbit_ct_helpers:run_steps(Config1,
+ rabbit_ct_broker_helpers:setup_steps() ++
+ rabbit_ct_client_helpers:setup_steps()),
+ %% We increase the number of entries in stacktraces
+ %% to ease debugging when there is a crash. The
+ %% default of 8 is a bit low. We need to increase
+ %% in both the CT node and the RabbitMQ node.
+ erlang:system_flag(backtrace_depth, 16),
+ rabbit_ct_broker_helpers:rpc(Config2, 0,
+ erlang, system_flag, [backtrace_depth, 16]),
+ Config2.
+
+end_per_group(classic_queue_tests, Config) ->
+ rabbit_ct_helpers:run_steps(Config,
+ rabbit_ct_client_helpers:teardown_steps() ++
+ rabbit_ct_broker_helpers:teardown_steps()).
+
+%% $ make -C deps/rabbit test-build
+%% $ erl -pa deps/rabbit/test
+%% > classic_queue_prop_SUITE:instrs_to_manual([[{init,...},...]]).
+%% Paste into do_manual/1.
+%% Enable manual as the only test in groups/0.
+%% $ make -C deps/rabbit ct-classic_queue
+instrs_to_manual([Instrs]) ->
+ io:format("~ndo_manual(Config) ->~n~n"),
+ lists:foreach(fun
+ ({init, CQ}) ->
+ #cq{name=Name, mode=Mode, version=Version} = CQ,
+ io:format(" St0 = #cq{name=~0p, mode=~0p, version=~0p,~n"
+ " config=minimal_config(Config)},~n~n",
+ [Name, Mode, Version]);
+ ({set, {var,Var}, {call, ?MODULE, cmd_setup_queue, _}}) ->
+ Res = "Res" ++ integer_to_list(Var),
+ PrevSt = "St" ++ integer_to_list(Var - 1),
+ St = "St" ++ integer_to_list(Var),
+ io:format(" ~s = cmd_setup_queue(~s),~n"
+ " ~s = ~s#cq{amq=~s},~n~n",
+ [Res, PrevSt, St, PrevSt, Res]);
+ ({set, {var,Var}, {call, ?MODULE, Cmd, [#cq{}|Args]}}) ->
+ Res = "Res" ++ integer_to_list(Var),
+ PrevSt = "St" ++ integer_to_list(Var - 1),
+ St = "St" ++ integer_to_list(Var),
+ ExtraArgs = [[", ", case A of
+ {var,V} -> "Res" ++ integer_to_list(V);
+ _ -> io_lib:format("~0p", [A])
+ end] || A <- Args],
+ io:format(" ~s = ~s(~s~s),~n"
+ " true = postcondition(~s, {call, undefined, ~s, [~s~s]}, ~s),~n"
+ " ~s = next_state(~s, ~s, {call, undefined, ~s, [~s~s]}),~n~n",
+ [Res, Cmd, PrevSt, ExtraArgs,
+ PrevSt, Cmd, PrevSt, ExtraArgs, Res,
+ St, PrevSt, Res, Cmd, PrevSt, ExtraArgs]);
+ ({set, {var,Var}, {call, ?MODULE, Cmd, Args}}) ->
+ Res = "Res" ++ integer_to_list(Var),
+ PrevSt = "St" ++ integer_to_list(Var - 1),
+ St = "St" ++ integer_to_list(Var),
+ ExtraArgs = case lists:flatten([[", ", case A of
+ {var,V} -> "Res" ++ integer_to_list(V);
+ _ -> io_lib:format("~0p", [A])
+ end] || A <- Args]) of
+ "" -> "";
+ ", " ++ ExtraArgs0 -> ExtraArgs0
+ end,
+ io:format(" ~s = ~s(~s),~n"
+ " true = postcondition(~s, {call, undefined, ~s, [~s]}, ~s),~n"
+ " ~s = next_state(~s, ~s, {call, undefined, ~s, [~s]}),~n~n",
+ [Res, Cmd, ExtraArgs,
+ PrevSt, Cmd, ExtraArgs, Res,
+ St, PrevSt, Res, Cmd, ExtraArgs])
+ end, Instrs),
+ io:format(" true.~n").
+
+manual(Config) ->
+ %% This is where tracing of client processes
+ %% (amqp_channel, amqp_selective_consumer)
+ %% should be added if necessary.
+ true = rabbit_ct_broker_helpers:rpc(Config, 0,
+ ?MODULE, do_manual, [Config]).
+
+%% Tips to help reproduce an issue:
+%% - See instrs_to_manual/1 to automatically obtain code to put in this function.
+%% - Do the commands after cmd_setup_queue in a loop.
+%% - Add some timer:sleep(1) or longer between commands if delays are necessary.
+%% - If a shrunk set of commands isn't good enough, the original might.
+%% - Removing some steps can help understand the sequence of events leading to the problem.
+do_manual(Config) ->
+ Config =:= Config.
+
+classic_queue_v1(Config) ->
+ true = rabbit_ct_broker_helpers:rpc(Config, 0,
+ ?MODULE, do_classic_queue_v1, [Config]).
+
+do_classic_queue_v1(Config) ->
+ true = proper:quickcheck(prop_classic_queue_v1(Config),
+ [{on_output, on_output_fun()},
+ {numtests, ?NUM_TESTS}]).
+
+lazy_queue_v1(Config) ->
+ true = rabbit_ct_broker_helpers:rpc(Config, 0,
+ ?MODULE, do_lazy_queue_v1, [Config]).
+
+do_lazy_queue_v1(Config) ->
+ true = proper:quickcheck(prop_lazy_queue_v1(Config),
+ [{on_output, on_output_fun()},
+ {numtests, ?NUM_TESTS}]).
+
+classic_queue_v2(Config) ->
+ true = rabbit_ct_broker_helpers:rpc(Config, 0,
+ ?MODULE, do_classic_queue_v2, [Config]).
+
+do_classic_queue_v2(Config) ->
+ true = proper:quickcheck(prop_classic_queue_v2(Config),
+ [{on_output, on_output_fun()},
+ {numtests, ?NUM_TESTS}]).
+
+lazy_queue_v2(Config) ->
+ true = rabbit_ct_broker_helpers:rpc(Config, 0,
+ ?MODULE, do_lazy_queue_v2, [Config]).
+
+do_lazy_queue_v2(Config) ->
+ true = proper:quickcheck(prop_lazy_queue_v2(Config),
+ [{on_output, on_output_fun()},
+ {numtests, ?NUM_TESTS}]).
+
+on_output_fun() ->
+ fun (".", _) -> ok; % don't print the '.'s on new lines
+ ("!", _) -> ok;
+ ("~n", _) -> ok; % don't print empty lines; CT adds many to logs already
+ ("~w~n", A) -> logger:error("~p~n", [A]); % make sure this gets sent to the terminal, it's important
+ (F, A) -> io:format(F, A)
+ end.
+
+%% Properties.
+
+prop_classic_queue_v1(Config) ->
+ {ok, LimiterPid} = rabbit_limiter:start_link(no_id),
+ InitialState = #cq{name=?FUNCTION_NAME, mode=default, version=1,
+ config=minimal_config(Config), limiter=LimiterPid},
+ prop_common(InitialState).
+
+prop_lazy_queue_v1(Config) ->
+ {ok, LimiterPid} = rabbit_limiter:start_link(no_id),
+ InitialState = #cq{name=?FUNCTION_NAME, mode=lazy, version=1,
+ config=minimal_config(Config), limiter=LimiterPid},
+ prop_common(InitialState).
+
+prop_classic_queue_v2(Config) ->
+ {ok, LimiterPid} = rabbit_limiter:start_link(no_id),
+ InitialState = #cq{name=?FUNCTION_NAME, mode=default, version=2,
+ config=minimal_config(Config), limiter=LimiterPid},
+ prop_common(InitialState).
+
+prop_lazy_queue_v2(Config) ->
+ {ok, LimiterPid} = rabbit_limiter:start_link(no_id),
+ InitialState = #cq{name=?FUNCTION_NAME, mode=lazy, version=2,
+ config=minimal_config(Config), limiter=LimiterPid},
+ prop_common(InitialState).
+
+prop_common(InitialState) ->
+ ?FORALL(Commands, commands(?MODULE, InitialState),
+ ?TRAPEXIT(begin
+ {History, State, Result} = run_commands(?MODULE, Commands),
+ cmd_teardown_queue(State),
+ ?WHENFAIL(logger:error("History: ~p~nState: ~p~nResult: ~p",
+ [History, State, Result]),
+ aggregate(command_names(Commands), Result =:= ok))
+ end)
+ ).
+
+minimal_config(Config) ->
+ {_, [RmqNode0]} = lists:keyfind(rmq_nodes, 1, Config),
+ [{rmq_nodes, [lists:filter(fun
+ ({channels_manager, _}) -> true;
+ ({nodename, _}) -> true;
+ (_) -> false
+ end, RmqNode0)]}].
+
+%% Commands.
+
+command(St = #cq{amq=undefined}) ->
+ {call, ?MODULE, cmd_setup_queue, [St]};
+command(St) ->
+ ChannelCmds = case has_channels(St) of
+ false -> [];
+ true -> [
+ {100, {call, ?MODULE, cmd_channel_confirm_mode, [channel(St)]}},
+ {100, {call, ?MODULE, cmd_channel_close, [channel(St)]}},
+ {900, {call, ?MODULE, cmd_channel_publish, [St, channel(St), integer(0, 1024*1024), integer(1, 2), boolean(), expiration()]}},
+ {200, {call, ?MODULE, cmd_channel_publish_many, [St, channel(St), integer(2, 512), integer(0, 1024*1024), integer(1, 2), boolean(), expiration()]}},
+ {900, {call, ?MODULE, cmd_channel_wait_for_confirms, [channel(St)]}},
+ {200, {call, ?MODULE, cmd_channel_basic_get, [St, channel(St)]}},
+ {300, {call, ?MODULE, cmd_channel_consume, [St, channel(St)]}},
+ {100, {call, ?MODULE, cmd_channel_cancel, [St, channel(St)]}},
+ {900, {call, ?MODULE, cmd_channel_receive_and_ack, [St, channel(St)]}},
+ {900, {call, ?MODULE, cmd_channel_receive_and_requeue, [St, channel(St)]}},
+ {900, {call, ?MODULE, cmd_channel_receive_and_discard, [St, channel(St)]}},
+ {300, {call, ?MODULE, cmd_channel_receive_many_and_ack_ooo, [St, channel(St), integer(2, 10)]}},
+ {300, {call, ?MODULE, cmd_channel_receive_many_and_requeue_ooo, [St, channel(St), integer(2, 10)]}},
+ {300, {call, ?MODULE, cmd_channel_receive_many_and_discard_ooo, [St, channel(St), integer(2, 10)]}}
+ ]
+ end,
+ weighted_union([
+ %% These restart the vhost or the queue.
+ {100, {call, ?MODULE, cmd_restart_vhost_clean, [St]}},
+ {100, {call, ?MODULE, cmd_restart_queue_dirty, [St]}},
+ %% These change internal configuration.
+ { 10, {call, ?MODULE, cmd_set_v2_check_crc32, [boolean()]}},
+ %% These set policies.
+ { 50, {call, ?MODULE, cmd_set_mode, [St, oneof([default, lazy])]}},
+ { 50, {call, ?MODULE, cmd_set_version, [St, oneof([1, 2])]}},
+ { 50, {call, ?MODULE, cmd_set_mode_version, [oneof([default, lazy]), oneof([1, 2])]}},
+ %% These are direct operations using internal functions.
+ { 50, {call, ?MODULE, cmd_publish_msg, [St, integer(0, 1024*1024), integer(1, 2), boolean(), expiration()]}},
+ { 50, {call, ?MODULE, cmd_basic_get_msg, [St]}},
+ { 10, {call, ?MODULE, cmd_purge, [St]}},
+ %% These are channel-based operations.
+ {300, {call, ?MODULE, cmd_channel_open, [St]}}
+ |ChannelCmds
+ ]).
+
+expiration() ->
+ oneof([
+ undefined,
+ integer(0, 100) %% Up to 0.1s to make it more likely to trigger dropping messages.
+ ]).
+
+has_channels(#cq{channels=Channels}) ->
+ map_size(Channels) > 0.
+
+channel(#cq{channels=Channels}) ->
+ elements(maps:keys(Channels)).
+
+%% Next state.
+
+next_state(St, AMQ, {call, _, cmd_setup_queue, _}) ->
+ St#cq{amq=AMQ};
+next_state(St=#cq{q=Q0, confirmed=Confirmed, uncertain=Uncertain0, channels=Channels0}, AMQ, {call, _, cmd_restart_vhost_clean, _}) ->
+ %% Consider all consumers canceled when the vhost restarts.
+ Channels = maps:map(fun (_, ChInfo) -> ChInfo#{consumer => none} end, Channels0),
+ %% The status of persistent messages that were published before the vhost restart
+ %% is uncertain, unless the channel is in confirms mode and confirms
+ %% were received.
+ {Uncertain, Q} = maps:fold(fun(Ch, ChQ, {UncertainAcc, QAcc}) ->
+ ChQL = queue:to_list(ChQ),
+ %% We keep both transient and persistent messages on clean restarts.
+ ChQConfirmed = [Msg || Msg <- ChQL, lists:member(Msg, Confirmed)],
+ ChQUncertain = [Msg || Msg <- ChQL, not lists:member(Msg, Confirmed)],
+ {ChQUncertain ++ UncertainAcc, QAcc#{Ch => queue:from_list(ChQConfirmed)}}
+ end, {Uncertain0, #{}}, Q0),
+ St#cq{amq=AMQ, q=Q, restarted=true, uncertain=Uncertain, channels=Channels};
+next_state(St=#cq{q=Q0, confirmed=Confirmed, uncertain=Uncertain0}, AMQ, {call, _, cmd_restart_queue_dirty, _}) ->
+ %% The status of persistent messages that were published before the queue crash
+ %% is uncertain, unless the channel is in confirms mode and confirms
+ %% were received.
+ {Uncertain, Q} = maps:fold(fun(Ch, ChQ, {UncertainAcc, QAcc}) ->
+ ChQL = queue:to_list(ChQ),
+ %% We only keep persistent messages because on dirty restart the queue acks the transients.
+ ChQConfirmed = [Msg || Msg <- ChQL, lists:member(Msg, Confirmed)],
+ %% We keep both persistent and transient in Uncertain because there might
+ %% be messages in transit that will be received by consumers.
+ ChQUncertain = [Msg || Msg <- ChQL, not lists:member(Msg, Confirmed)],
+ {ChQUncertain ++ UncertainAcc, QAcc#{Ch => queue:from_list(ChQConfirmed)}}
+ end, {Uncertain0, #{}}, Q0),
+ St#cq{amq=AMQ, q=Q, restarted=true, crashed=true, uncertain=Uncertain};
+next_state(St, _, {call, _, cmd_set_v2_check_crc32, _}) ->
+ St;
+next_state(St, _, {call, _, cmd_set_mode, [_, Mode]}) ->
+ St#cq{mode=Mode};
+next_state(St, _, {call, _, cmd_set_version, [_, Version]}) ->
+ St#cq{version=Version};
+next_state(St, _, {call, _, cmd_set_mode_version, [Mode, Version]}) ->
+ St#cq{mode=Mode, version=Version};
+next_state(St=#cq{q=Q}, Msg, {call, _, cmd_publish_msg, _}) ->
+ IntQ = maps:get(internal, Q, queue:new()),
+ St#cq{q=Q#{internal => queue:in(Msg, IntQ)}};
+next_state(St, empty, {call, _, cmd_basic_get_msg, _}) ->
+ St;
+next_state(St=#cq{q=Q, received=Received}, Msg, {call, _, cmd_basic_get_msg, _}) ->
+ %% When there are multiple active consumers we may receive
+ %% messages out of order because the commands are not running
+ %% in the same order as the messages sent to channels.
+ %%
+ %% When there are messages expired they cannot be removed
+ %% (because of potential race conditions if messages expired
+ %% during transit, vs in the queue) so we may receive messages
+ %% seemingly out of order.
+ %%
+ %% For all these reasons we remove messages regardless of where
+ %% they are in the queue.
+ St#cq{q=delete_message(Q, Msg), received=[Msg|Received]};
+next_state(St=#cq{q=Q, uncertain=Uncertain0}, _, {call, _, cmd_purge, _}) ->
+ %% The status of messages that were published before a purge
+ %% is uncertain in the same way as for a vhost restart or a
+ %% queue crash, because the purge command does not go through
+ %% channels. We therefore handle it the same way as a vhost
+ %% restart, minus the AMQ change.
+ Uncertain = maps:fold(fun(_, ChQ, Acc) ->
+ queue:to_list(ChQ) ++ Acc
+ end, Uncertain0, Q),
+ St#cq{q=#{}, restarted=true, uncertain=Uncertain};
+next_state(St=#cq{channels=Channels}, Ch, {call, _, cmd_channel_open, _}) ->
+ St#cq{channels=Channels#{Ch => #{consumer => none, confirms => false}}};
+next_state(St=#cq{channels=Channels}, _, {call, _, cmd_channel_close, [Ch]}) ->
+ St#cq{channels=maps:remove(Ch, Channels)};
+next_state(St=#cq{q=Q, unconfirmed=Unconfirmed, channels=Channels}, _, {call, _, cmd_channel_confirm_mode, [Ch]}) ->
+ %% All persistent messages sent before we enabled confirm mode will not be
+ %% confirmed retroactively. We therefore need to keep track of them to avoid
+ %% marking them as confirmed later on.
+ ChQ = maps:get(Ch, Q, queue:new()),
+ Persistent = [Msg || Msg = #amqp_msg{props=#'P_basic'{delivery_mode=2}} <- queue:to_list(ChQ)],
+ ChInfo = maps:get(Ch, Channels),
+ St#cq{unconfirmed=Persistent ++ Unconfirmed,
+ channels=Channels#{Ch => ChInfo#{confirms => true}}};
+next_state(St=#cq{q=Q}, Msg, {call, _, cmd_channel_publish, [_, Ch|_]}) ->
+ ChQ = maps:get(Ch, Q, queue:new()),
+ St#cq{q=Q#{Ch => queue:in(Msg, ChQ)}};
+next_state(St=#cq{q=Q}, Msgs0, {call, _, cmd_channel_publish_many, [_, Ch|_]}) ->
+ %% We handle {var,_} specially here but it would work for cmd_channel_publish as well.
+ Msgs = case is_list(Msgs0) of
+ true -> Msgs0;
+ false -> [Msgs0]
+ end,
+ ChQ = maps:get(Ch, Q, queue:new()),
+ St#cq{q=Q#{Ch => queue:from_list(queue:to_list(ChQ) ++ Msgs)}};
+next_state(St=#cq{q=Q, confirmed=Confirmed, unconfirmed=Unconfirmed}, _, {call, _, cmd_channel_wait_for_confirms, [Ch]}) ->
+ %% All messages sent on the channel were confirmed. We move them
+ %% to the list of confirmed messages. We might end up with
+ %% duplicates in the confirmed list because we might wait
+ %% for confirms multiple times before we retrieve them,
+ %% but that's okay because we only need to check that the
+ %% message is present when the queue gets restarted.
+ ChQ = maps:get(Ch, Q, queue:new()),
+ %% We only keep persistent messages. Messages in Confirmed are always persistent.
+ Persistent = [Msg || Msg = #amqp_msg{props=#'P_basic'{delivery_mode=2}} <- queue:to_list(ChQ), not lists:member(Msg, Unconfirmed)],
+ St#cq{confirmed=Persistent ++ Confirmed};
+next_state(St, empty, {call, _, cmd_channel_basic_get, _}) ->
+ St;
+next_state(St=#cq{q=Q, received=Received}, Msg, {call, _, cmd_channel_basic_get, _}) ->
+ %% When there are multiple active consumers we may receive
+ %% messages out of order because the commands are not running
+ %% in the same order as the messages sent to channels.
+ %%
+ %% When there are messages expired they cannot be removed
+ %% (because of potential race conditions if messages expired
+ %% during transit, vs in the queue) so we may receive messages
+ %% seemingly out of order.
+ %%
+ %% For all these reasons we remove messages regardless of where
+ %% they are in the queue.
+ St#cq{q=delete_message(Q, Msg), received=[Msg|Received]};
+next_state(St=#cq{channels=Channels}, Tag, {call, _, cmd_channel_consume, [_, Ch]}) ->
+ ChInfo = maps:get(Ch, Channels),
+ St#cq{consumers=true, channels=Channels#{Ch => ChInfo#{consumer => Tag}}};
+next_state(St=#cq{channels=Channels}, _, {call, _, cmd_channel_cancel, [_, Ch]}) ->
+ ChInfo = maps:get(Ch, Channels),
+ St#cq{channels=Channels#{Ch => ChInfo#{consumer => none}}};
+next_state(St, none, {call, _, cmd_channel_receive_and_ack, _}) ->
+ St;
+next_state(St=#cq{q=Q, acked=Acked}, Msg, {call, _, cmd_channel_receive_and_ack, _}) ->
+ %% When there are multiple active consumers we may receive
+ %% messages out of order because the commands are not running
+ %% in the same order as the messages sent to channels.
+ %%
+ %% But because messages can be pending in the mailbox this can
+ %% be the case also when we had two consumers and one was
+ %% cancelled. So we do not verify the order of messages
+ %% when using consume.
+ %%
+ %% We do not need to add the message to both acked and received
+ %% because we always check acked even when crashes occurred.
+ St#cq{q=delete_message(Q, Msg), acked=[Msg|Acked]};
+next_state(St, _, {call, _, cmd_channel_receive_and_requeue, _}) ->
+ St;
+next_state(St=#cq{q=Q, acked=Acked}, Msg, {call, _, cmd_channel_receive_and_discard, _}) ->
+ %% Rejecting without requeing ends up acking the message
+ %% (and possibly dead-lettering) so we handle it the same
+ %% as normal acks.
+ St#cq{q=delete_message(Q, Msg), acked=[Msg|Acked]};
+next_state(St=#cq{q=Q, acked=Acked}, Msgs0, {call, _, cmd_channel_receive_many_and_ack_ooo, _}) ->
+ %% We handle {var,_} specially here but it would work for cmd_channel_receive_and_ack as well.
+ Msgs = case is_list(Msgs0) of
+ true -> Msgs0;
+ false -> [Msgs0]
+ end,
+ St#cq{q=lists:foldl(fun(Msg, QF) -> delete_message(QF, Msg) end, Q, Msgs), acked=Msgs ++ Acked};
+next_state(St, _, {call, _, cmd_channel_receive_many_and_requeue_ooo, _}) ->
+ St;
+next_state(St=#cq{q=Q, acked=Acked}, Msgs0, {call, _, cmd_channel_receive_many_and_discard_ooo, _}) ->
+ %% We handle {var,_} specially here but it would work for cmd_channel_receive_and_discard as well.
+ Msgs = case is_list(Msgs0) of
+ true -> Msgs0;
+ false -> [Msgs0]
+ end,
+ St#cq{q=lists:foldl(fun(Msg, QF) -> delete_message(QF, Msg) end, Q, Msgs), acked=Msgs ++ Acked}.
+
+%% We remove at most one message anywhere in the queue.
+delete_message(Qs0, Msg) ->
+ {Qs, _} = maps:fold(fun
+ (Ch, ChQ, {Qs1, true}) ->
+ {Qs1#{Ch => ChQ}, true};
+ (Ch, ChQ, {Qs1, false}) ->
+ case queue:member(Msg, ChQ) of
+ true ->
+ case queue:len(ChQ) of
+ 1 ->
+ {Qs1, true};
+ _ ->
+ ChQOut = queue_delete(Msg, ChQ),
+ {Qs1#{Ch => ChQOut}, true}
+ end;
+ false ->
+ {Qs1#{Ch => ChQ}, false}
+ end
+ end, {#{}, false}, Qs0),
+ Qs.
+
+%% Preconditions.
+%%
+%% We cannot rely on the data found in #cq.q here because when we are
+%% in a symbolic context we cannot remove the messages from #cq.q
+%% (since we are always getting a new {var,integer()}).
+
+precondition(#cq{amq=AMQ}, {call, _, cmd_restart_vhost_clean, _}) ->
+ AMQ =/= undefined;
+precondition(#cq{amq=AMQ}, {call, _, cmd_restart_queue_dirty, _}) ->
+ AMQ =/= undefined;
+precondition(#cq{channels=Channels}, {call, _, cmd_channel_confirm_mode, [Ch]}) ->
+ %% Only enabled confirms if they were not already enabled.
+ %% Otherwise it is a no-op so not a big problem but this
+ %% reduces the quality of the test runs.
+ maps:get(confirms, maps:get(Ch, Channels)) =:= false;
+precondition(#cq{channels=Channels}, {call, _, cmd_channel_wait_for_confirms, [Ch]}) ->
+ %% Only wait for confirms when they were enabled.
+ maps:get(confirms, maps:get(Ch, Channels)) =:= true;
+precondition(#cq{channels=Channels}, {call, _, Cmd, [_, Ch]}) when
+ %% Using both consume and basic_get is non-deterministic.
+ Cmd =:= cmd_channel_basic_get;
+ %% Don't consume if we are already consuming on this channel.
+ Cmd =:= cmd_channel_consume ->
+ maps:get(consumer, maps:get(Ch, Channels)) =:= none;
+precondition(#cq{channels=Channels}, {call, _, Cmd, [_, Ch|_]}) when
+ %% Only cancel/receive when we are already consuming on this channel.
+ Cmd =:= cmd_channel_cancel; Cmd =:= cmd_channel_receive_and_ack;
+ Cmd =:= cmd_channel_receive_and_requeue; Cmd =:= cmd_channel_receive_and_discard;
+ Cmd =:= cmd_channel_receive_many_and_ack_ooo; Cmd =:= cmd_channel_receive_many_and_requeue_ooo;
+ Cmd =:= cmd_channel_receive_many_and_discard_ooo ->
+ maps:get(consumer, maps:get(Ch, Channels)) =/= none;
+precondition(_, _) ->
+ true.
+
+%% Postconditions.
+
+postcondition(_, {call, _, Cmd, _}, Q) when
+ Cmd =:= cmd_setup_queue; Cmd =:= cmd_restart_vhost_clean; Cmd =:= cmd_restart_queue_dirty ->
+ element(1, Q) =:= amqqueue;
+postcondition(_, {call, _, cmd_set_v2_check_crc32, _}, Res) ->
+ Res =:= ok;
+postcondition(#cq{amq=AMQ}, {call, _, cmd_set_mode, [_, Mode]}, _) ->
+ do_check_queue_mode(AMQ, Mode) =:= ok;
+postcondition(#cq{amq=AMQ}, {call, _, cmd_set_version, [_, Version]}, _) ->
+ do_check_queue_version(AMQ, Version) =:= ok;
+postcondition(#cq{amq=AMQ}, {call, _, cmd_set_mode_version, [Mode, Version]}, _) ->
+ (do_check_queue_mode(AMQ, Mode) =:= ok)
+ andalso
+ (do_check_queue_version(AMQ, Version) =:= ok);
+postcondition(_, {call, _, cmd_publish_msg, _}, Msg) ->
+ is_record(Msg, amqp_msg);
+postcondition(_, {call, _, cmd_purge, _}, Res) ->
+ element(1, Res) =:= ok;
+postcondition(_, {call, _, cmd_channel_open, _}, _) ->
+ true;
+postcondition(_, {call, _, cmd_channel_confirm_mode, _}, _) ->
+ true;
+postcondition(_, {call, _, cmd_channel_close, _}, Res) ->
+ Res =:= ok;
+postcondition(_, {call, _, cmd_channel_publish, _}, Msg) ->
+ is_record(Msg, amqp_msg);
+postcondition(_, {call, _, cmd_channel_publish_many, _}, Msgs) ->
+ lists:all(fun(Msg) -> is_record(Msg, amqp_msg) end, Msgs);
+postcondition(_, {call, _, cmd_channel_wait_for_confirms, _}, Res) ->
+ Res =:= true;
+postcondition(_, {call, _, cmd_channel_consume, _}, _) ->
+ true;
+postcondition(_, {call, _, cmd_channel_cancel, _}, _) ->
+ true;
+postcondition(St, {call, _, Cmd, Args}, empty) when
+ Cmd =:= cmd_basic_get_msg; Cmd =:= cmd_channel_basic_get ->
+ Ch = case Cmd of
+ cmd_basic_get_msg -> internal;
+ cmd_channel_basic_get -> lists:nth(2, Args)
+ end,
+ %% We may get 'empty' if there are/were consumers and the messages are
+ %% in transit.
+ has_consumers(St) orelse
+ %% Due to the asynchronous nature of publishing it may be
+ %% possible to have published a message but an immediate basic.get
+ %% on a separate channel cannot retrieve it. In that case we accept
+ %% an empty return value only if the channel we are calling
+ %% basic.get on has no messages published and not consumed.
+ not queue_has_channel(St, Ch) orelse
+ %% When messages can expire they will never be removed from the
+ %% property state because we cannot know whether the message
+ %% will be received later on (it was in transit when it expired).
+ %% Therefore we accept an empty response if all messages
+ %% sent via this particular channel have an expiration.
+ queue_part_all_expired(St, Ch);
+postcondition(St, {call, _, Cmd, _}, Msg) when
+ Cmd =:= cmd_basic_get_msg; Cmd =:= cmd_channel_basic_get ->
+ %% When there are active consumers we may receive
+ %% messages out of order because the commands are not running
+ %% in the same order as the messages sent to channels.
+ case has_consumers(St) of
+ true -> queue_has_msg(St, Msg);
+ false -> queue_head_has_msg(St, Msg)
+ end
+ orelse
+ %% After a restart, unconfirmed messages and previously
+ %% acked messages may or may not be received again, due
+ %% to a race condition.
+ restarted_and_previously_acked(St, Msg) orelse
+ restarted_and_uncertain_publish_status(St, Msg) orelse
+ crashed_and_previously_received(St, Msg);
+postcondition(_, {call, _, Cmd, _}, none) when
+ Cmd =:= cmd_channel_receive_and_ack;
+ Cmd =:= cmd_channel_receive_and_requeue;
+ Cmd =:= cmd_channel_receive_and_discard ->
+ true;
+postcondition(St, {call, _, Cmd, _}, Msg) when
+ Cmd =:= cmd_channel_receive_and_ack;
+ Cmd =:= cmd_channel_receive_and_requeue;
+ Cmd =:= cmd_channel_receive_and_discard ->
+ %% When there are multiple active consumers we may receive
+ %% messages out of order because the commands are not running
+ %% in the same order as the messages sent to channels.
+ %%
+ %% But because messages can be pending in the mailbox this can
+ %% be the case also when we had two consumers and one was
+ %% cancelled. So we do not verify the order of messages
+ %% when using consume.
+ queue_has_msg(St, Msg) orelse
+ %% After a restart, unconfirmed messages and previously
+ %% acked messages may or may not be received again, due
+ %% to a race condition.
+ restarted_and_previously_acked(St, Msg) orelse
+ restarted_and_uncertain_publish_status(St, Msg) orelse
+ crashed_and_previously_received(St, Msg);
+postcondition(St, {call, _, Cmd, _}, Msgs) when
+ Cmd =:= cmd_channel_receive_many_and_ack_ooo;
+ Cmd =:= cmd_channel_receive_many_and_requeue_ooo;
+ Cmd =:= cmd_channel_receive_many_and_discard_ooo ->
+ lists:all(fun(Msg) ->
+ queue_has_msg(St, Msg) orelse
+ restarted_and_previously_acked(St, Msg) orelse
+ restarted_and_uncertain_publish_status(St, Msg) orelse
+ crashed_and_previously_received(St, Msg)
+ end, Msgs).
+
+%% This function returns 'true' when there was a consumer at some point
+%% even if consumers were recently cancelled or closed.
+has_consumers(#cq{consumers=Consumers}) ->
+ Consumers.
+
+queue_has_channel(#cq{q=Q}, Ch) ->
+ maps:is_key(Ch, Q).
+
+queue_head_has_msg(#cq{q=Qs}, Msg) ->
+ maps:fold(fun
+ (_, _, true) ->
+ true;
+ (_, ChQ, _) ->
+ Res = queue_fold(fun
+ (MsgInQ, false) when MsgInQ =:= Msg ->
+ true;
+ (MsgInQ, false) ->
+ case MsgInQ of
+ %% We stop looking at the first message that doesn't have an expiration
+ %% as this is no longer the head of the queue.
+ #amqp_msg{props=#'P_basic'{expiration=undefined}} ->
+ end_of_head;
+ _ ->
+ false
+ end;
+ (_, Res0) ->
+ Res0
+ end, false, ChQ),
+ Res =:= true
+ end, false, Qs).
+
+queue_has_msg(#cq{q=Qs}, Msg) ->
+ maps:fold(fun
+ (_, _, true) ->
+ true;
+ (_, ChQ, _) ->
+ queue:member(Msg, ChQ)
+ end, false, Qs).
+
+queue_part_all_expired(#cq{q=Qs}, Key) ->
+ queue_all(fun(#amqp_msg{props=#'P_basic'{expiration=Expiration}}) ->
+ Expiration =/= undefined
+ end, maps:get(Key, Qs)).
+
+%% We may receive messages that were previously received and
+%% acked, but the server never received the ack because the
+%% vhost was restarting at the same time. Unfortunately the
+%% current implementation means that we cannot detect
+%% "receive, ack, receive again" errors after a restart.
+restarted_and_previously_acked(#cq{restarted=Restarted, acked=Acked}, Msg) ->
+ Restarted andalso lists:member(Msg, Acked).
+
+%% Some messages may have been published but lost during the
+%% restart (without publisher confirms). Messages we are
+%% uncertain about are kept in a separate list after restart.
+restarted_and_uncertain_publish_status(#cq{uncertain=Uncertain}, Msg) ->
+ lists:member(Msg, Uncertain).
+
+%% We may receive messages that were previously received
+%% via basic.get but the server never wrote the ack to disk
+%% before the queue process crashed. Unfortunately the
+%% current implementation means that we cannot detect
+%% "receive, ack, receive again" errors after a crash
+%% (because that's something we have to accept when
+%% crashes occur).
+crashed_and_previously_received(#cq{crashed=Crashed, received=Received}, Msg) ->
+ Crashed andalso lists:member(Msg, Received).
+
+%% Helpers.
+
+cmd_setup_queue(St=#cq{name=Name, mode=Mode, version=Version}) ->
+ ?DEBUG("~0p", [St]),
+ IsDurable = true, %% We want to be able to restart the queue process.
+ IsAutoDelete = false,
+ %% We cannot use args to set mode/version as the arguments override
+ %% the policies and we also want to test policy changes.
+ cmd_set_mode_version(Mode, Version),
+ Args = [
+% {<<"x-queue-mode">>, longstr, atom_to_binary(Mode, utf8)},
+% {<<"x-queue-version">>, long, Version}
+ ],
+ QName = rabbit_misc:r(<<"/">>, queue, iolist_to_binary([atom_to_binary(Name, utf8), $_,
+ integer_to_binary(erlang:unique_integer([positive]))])),
+ {new, AMQ} = rabbit_amqqueue:declare(QName, IsDurable, IsAutoDelete, Args, none, <<"acting-user">>),
+ %% We check that the queue was creating with the right mode/version.
+ ok = do_check_queue_mode(AMQ, Mode),
+ ok = do_check_queue_version(AMQ, Version),
+ AMQ.
+
+cmd_teardown_queue(St=#cq{amq=undefined}) ->
+ ?DEBUG("~0p", [St]),
+ ok;
+cmd_teardown_queue(St=#cq{amq=AMQ, channels=Channels}) ->
+ ?DEBUG("~0p", [St]),
+ %% We must close all channels since we will not be using them anymore.
+ %% Otherwise we end up wasting resources and may hit per-(direct)-connection limits.
+ %% We ignore noproc/shutdown errors at this step because the channel might have been
+ %% closed but the state not updated after the property test fails.
+ _ = [try cmd_channel_close(Ch) catch exit:{noproc,_} -> ok; exit:{shutdown,_} -> ok end
+ || Ch <- maps:keys(Channels)],
+ %% Then we can delete the queue.
+ rabbit_amqqueue:delete(AMQ, false, false, <<"acting-user">>),
+ rabbit_policy:delete(<<"/">>, <<"queue-mode-version-policy">>, <<"acting-user">>),
+ ok.
+
+cmd_restart_vhost_clean(St=#cq{amq=AMQ0}) ->
+ ?DEBUG("~0p", [St]),
+ rabbit_amqqueue:stop(<<"/">>),
+ {Recovered, []} = rabbit_amqqueue:recover(<<"/">>),
+ rabbit_amqqueue:start(Recovered),
+ %% We must lookup the new AMQ value because the state has changed,
+ %% notably the pid of the queue process is now different.
+ %%
+ %% We cannot use the AMQ found in Recovered directly because it is
+ %% in 'stopped' state. We have to look up the most recent value.
+ {ok, AMQ} = rabbit_amqqueue:lookup(amqqueue:get_name(AMQ0)),
+ AMQ.
+
+cmd_restart_queue_dirty(St=#cq{amq=AMQ}) ->
+ ?DEBUG("~0p", [St]),
+ Pid = rabbit_amqqueue:pid_of(AMQ),
+ exit(Pid, kill),
+ %% We must lookup the new AMQ value because the state has changed,
+ %% notably the pid of the queue process is now different.
+ Res = do_wait_updated_amqqueue(amqqueue:get_name(AMQ), Pid),
+ %% We make the channels drop the pending confirms because
+ %% they will be lost due to the crash.
+ #cq{channels=Channels} = St,
+ _ = [
+ amqp_channel:wait_for_confirms(Ch, {1, second})
+ || {Ch, #{confirms := true}} <- maps:to_list(Channels)],
+ Res.
+
+do_wait_updated_amqqueue(Name, Pid) ->
+ timer:sleep(1),
+ {ok, AMQ} = rabbit_amqqueue:lookup(Name),
+ case rabbit_amqqueue:pid_of(AMQ) of
+ Pid ->
+ do_wait_updated_amqqueue(Name, Pid);
+ _ ->
+ AMQ
+ end.
+
+cmd_set_v2_check_crc32(Value) ->
+ application:set_env(rabbit, classic_queue_store_v2_check_crc32, Value).
+
+cmd_set_mode(St=#cq{version=Version}, Mode) ->
+ ?DEBUG("~0p ~0p", [St, Mode]),
+ do_set_policy(Mode, Version).
+
+%% We loop until the queue has switched mode.
+do_check_queue_mode(AMQ, Mode) ->
+ do_check_queue_mode(AMQ, Mode, 1000).
+
+do_check_queue_mode(_, _, 0) ->
+ error;
+do_check_queue_mode(AMQ, Mode, N) ->
+ timer:sleep(1),
+ [{backing_queue_status, Status}] = rabbit_amqqueue:info(AMQ, [backing_queue_status]),
+ case proplists:get_value(mode, Status) of
+ Mode -> ok;
+ _ -> do_check_queue_mode(AMQ, Mode, N - 1)
+ end.
+
+cmd_set_version(St=#cq{mode=Mode}, Version) ->
+ ?DEBUG("~0p ~0p", [St, Version]),
+ do_set_policy(Mode, Version).
+
+%% We loop until the queue has switched version.
+do_check_queue_version(AMQ, Version) ->
+ do_check_queue_version(AMQ, Version, 1000).
+
+do_check_queue_version(_, _, 0) ->
+ error;
+do_check_queue_version(AMQ, Version, N) ->
+ timer:sleep(1),
+ [{backing_queue_status, Status}] = rabbit_amqqueue:info(AMQ, [backing_queue_status]),
+ case proplists:get_value(version, Status) of
+ Version -> ok;
+ _ -> do_check_queue_version(AMQ, Version, N - 1)
+ end.
+
+cmd_set_mode_version(Mode, Version) ->
+ ?DEBUG("~0p ~0p", [Mode, Version]),
+ do_set_policy(Mode, Version).
+
+do_set_policy(Mode, Version) ->
+ rabbit_policy:set(<<"/">>, <<"queue-mode-version-policy">>, <<".*">>,
+ [{<<"queue-mode">>, atom_to_binary(Mode, utf8)},
+ {<<"queue-version">>, Version}],
+ 0, <<"queues">>, <<"acting-user">>).
+
+cmd_publish_msg(St=#cq{amq=AMQ}, PayloadSize, DeliveryMode, Mandatory, Expiration) ->
+ ?DEBUG("~0p ~0p ~0p ~0p ~0p", [St, PayloadSize, DeliveryMode, Mandatory, Expiration]),
+ Payload = do_rand_payload(PayloadSize),
+ Msg = rabbit_basic:message(rabbit_misc:r(<<>>, exchange, <<>>),
+ <<>>, #'P_basic'{delivery_mode = DeliveryMode,
+ expiration = do_encode_expiration(Expiration)},
+ Payload),
+ Delivery = #delivery{mandatory = Mandatory, sender = self(),
+ confirm = false, message = Msg, flow = noflow},
+ ok = rabbit_amqqueue:deliver([AMQ], Delivery),
+ {MsgProps, MsgPayload} = rabbit_basic_common:from_content(Msg#basic_message.content),
+ #amqp_msg{props=MsgProps, payload=MsgPayload}.
+
+cmd_basic_get_msg(St=#cq{amq=AMQ, limiter=LimiterPid}) ->
+ ?DEBUG("~0p", [St]),
+ %% The second argument means that we will not be sending an ack message.
+ Res = rabbit_amqqueue:basic_get(AMQ, true, LimiterPid,
+ <<"cmd_basic_get_msg">>,
+ rabbit_queue_type:init()),
+ case Res of
+ {empty, _} ->
+ empty;
+ {ok, _CountMinusOne, {_QName, _QPid, _AckTag, _IsDelivered, Msg}, _} ->
+ {MsgProps, MsgPayload} = rabbit_basic_common:from_content(Msg#basic_message.content),
+ #amqp_msg{props=MsgProps, payload=MsgPayload}
+ end.
+
+cmd_purge(St=#cq{amq=AMQ}) ->
+ ?DEBUG("~0p", [St]),
+ rabbit_amqqueue:purge(AMQ).
+
+cmd_channel_open(St=#cq{config=Config}) ->
+ ?DEBUG("~0p", [St]),
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ rabbit_ct_client_helpers:open_channel(Config, Server).
+
+cmd_channel_confirm_mode(Ch) ->
+ ?DEBUG("~0p", [Ch]),
+ #'confirm.select_ok'{} = amqp_channel:call(Ch, #'confirm.select'{}),
+ ok.
+
+cmd_channel_close(Ch) ->
+ ?DEBUG("~0p", [Ch]),
+ %% We cannot close the channel with
+ %% rabbit_ct_client_helpers:close_channel(Ch)
+ %% because the pid is remote (it is in the CT node)
+ %% and the helper calls is_process_alive/1.
+ %% So instead we close directly.
+ amqp_channel:close(Ch).
+
+cmd_channel_publish(St=#cq{amq=AMQ}, Ch, PayloadSize, DeliveryMode, Mandatory, Expiration) ->
+ ?DEBUG("~0p ~0p ~0p ~0p ~0p ~0p", [St, Ch, PayloadSize, DeliveryMode, Mandatory, Expiration]),
+ #resource{name = Name} = amqqueue:get_name(AMQ),
+ Payload = do_rand_payload(PayloadSize),
+ Msg = #amqp_msg{props = #'P_basic'{delivery_mode = DeliveryMode,
+ expiration = do_encode_expiration(Expiration)},
+ payload = Payload},
+ ok = amqp_channel:call(Ch,
+ #'basic.publish'{routing_key = Name,
+ mandatory = Mandatory},
+ Msg),
+ Msg.
+
+cmd_channel_publish_many(St, Ch, Num, PayloadSize, DeliveryMode, Mandatory, Expiration) ->
+ ?DEBUG("~0p ~0p ~0p ~0p ~0p ~0p ~0p", [St, Ch, Num, PayloadSize, DeliveryMode, Mandatory, Expiration]),
+ [cmd_channel_publish(St, Ch, PayloadSize, DeliveryMode, Mandatory, Expiration) || _ <- lists:seq(1, Num)].
+
+cmd_channel_wait_for_confirms(Ch) ->
+ ?DEBUG("~0p", [Ch]),
+ amqp_channel:wait_for_confirms(Ch, {1, second}).
+
+cmd_channel_basic_get(St=#cq{amq=AMQ}, Ch) ->
+ ?DEBUG("~0p ~0p", [St, Ch]),
+ #resource{name = Name} = amqqueue:get_name(AMQ),
+ case amqp_channel:call(Ch, #'basic.get'{queue = Name, no_ack = true}) of
+ #'basic.get_empty'{} ->
+ empty;
+ {_GetOk = #'basic.get_ok'{}, Msg} ->
+ Msg
+ end.
+
+cmd_channel_consume(St=#cq{amq=AMQ}, Ch) ->
+ ?DEBUG("~0p ~0p", [St, Ch]),
+ %% We register ourselves as a default consumer to avoid race conditions
+ %% when we try to cancel the channel after the server has already canceled
+ %% it, or when the server sends messages after we have canceled the channel.
+ %% This works around a limitation of the current code of the Erlang client.
+ ok = amqp_selective_consumer:register_default_consumer(Ch, self()),
+ #resource{name = Name} = amqqueue:get_name(AMQ),
+ Tag = integer_to_binary(erlang:unique_integer([positive])),
+ #'basic.consume_ok'{} =
+ amqp_channel:call(Ch,
+ #'basic.consume'{queue = Name, consumer_tag = Tag}),
+ receive #'basic.consume_ok'{consumer_tag = Tag} -> ok end,
+ Tag.
+
+cmd_channel_cancel(St=#cq{channels=Channels}, Ch) ->
+ ?DEBUG("~0p ~0p", [St, Ch]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ #'basic.cancel_ok'{} =
+ amqp_channel:call(Ch, #'basic.cancel'{consumer_tag = Tag}),
+ receive #'basic.cancel_ok'{consumer_tag = Tag} -> ok end,
+ %% We have to requeue the messages in transit to preserve ordering.
+ do_receive_requeue_all(Ch, Tag).
+
+cmd_channel_receive_and_ack(St=#cq{channels=Channels}, Ch) ->
+ ?DEBUG("~0p ~0p", [St, Ch]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, Msg} ->
+ amqp_channel:cast(Ch, #'basic.ack'{delivery_tag = DeliveryTag}),
+ Msg
+ after 0 ->
+ none
+ end.
+
+cmd_channel_receive_and_requeue(St=#cq{channels=Channels}, Ch) ->
+ ?DEBUG("~0p ~0p", [St, Ch]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, Msg} ->
+ amqp_channel:cast(Ch, #'basic.reject'{delivery_tag = DeliveryTag}),
+ Msg
+ after 0 ->
+ none
+ end.
+
+cmd_channel_receive_and_discard(St=#cq{channels=Channels}, Ch) ->
+ ?DEBUG("~0p ~0p", [St, Ch]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, Msg} ->
+ amqp_channel:cast(Ch, #'basic.reject'{delivery_tag = DeliveryTag, requeue=false}),
+ Msg
+ after 0 ->
+ none
+ end.
+
+cmd_channel_receive_many_and_ack_ooo(St=#cq{channels=Channels}, Ch, Num) ->
+ ?DEBUG("~0p ~0p ~0p", [St, Ch, Num]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ do_cmd_channel_receive_many_and_ack_ooo_loop(Tag, Ch, Num, [], []).
+
+do_cmd_channel_receive_many_and_ack_ooo_loop(_, Ch, 0, TagAcc, MsgAcc) ->
+ RandomTagAcc = [T || {_, T} <- lists:sort([{rand:uniform(), T} || T <- TagAcc])],
+ _ = [amqp_channel:cast(Ch, #'basic.ack'{delivery_tag = T}) || T <- RandomTagAcc],
+ lists:reverse(MsgAcc);
+do_cmd_channel_receive_many_and_ack_ooo_loop(Tag, Ch, Num, TagAcc, MsgAcc) ->
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, Msg} ->
+ do_cmd_channel_receive_many_and_ack_ooo_loop(Tag, Ch, Num - 1, [DeliveryTag|TagAcc], [Msg|MsgAcc])
+ after 0 ->
+ do_cmd_channel_receive_many_and_ack_ooo_loop(Tag, Ch, 0, TagAcc, MsgAcc)
+ end.
+
+cmd_channel_receive_many_and_requeue_ooo(St=#cq{channels=Channels}, Ch, Num) ->
+ ?DEBUG("~0p ~0p ~0p", [St, Ch, Num]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ do_cmd_channel_receive_many_and_requeue_ooo_loop(Tag, Ch, Num, [], []).
+
+do_cmd_channel_receive_many_and_requeue_ooo_loop(_, Ch, 0, TagAcc, MsgAcc) ->
+ RandomTagAcc = [T || {_, T} <- lists:sort([{rand:uniform(), T} || T <- TagAcc])],
+ _ = [amqp_channel:cast(Ch, #'basic.reject'{delivery_tag = T}) || T <- RandomTagAcc],
+ lists:reverse(MsgAcc);
+do_cmd_channel_receive_many_and_requeue_ooo_loop(Tag, Ch, Num, TagAcc, MsgAcc) ->
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, Msg} ->
+ do_cmd_channel_receive_many_and_requeue_ooo_loop(Tag, Ch, Num - 1, [DeliveryTag|TagAcc], [Msg|MsgAcc])
+ after 0 ->
+ do_cmd_channel_receive_many_and_requeue_ooo_loop(Tag, Ch, 0, TagAcc, MsgAcc)
+ end.
+
+cmd_channel_receive_many_and_discard_ooo(St=#cq{channels=Channels}, Ch, Num) ->
+ ?DEBUG("~0p ~0p ~0p", [St, Ch, Num]),
+ #{consumer := Tag} = maps:get(Ch, Channels),
+ do_cmd_channel_receive_many_and_discard_ooo_loop(Tag, Ch, Num, [], []).
+
+do_cmd_channel_receive_many_and_discard_ooo_loop(_, Ch, 0, TagAcc, MsgAcc) ->
+ RandomTagAcc = [T || {_, T} <- lists:sort([{rand:uniform(), T} || T <- TagAcc])],
+ _ = [amqp_channel:cast(Ch, #'basic.reject'{delivery_tag = T, requeue=false}) || T <- RandomTagAcc],
+ lists:reverse(MsgAcc);
+do_cmd_channel_receive_many_and_discard_ooo_loop(Tag, Ch, Num, TagAcc, MsgAcc) ->
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, Msg} ->
+ do_cmd_channel_receive_many_and_discard_ooo_loop(Tag, Ch, Num - 1, [DeliveryTag|TagAcc], [Msg|MsgAcc])
+ after 0 ->
+ do_cmd_channel_receive_many_and_discard_ooo_loop(Tag, Ch, 0, TagAcc, MsgAcc)
+ end.
+
+do_receive_requeue_all(Ch, Tag) ->
+ receive
+ {#'basic.deliver'{consumer_tag = Tag,
+ delivery_tag = DeliveryTag}, _Msg} ->
+ amqp_channel:cast(Ch, #'basic.reject'{delivery_tag = DeliveryTag}),
+ do_receive_requeue_all(Ch, Tag)
+ after 0 ->
+ ok
+ end.
+
+do_encode_expiration(undefined) -> undefined;
+do_encode_expiration(Expiration) -> integer_to_binary(Expiration).
+
+do_rand_payload(PayloadSize) ->
+ Prefix = integer_to_binary(erlang:unique_integer([positive])),
+ case erlang:function_exported(rand, bytes, 1) of
+ true -> iolist_to_binary([Prefix, rand:bytes(PayloadSize)]);
+ %% Slower failover for OTP < 24.0.
+ false -> iolist_to_binary([Prefix, crypto:strong_rand_bytes(PayloadSize)])
+ end.
+
+%% This function was copied from OTP 24 and should be replaced
+%% with queue:all/2 when support for OTP 23 is no longer needed.
+queue_all(Pred, {R, F}) when is_function(Pred, 1), is_list(R), is_list(F) ->
+ lists:all(Pred, F) andalso
+ lists:all(Pred, R);
+queue_all(Pred, Q) ->
+ erlang:error(badarg, [Pred, Q]).
+
+%% This function was copied from OTP 24 and should be replaced
+%% with queue:delete/2 when support for OTP 23 is no longer needed.
+%%
+%% The helper functions delete_front, delete_rear, r2f, f2r
+%% can be removed at the same time.
+queue_delete(Item, {R0, F0} = Q) when is_list(R0), is_list(F0) ->
+ case delete_front(Item, F0) of
+ false ->
+ case delete_rear(Item, R0) of
+ false ->
+ Q;
+ [] ->
+ f2r(F0);
+ R1 ->
+ {R1, F0}
+ end;
+ [] ->
+ r2f(R0);
+ F1 ->
+ {R0, F1}
+ end;
+queue_delete(Item, Q) ->
+ erlang:error(badarg, [Item, Q]).
+
+delete_front(Item, [Item|Rest]) ->
+ Rest;
+delete_front(Item, [X|Rest]) ->
+ case delete_front(Item, Rest) of
+ false -> false;
+ F -> [X|F]
+ end;
+delete_front(_, []) ->
+ false.
+
+delete_rear(Item, [X|Rest]) ->
+ case delete_rear(Item, Rest) of
+ false when X=:=Item ->
+ Rest;
+ false ->
+ false;
+ R ->
+ [X|R]
+ end;
+delete_rear(_, []) ->
+ false.
+
+-compile({inline, [{r2f,1},{f2r,1}]}).
+
+%% Move half of elements from R to F, if there are at least three
+r2f([]) ->
+ {[],[]};
+r2f([_]=R) ->
+ {[],R};
+r2f([X,Y]) ->
+ {[X],[Y]};
+r2f(List) ->
+ {FF,RR} = lists:split(length(List) div 2 + 1, List),
+ {FF,lists:reverse(RR, [])}.
+
+%% Move half of elements from F to R, if there are enough
+f2r([]) ->
+ {[],[]};
+f2r([_]=F) ->
+ {F,[]};
+f2r([X,Y]) ->
+ {[Y],[X]};
+f2r(List) ->
+ {FF,RR} = lists:split(length(List) div 2 + 1, List),
+ {lists:reverse(RR, []),FF}.
+
+%% This function was copied from OTP 24 and should be replaced
+%% with queue:fold/3 when support for OTP 23 is no longer needed.
+queue_fold(Fun, Acc0, {R, F}) when is_function(Fun, 2), is_list(R), is_list(F) ->
+ Acc1 = lists:foldl(Fun, Acc0, F),
+ lists:foldr(Fun, Acc1, R);
+queue_fold(Fun, Acc0, Q) ->
+ erlang:error(badarg, [Fun, Acc0, Q]).
diff --git a/deps/rabbit/test/cluster_SUITE.erl b/deps/rabbit/test/cluster_SUITE.erl
index 657882d440..e7655032c4 100644
--- a/deps/rabbit/test/cluster_SUITE.erl
+++ b/deps/rabbit/test/cluster_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(cluster_SUITE).
diff --git a/deps/rabbit/test/cluster_rename_SUITE.erl b/deps/rabbit/test/cluster_rename_SUITE.erl
index 57594ba07b..057dc433f2 100644
--- a/deps/rabbit/test/cluster_rename_SUITE.erl
+++ b/deps/rabbit/test/cluster_rename_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(cluster_rename_SUITE).
diff --git a/deps/rabbit/test/clustering_management_SUITE.erl b/deps/rabbit/test/clustering_management_SUITE.erl
index 0204672f11..6fc253b1d4 100644
--- a/deps/rabbit/test/clustering_management_SUITE.erl
+++ b/deps/rabbit/test/clustering_management_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(clustering_management_SUITE).
diff --git a/deps/rabbit/test/config_schema_SUITE.erl b/deps/rabbit/test/config_schema_SUITE.erl
index d5dd7460ad..9a1da580fb 100644
--- a/deps/rabbit/test/config_schema_SUITE.erl
+++ b/deps/rabbit/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbit/test/consumer_timeout_SUITE.erl b/deps/rabbit/test/consumer_timeout_SUITE.erl
index 1a956ca843..8ba7ac059b 100644
--- a/deps/rabbit/test/consumer_timeout_SUITE.erl
+++ b/deps/rabbit/test/consumer_timeout_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(consumer_timeout_SUITE).
diff --git a/deps/rabbit/test/crashing_queues_SUITE.erl b/deps/rabbit/test/crashing_queues_SUITE.erl
index 371914347d..c756b0a73c 100644
--- a/deps/rabbit/test/crashing_queues_SUITE.erl
+++ b/deps/rabbit/test/crashing_queues_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(crashing_queues_SUITE).
diff --git a/deps/rabbit/test/dead_lettering_SUITE.erl b/deps/rabbit/test/dead_lettering_SUITE.erl
index 4eca83c8bc..1b8f596dba 100644
--- a/deps/rabbit/test/dead_lettering_SUITE.erl
+++ b/deps/rabbit/test/dead_lettering_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% For the full spec see: https://www.rabbitmq.com/dlx.html
%%
diff --git a/deps/rabbit/test/disconnect_detected_during_alarm_SUITE.erl b/deps/rabbit/test/disconnect_detected_during_alarm_SUITE.erl
index d32cf306bd..ecf38a24de 100644
--- a/deps/rabbit/test/disconnect_detected_during_alarm_SUITE.erl
+++ b/deps/rabbit/test/disconnect_detected_during_alarm_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(disconnect_detected_during_alarm_SUITE).
diff --git a/deps/rabbit/test/dummy_event_receiver.erl b/deps/rabbit/test/dummy_event_receiver.erl
index 6267d1c9c5..553875d3a0 100644
--- a/deps/rabbit/test/dummy_event_receiver.erl
+++ b/deps/rabbit/test/dummy_event_receiver.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(dummy_event_receiver).
diff --git a/deps/rabbit/test/dummy_runtime_parameters.erl b/deps/rabbit/test/dummy_runtime_parameters.erl
index 07bc33e602..03244cfb3b 100644
--- a/deps/rabbit/test/dummy_runtime_parameters.erl
+++ b/deps/rabbit/test/dummy_runtime_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(dummy_runtime_parameters).
diff --git a/deps/rabbit/test/dummy_supervisor2.erl b/deps/rabbit/test/dummy_supervisor2.erl
index 210acbef21..0c288d30bc 100644
--- a/deps/rabbit/test/dummy_supervisor2.erl
+++ b/deps/rabbit/test/dummy_supervisor2.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(dummy_supervisor2).
diff --git a/deps/rabbit/test/dynamic_ha_SUITE.erl b/deps/rabbit/test/dynamic_ha_SUITE.erl
index 2492a2c577..a79d09fa11 100644
--- a/deps/rabbit/test/dynamic_ha_SUITE.erl
+++ b/deps/rabbit/test/dynamic_ha_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(dynamic_ha_SUITE).
diff --git a/deps/rabbit/test/dynamic_qq_SUITE.erl b/deps/rabbit/test/dynamic_qq_SUITE.erl
index a878e1e4db..4e681f6f20 100644
--- a/deps/rabbit/test/dynamic_qq_SUITE.erl
+++ b/deps/rabbit/test/dynamic_qq_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(dynamic_qq_SUITE).
diff --git a/deps/rabbit/test/eager_sync_SUITE.erl b/deps/rabbit/test/eager_sync_SUITE.erl
index 9605b14155..21612f9ea2 100644
--- a/deps/rabbit/test/eager_sync_SUITE.erl
+++ b/deps/rabbit/test/eager_sync_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(eager_sync_SUITE).
diff --git a/deps/rabbit/test/feature_flags_SUITE.erl b/deps/rabbit/test/feature_flags_SUITE.erl
index c98369f596..da0283e78d 100644
--- a/deps/rabbit/test/feature_flags_SUITE.erl
+++ b/deps/rabbit/test/feature_flags_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(feature_flags_SUITE).
diff --git a/deps/rabbit/test/feature_flags_SUITE_data/my_plugin/src/my_plugin.erl b/deps/rabbit/test/feature_flags_SUITE_data/my_plugin/src/my_plugin.erl
index 2dd648c080..b15474d3b9 100644
--- a/deps/rabbit/test/feature_flags_SUITE_data/my_plugin/src/my_plugin.erl
+++ b/deps/rabbit/test/feature_flags_SUITE_data/my_plugin/src/my_plugin.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(my_plugin).
diff --git a/deps/rabbit/test/feature_flags_with_unpriveleged_user_SUITE.erl b/deps/rabbit/test/feature_flags_with_unpriveleged_user_SUITE.erl
index bf01e2c181..96cb0b542a 100644
--- a/deps/rabbit/test/feature_flags_with_unpriveleged_user_SUITE.erl
+++ b/deps/rabbit/test/feature_flags_with_unpriveleged_user_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(feature_flags_with_unpriveleged_user_SUITE).
diff --git a/deps/rabbit/test/lazy_queue_SUITE.erl b/deps/rabbit/test/lazy_queue_SUITE.erl
index 810c9e6f0c..7f91f2c3fb 100644
--- a/deps/rabbit/test/lazy_queue_SUITE.erl
+++ b/deps/rabbit/test/lazy_queue_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(lazy_queue_SUITE).
diff --git a/deps/rabbit/test/list_consumers_sanity_check_SUITE.erl b/deps/rabbit/test/list_consumers_sanity_check_SUITE.erl
index 5bc9e3ead5..0825c3bfaf 100644
--- a/deps/rabbit/test/list_consumers_sanity_check_SUITE.erl
+++ b/deps/rabbit/test/list_consumers_sanity_check_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(list_consumers_sanity_check_SUITE).
diff --git a/deps/rabbit/test/list_queues_online_and_offline_SUITE.erl b/deps/rabbit/test/list_queues_online_and_offline_SUITE.erl
index 03c0791f10..aa10f52bc2 100644
--- a/deps/rabbit/test/list_queues_online_and_offline_SUITE.erl
+++ b/deps/rabbit/test/list_queues_online_and_offline_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(list_queues_online_and_offline_SUITE).
diff --git a/deps/rabbit/test/logging_SUITE.erl b/deps/rabbit/test/logging_SUITE.erl
index 57bc11d8ca..dc9a0a9114 100644
--- a/deps/rabbit/test/logging_SUITE.erl
+++ b/deps/rabbit/test/logging_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(logging_SUITE).
diff --git a/deps/rabbit/test/maintenance_mode_SUITE.erl b/deps/rabbit/test/maintenance_mode_SUITE.erl
index 23c4e2f32d..591586e05c 100644
--- a/deps/rabbit/test/maintenance_mode_SUITE.erl
+++ b/deps/rabbit/test/maintenance_mode_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(maintenance_mode_SUITE).
diff --git a/deps/rabbit/test/many_node_ha_SUITE.erl b/deps/rabbit/test/many_node_ha_SUITE.erl
index c72c3c5946..4735cd81d1 100644
--- a/deps/rabbit/test/many_node_ha_SUITE.erl
+++ b/deps/rabbit/test/many_node_ha_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(many_node_ha_SUITE).
diff --git a/deps/rabbit/test/message_size_limit_SUITE.erl b/deps/rabbit/test/message_size_limit_SUITE.erl
index 97a8497010..486c6a2ce1 100644
--- a/deps/rabbit/test/message_size_limit_SUITE.erl
+++ b/deps/rabbit/test/message_size_limit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(message_size_limit_SUITE).
diff --git a/deps/rabbit/test/metrics_SUITE.erl b/deps/rabbit/test/metrics_SUITE.erl
index 446d54efdd..ee7a603639 100644
--- a/deps/rabbit/test/metrics_SUITE.erl
+++ b/deps/rabbit/test/metrics_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(metrics_SUITE).
-compile(export_all).
diff --git a/deps/rabbit/test/mirrored_supervisor_SUITE.erl b/deps/rabbit/test/mirrored_supervisor_SUITE.erl
index 04c93c2e56..e17c287e5b 100644
--- a/deps/rabbit/test/mirrored_supervisor_SUITE.erl
+++ b/deps/rabbit/test/mirrored_supervisor_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mirrored_supervisor_SUITE).
diff --git a/deps/rabbit/test/mirrored_supervisor_SUITE_gs.erl b/deps/rabbit/test/mirrored_supervisor_SUITE_gs.erl
index 16743f6a58..43c524685c 100644
--- a/deps/rabbit/test/mirrored_supervisor_SUITE_gs.erl
+++ b/deps/rabbit/test/mirrored_supervisor_SUITE_gs.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mirrored_supervisor_SUITE_gs).
diff --git a/deps/rabbit/test/msg_store_SUITE.erl b/deps/rabbit/test/msg_store_SUITE.erl
index 6add6dcae0..4b88f1c24b 100644
--- a/deps/rabbit/test/msg_store_SUITE.erl
+++ b/deps/rabbit/test/msg_store_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(msg_store_SUITE).
diff --git a/deps/rabbit/test/peer_discovery_classic_config_SUITE.erl b/deps/rabbit/test/peer_discovery_classic_config_SUITE.erl
index 7ec621088c..8fb3cf421b 100644
--- a/deps/rabbit/test/peer_discovery_classic_config_SUITE.erl
+++ b/deps/rabbit/test/peer_discovery_classic_config_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(peer_discovery_classic_config_SUITE).
diff --git a/deps/rabbit/test/peer_discovery_dns_SUITE.erl b/deps/rabbit/test/peer_discovery_dns_SUITE.erl
index 34faccc7e5..05c7e0a65d 100644
--- a/deps/rabbit/test/peer_discovery_dns_SUITE.erl
+++ b/deps/rabbit/test/peer_discovery_dns_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(peer_discovery_dns_SUITE).
diff --git a/deps/rabbit/test/per_user_connection_channel_limit_SUITE.erl b/deps/rabbit/test/per_user_connection_channel_limit_SUITE.erl
index 9edbc8761a..0638eeeb6b 100644
--- a/deps/rabbit/test/per_user_connection_channel_limit_SUITE.erl
+++ b/deps/rabbit/test/per_user_connection_channel_limit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_user_connection_channel_limit_SUITE).
diff --git a/deps/rabbit/test/per_user_connection_channel_limit_partitions_SUITE.erl b/deps/rabbit/test/per_user_connection_channel_limit_partitions_SUITE.erl
index 2f856de4b5..bfd9dc9033 100644
--- a/deps/rabbit/test/per_user_connection_channel_limit_partitions_SUITE.erl
+++ b/deps/rabbit/test/per_user_connection_channel_limit_partitions_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_user_connection_channel_limit_partitions_SUITE).
diff --git a/deps/rabbit/test/per_user_connection_channel_tracking_SUITE.erl b/deps/rabbit/test/per_user_connection_channel_tracking_SUITE.erl
index cc99d06ec3..79190dc2ff 100644
--- a/deps/rabbit/test/per_user_connection_channel_tracking_SUITE.erl
+++ b/deps/rabbit/test/per_user_connection_channel_tracking_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_user_connection_channel_tracking_SUITE).
diff --git a/deps/rabbit/test/per_user_connection_tracking_SUITE.erl b/deps/rabbit/test/per_user_connection_tracking_SUITE.erl
index 9a3243d0ac..020df0e8dd 100644
--- a/deps/rabbit/test/per_user_connection_tracking_SUITE.erl
+++ b/deps/rabbit/test/per_user_connection_tracking_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_user_connection_tracking_SUITE).
diff --git a/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl b/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl
index c6ddafeb60..0ff26af40c 100644
--- a/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl
+++ b/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_vhost_connection_limit_SUITE).
diff --git a/deps/rabbit/test/per_vhost_connection_limit_partitions_SUITE.erl b/deps/rabbit/test/per_vhost_connection_limit_partitions_SUITE.erl
index 4b2f3c491c..ddf7945c43 100644
--- a/deps/rabbit/test/per_vhost_connection_limit_partitions_SUITE.erl
+++ b/deps/rabbit/test/per_vhost_connection_limit_partitions_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_vhost_connection_limit_partitions_SUITE).
diff --git a/deps/rabbit/test/per_vhost_msg_store_SUITE.erl b/deps/rabbit/test/per_vhost_msg_store_SUITE.erl
index ea5e98996d..ec1661a7b9 100644
--- a/deps/rabbit/test/per_vhost_msg_store_SUITE.erl
+++ b/deps/rabbit/test/per_vhost_msg_store_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_vhost_msg_store_SUITE).
diff --git a/deps/rabbit/test/per_vhost_queue_limit_SUITE.erl b/deps/rabbit/test/per_vhost_queue_limit_SUITE.erl
index da13f40e19..a1e4d5a56a 100644
--- a/deps/rabbit/test/per_vhost_queue_limit_SUITE.erl
+++ b/deps/rabbit/test/per_vhost_queue_limit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(per_vhost_queue_limit_SUITE).
diff --git a/deps/rabbit/test/policy_SUITE.erl b/deps/rabbit/test/policy_SUITE.erl
index 8b05d73de5..34c9507878 100644
--- a/deps/rabbit/test/policy_SUITE.erl
+++ b/deps/rabbit/test/policy_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(policy_SUITE).
diff --git a/deps/rabbit/test/priority_queue_SUITE.erl b/deps/rabbit/test/priority_queue_SUITE.erl
index dba04a967d..9fed3fcfe8 100644
--- a/deps/rabbit/test/priority_queue_SUITE.erl
+++ b/deps/rabbit/test/priority_queue_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(priority_queue_SUITE).
diff --git a/deps/rabbit/test/priority_queue_recovery_SUITE.erl b/deps/rabbit/test/priority_queue_recovery_SUITE.erl
index 732efbe9bd..38fc48f585 100644
--- a/deps/rabbit/test/priority_queue_recovery_SUITE.erl
+++ b/deps/rabbit/test/priority_queue_recovery_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(priority_queue_recovery_SUITE).
diff --git a/deps/rabbit/test/product_info_SUITE.erl b/deps/rabbit/test/product_info_SUITE.erl
index 7899d62572..ee8fcc6554 100644
--- a/deps/rabbit/test/product_info_SUITE.erl
+++ b/deps/rabbit/test/product_info_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(product_info_SUITE).
diff --git a/deps/rabbit/test/proxy_protocol_SUITE.erl b/deps/rabbit/test/proxy_protocol_SUITE.erl
index c90e3efca8..19f94c6873 100644
--- a/deps/rabbit/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbit/test/proxy_protocol_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(proxy_protocol_SUITE).
diff --git a/deps/rabbit/test/publisher_confirms_parallel_SUITE.erl b/deps/rabbit/test/publisher_confirms_parallel_SUITE.erl
index 30bc5f8ba6..761c2094b5 100644
--- a/deps/rabbit/test/publisher_confirms_parallel_SUITE.erl
+++ b/deps/rabbit/test/publisher_confirms_parallel_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(publisher_confirms_parallel_SUITE).
diff --git a/deps/rabbit/test/queue_length_limits_SUITE.erl b/deps/rabbit/test/queue_length_limits_SUITE.erl
index fe0436d6c5..cd7f0e79b6 100644
--- a/deps/rabbit/test/queue_length_limits_SUITE.erl
+++ b/deps/rabbit/test/queue_length_limits_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(queue_length_limits_SUITE).
diff --git a/deps/rabbit/test/queue_master_location_SUITE.erl b/deps/rabbit/test/queue_master_location_SUITE.erl
index b7b838bfe7..5dfd7f2a54 100644
--- a/deps/rabbit/test/queue_master_location_SUITE.erl
+++ b/deps/rabbit/test/queue_master_location_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(queue_master_location_SUITE).
diff --git a/deps/rabbit/test/queue_parallel_SUITE.erl b/deps/rabbit/test/queue_parallel_SUITE.erl
index f8eb9191aa..1ae797a34a 100644
--- a/deps/rabbit/test/queue_parallel_SUITE.erl
+++ b/deps/rabbit/test/queue_parallel_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%%
-module(queue_parallel_SUITE).
diff --git a/deps/rabbit/test/quorum_queue_SUITE.erl b/deps/rabbit/test/quorum_queue_SUITE.erl
index ce507e2746..525e30fabe 100644
--- a/deps/rabbit/test/quorum_queue_SUITE.erl
+++ b/deps/rabbit/test/quorum_queue_SUITE.erl
@@ -2,8 +2,12 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
+<<<<<<< HEAD
%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
%%
+=======
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
+>>>>>>> 515780f5d4 (Bump (c) year)
-module(quorum_queue_SUITE).
diff --git a/deps/rabbit/test/rabbit_auth_backend_context_propagation_mock.erl b/deps/rabbit/test/rabbit_auth_backend_context_propagation_mock.erl
index 9a05bf09cd..9dfb9f0876 100644
--- a/deps/rabbit/test/rabbit_auth_backend_context_propagation_mock.erl
+++ b/deps/rabbit/test/rabbit_auth_backend_context_propagation_mock.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% A mock authn/authz that records information during calls. For testing purposes only.
diff --git a/deps/rabbit/test/rabbit_core_metrics_gc_SUITE.erl b/deps/rabbit/test/rabbit_core_metrics_gc_SUITE.erl
index 93312f597d..64392039e2 100644
--- a/deps/rabbit/test/rabbit_core_metrics_gc_SUITE.erl
+++ b/deps/rabbit/test/rabbit_core_metrics_gc_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_core_metrics_gc_SUITE).
diff --git a/deps/rabbit/test/rabbit_dummy_protocol_connection_info.erl b/deps/rabbit/test/rabbit_dummy_protocol_connection_info.erl
index 67bf3df9bb..c0e9a9d5a7 100644
--- a/deps/rabbit/test/rabbit_dummy_protocol_connection_info.erl
+++ b/deps/rabbit/test/rabbit_dummy_protocol_connection_info.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Dummy module to test rabbit_direct:extract_extra_auth_props
diff --git a/deps/rabbit/test/rabbit_fifo_dlx_SUITE.erl b/deps/rabbit/test/rabbit_fifo_dlx_SUITE.erl
new file mode 100644
index 0000000000..e6da11ae54
--- /dev/null
+++ b/deps/rabbit/test/rabbit_fifo_dlx_SUITE.erl
@@ -0,0 +1,201 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+-module(rabbit_fifo_dlx_SUITE).
+
+-compile(nowarn_export_all).
+-compile(export_all).
+
+-include_lib("eunit/include/eunit.hrl").
+-include_lib("rabbit/src/rabbit_fifo.hrl").
+-include_lib("rabbit/src/rabbit_fifo_dlx.hrl").
+-include_lib("rabbit_common/include/rabbit.hrl").
+
+%%%===================================================================
+%%% Common Test callbacks
+%%%===================================================================
+
+all() ->
+ [
+ {group, tests}
+ ].
+
+
+groups() ->
+ [
+ {tests, [], [handler_undefined,
+ handler_at_most_once,
+ discard_dlx_consumer,
+ switch_strategies,
+ last_consumer_wins]}
+ ].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_Group, Config) ->
+ Config.
+
+end_per_group(_Group, _Config) ->
+ ok.
+
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+%%%===================================================================
+%%% Test cases
+%%%===================================================================
+
+handler_undefined(_Config) ->
+ S = rabbit_fifo_dlx:init(),
+ Handler = undefined,
+ ?assertEqual({S, [{mod_call, rabbit_global_counters, messages_dead_lettered,
+ [because, rabbit_quorum_queue, disabled, 1]}]},
+ rabbit_fifo_dlx:discard([make_msg(1)], because, Handler, S)),
+ ok.
+
+handler_at_most_once(_Config) ->
+ S = rabbit_fifo_dlx:init(),
+ Handler = {at_most_once, {m, f, [a]}},
+ {S, Effects} = rabbit_fifo_dlx:discard([make_msg(1),
+ make_msg(2)], because, Handler, S),
+ ?assertMatch([{log, [1, 2], _}], Effects),
+ ok.
+
+discard_dlx_consumer(_Config) ->
+ Handler = at_least_once,
+ S0 = rabbit_fifo_dlx:init(),
+ ?assertEqual(#{num_discarded => 0,
+ num_discard_checked_out => 0,
+ discard_message_bytes => 0,
+ discard_checkout_message_bytes => 0}, rabbit_fifo_dlx:overview(S0)),
+
+ %% message without dlx consumer
+ {S1, [{mod_call, rabbit_global_counters, messages_dead_lettered,
+ [because, rabbit_quorum_queue, at_least_once, 1]}]} =
+ rabbit_fifo_dlx:discard([make_msg(1)], because, Handler, S0),
+ {S2, []} = rabbit_fifo_dlx:checkout(Handler, S1),
+ ?assertEqual(#{num_discarded => 1,
+ num_discard_checked_out => 0,
+ discard_message_bytes => 1,
+ discard_checkout_message_bytes => 0}, rabbit_fifo_dlx:overview(S2)),
+
+ %% with dlx consumer
+ Checkout = rabbit_fifo_dlx:make_checkout(self(), 2),
+ {S3, []} = rabbit_fifo_dlx:apply(meta(2), Checkout, Handler, S2),
+ {S4, DeliveryEffects0} = rabbit_fifo_dlx:checkout(Handler, S3),
+ ?assertEqual(#{num_discarded => 0,
+ num_discard_checked_out => 1,
+ discard_message_bytes => 0,
+ discard_checkout_message_bytes => 1}, rabbit_fifo_dlx:overview(S4)),
+ ?assertMatch([{log, [1], _}], DeliveryEffects0),
+
+ %% more messages than dlx consumer's prefetch
+ {S5, [_ModCallGlobalCounter]} = rabbit_fifo_dlx:discard([make_msg(3), make_msg(4)], because, Handler, S4),
+ {S6, DeliveryEffects1} = rabbit_fifo_dlx:checkout(Handler, S5),
+ ?assertEqual(#{num_discarded => 1,
+ num_discard_checked_out => 2,
+ discard_message_bytes => 1,
+ discard_checkout_message_bytes => 2}, rabbit_fifo_dlx:overview(S6)),
+ ?assertMatch([{log, [3], _}], DeliveryEffects1),
+ ?assertEqual({3, 3}, rabbit_fifo_dlx:stat(S6)),
+
+ %% dlx consumer acks messages
+ Settle = rabbit_fifo_dlx:make_settle([0,1]),
+ {S7, [{mod_call, rabbit_global_counters, messages_dead_lettered_confirmed,
+ [rabbit_quorum_queue, at_least_once, 2]}]} =
+ rabbit_fifo_dlx:apply(meta(5), Settle, Handler, S6),
+ {S8, DeliveryEffects2} = rabbit_fifo_dlx:checkout(Handler, S7),
+ ?assertEqual(#{num_discarded => 0,
+ num_discard_checked_out => 1,
+ discard_message_bytes => 0,
+ discard_checkout_message_bytes => 1}, rabbit_fifo_dlx:overview(S8)),
+ ?assertMatch([{log, [4], _}], DeliveryEffects2),
+ ?assertEqual({1, 1}, rabbit_fifo_dlx:stat(S8)),
+ ok.
+
+switch_strategies(_Config) ->
+ QRes = #resource{virtual_host = <<"/">>,
+ kind = queue,
+ name = <<"blah">>},
+ application:set_env(rabbit, dead_letter_worker_consumer_prefetch, 1),
+ application:set_env(rabbit, dead_letter_worker_publisher_confirm_timeout, 1000),
+ {ok, _} = rabbit_fifo_dlx_sup:start_link(),
+ S0 = rabbit_fifo_dlx:init(),
+
+ Handler0 = undefined,
+ Handler1 = at_least_once,
+ %% Switching from undefined to at_least_once should start dlx consumer.
+ {S1, Effects0} = rabbit_fifo_dlx:update_config(Handler0, Handler1, QRes, S0),
+ ?assertEqual([{mod_call, rabbit_log, debug,
+ ["Switching dead_letter_handler from ~p to ~p for ~s",
+ [undefined, at_least_once, "queue 'blah' in vhost '/'"]]},
+ {aux, {dlx, setup}}],
+ Effects0),
+ rabbit_fifo_dlx:handle_aux(leader, {dlx, setup}, fake_aux, QRes, Handler1, S1),
+ [{_, WorkerPid, worker, _}] = supervisor:which_children(rabbit_fifo_dlx_sup),
+ {S2, _} = rabbit_fifo_dlx:discard([make_msg(1)], because, Handler1, S1),
+ Checkout = rabbit_fifo_dlx:make_checkout(WorkerPid, 1),
+ {S3, _} = rabbit_fifo_dlx:apply(meta(2), Checkout, Handler1, S2),
+ {S4, _} = rabbit_fifo_dlx:checkout(Handler1, S3),
+ ?assertMatch(#{num_discard_checked_out := 1}, rabbit_fifo_dlx:overview(S4)),
+
+ %% Switching from at_least_once to undefined should terminate dlx consumer.
+ {S5, Effects} = rabbit_fifo_dlx:update_config(Handler1, Handler0, QRes, S4),
+ ?assertEqual([{mod_call, rabbit_log, debug,
+ ["Switching dead_letter_handler from ~p to ~p for ~s",
+ [at_least_once, undefined, "queue 'blah' in vhost '/'"]]},
+ {mod_call, rabbit_log, info,
+ ["Deleted ~b dead-lettered messages (with total messages size of ~b bytes) in ~s",
+ [1, 1, "queue 'blah' in vhost '/'"]]}],
+ Effects),
+ ?assertMatch([_, {active, 0}, _, _],
+ supervisor:count_children(rabbit_fifo_dlx_sup)),
+ ?assertMatch(#{num_discarded := 0}, rabbit_fifo_dlx:overview(S5)),
+ ok.
+
+last_consumer_wins(_Config) ->
+ S0 = rabbit_fifo_dlx:init(),
+ Handler = at_least_once,
+ Msgs = [make_msg(1), make_msg(2), make_msg(3), make_msg(4)],
+ {S1, [{mod_call, rabbit_global_counters, messages_dead_lettered,
+ [because, rabbit_quorum_queue, at_least_once, 4]}]} =
+ rabbit_fifo_dlx:discard(Msgs, because, Handler, S0),
+ Checkout = rabbit_fifo_dlx:make_checkout(self(), 10),
+ {S2, []} = rabbit_fifo_dlx:apply(meta(5), Checkout, Handler, S1),
+ {S3, DeliveryEffects0} = rabbit_fifo_dlx:checkout(Handler, S2),
+ ?assertMatch([{log, [1, 2, 3, 4], _}], DeliveryEffects0),
+ ?assertEqual(#{num_discarded => 0,
+ num_discard_checked_out => 4,
+ discard_message_bytes => 0,
+ discard_checkout_message_bytes => 4}, rabbit_fifo_dlx:overview(S3)),
+
+ %% When another (or the same) consumer (re)subscribes,
+ %% we expect this new consumer to be checked out and delivered all messages
+ %% from the previous consumer.
+ {S4, []} = rabbit_fifo_dlx:apply(meta(6), Checkout, Handler, S3),
+ {S5, DeliveryEffects1} = rabbit_fifo_dlx:checkout(Handler, S4),
+ ?assertMatch([{log, [1, 2, 3, 4], _}], DeliveryEffects1),
+ ?assertEqual(#{num_discarded => 0,
+ num_discard_checked_out => 4,
+ discard_message_bytes => 0,
+ discard_checkout_message_bytes => 4}, rabbit_fifo_dlx:overview(S5)),
+ ok.
+
+make_msg(RaftIdx) ->
+ ?MSG(RaftIdx, _Bytes = 1).
+
+meta(Idx) ->
+ #{index => Idx,
+ term => 1,
+ system_time => 0,
+ from => {make_ref(), self()}}.
diff --git a/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl b/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl
new file mode 100644
index 0000000000..b539f8532e
--- /dev/null
+++ b/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl
@@ -0,0 +1,973 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+
+-module(rabbit_fifo_dlx_integration_SUITE).
+
+%% Integration tests for at-least-once dead-lettering comprising mainly
+%% rabbit_fifo_dlx, rabbit_fifo_dlx_worker, rabbit_fifo_dlx_client
+%% rabbit_quorum_queue, rabbit_fifo.
+%%
+%% Some at-least-once dead-lettering tests can also be found in
+%% module dead_lettering_SUITE.
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("eunit/include/eunit.hrl").
+-include_lib("amqp_client/include/amqp_client.hrl").
+-include_lib("rabbitmq_ct_helpers/include/rabbit_assert.hrl").
+
+-import(quorum_queue_utils, [wait_for_messages_ready/3,
+ wait_for_min_messages/3,
+ dirty_query/3,
+ ra_name/1]).
+-import(rabbit_ct_helpers, [eventually/1,
+ eventually/3,
+ consistently/1]).
+-import(quorum_queue_SUITE, [publish/2,
+ consume/3]).
+
+-define(DEFAULT_WAIT, 1000).
+-define(DEFAULT_INTERVAL, 200).
+
+-compile([nowarn_export_all, export_all]).
+
+all() ->
+ [
+ {group, single_node},
+ {group, cluster_size_3}
+ ].
+
+groups() ->
+ [
+ {single_node, [shuffle], [
+ expired,
+ rejected,
+ delivery_limit,
+ target_queue_not_bound,
+ target_queue_deleted,
+ dlx_missing,
+ cycle,
+ stats,
+ drop_head_falls_back_to_at_most_once,
+ switch_strategy,
+ reject_publish_source_queue_max_length,
+ reject_publish_source_queue_max_length_bytes,
+ reject_publish_target_classic_queue,
+ reject_publish_target_quorum_queue,
+ target_quorum_queue_delete_create
+ ]},
+ {cluster_size_3, [], [
+ many_target_queues,
+ single_dlx_worker
+ ]}
+ ].
+
+init_per_suite(Config0) ->
+ rabbit_ct_helpers:log_environment(),
+ Config1 = rabbit_ct_helpers:merge_app_env(
+ Config0, {rabbit, [{quorum_tick_interval, 1000},
+ {dead_letter_worker_consumer_prefetch, 2},
+ {dead_letter_worker_publisher_confirm_timeout, 1000}
+ ]}),
+ Config2 = rabbit_ct_helpers:merge_app_env(
+ Config1, {aten, [{poll_interval, 1000}]}),
+ rabbit_ct_helpers:run_setup_steps(Config2).
+
+end_per_suite(Config) ->
+ rabbit_ct_helpers:run_teardown_steps(Config).
+
+init_per_group(single_node = Group, Config) ->
+ init_per_group(Group, Config, 1);
+init_per_group(cluster_size_3 = Group, Config) ->
+ init_per_group(Group, Config, 3).
+
+init_per_group(Group, Config, NodesCount) ->
+ Config1 = rabbit_ct_helpers:set_config(Config,
+ [{rmq_nodes_count, NodesCount},
+ {rmq_nodename_suffix, Group},
+ {tcp_ports_base},
+ {net_ticktime, 10}]),
+ Config2 = rabbit_ct_helpers:run_steps(Config1,
+ [fun merge_app_env/1 ] ++
+ rabbit_ct_broker_helpers:setup_steps()),
+ ok = rabbit_ct_broker_helpers:rpc(
+ Config2, 0, application, set_env,
+ [rabbit, channel_tick_interval, 100]),
+ case rabbit_ct_broker_helpers:enable_feature_flag(Config2, quorum_queue) of
+ ok -> case rabbit_ct_broker_helpers:enable_feature_flag(Config2, stream_queue) of
+ ok -> Config2;
+ Skip -> Skip
+ end;
+ Skip -> Skip
+ end.
+
+end_per_group(_, Config) ->
+ rabbit_ct_helpers:run_steps(Config,
+ rabbit_ct_broker_helpers:teardown_steps()).
+
+merge_app_env(Config) ->
+ rabbit_ct_helpers:merge_app_env(
+ rabbit_ct_helpers:merge_app_env(Config,
+ {rabbit, [{core_metrics_gc_interval, 100}]}),
+ {ra, [{min_wal_roll_over_interval, 30000}]}).
+
+init_per_testcase(Testcase, Config) ->
+ case {Testcase, rabbit_ct_helpers:is_mixed_versions()} of
+ {single_dlx_worker, true} ->
+ {skip, "single_dlx_worker is not mixed version compatible because process "
+ "rabbit_fifo_dlx_sup does not exist in 3.9"};
+ _ ->
+ Config1 = rabbit_ct_helpers:testcase_started(Config, Testcase),
+ T = rabbit_data_coercion:to_binary(Testcase),
+ Counters = get_global_counters(Config1),
+ Config2 = rabbit_ct_helpers:set_config(Config1,
+ [{source_queue, <<T/binary, "_source">>},
+ {dead_letter_exchange, <<T/binary, "_dlx">>},
+ {target_queue_1, <<T/binary, "_target_1">>},
+ {target_queue_2, <<T/binary, "_target_2">>},
+ {target_queue_3, <<T/binary, "_target_3">>},
+ {target_queue_4, <<T/binary, "_target_4">>},
+ {target_queue_5, <<T/binary, "_target_5">>},
+ {target_queue_6, <<T/binary, "_target_6">>},
+ {policy, <<T/binary, "_policy">>},
+ {counters, Counters}
+ ]),
+ rabbit_ct_helpers:run_steps(Config2, rabbit_ct_client_helpers:setup_steps())
+ end.
+
+end_per_testcase(Testcase, Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ delete_queue(Ch, ?config(source_queue, Config)),
+ delete_queue(Ch, ?config(target_queue_1, Config)),
+ delete_queue(Ch, ?config(target_queue_2, Config)),
+ delete_queue(Ch, ?config(target_queue_3, Config)),
+ delete_queue(Ch, ?config(target_queue_4, Config)),
+ delete_queue(Ch, ?config(target_queue_5, Config)),
+ delete_queue(Ch, ?config(target_queue_6, Config)),
+ #'exchange.delete_ok'{} = amqp_channel:call(Ch, #'exchange.delete'{exchange = ?config(dead_letter_exchange, Config)}),
+ Config1 = rabbit_ct_helpers:run_steps(
+ Config,
+ rabbit_ct_client_helpers:teardown_steps()),
+ rabbit_ct_helpers:testcase_finished(Config1, Testcase).
+
+declare_topology(Config, AdditionalQArgs) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, lists:keymerge(1, AdditionalQArgs,
+ [{<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-routing-key">>, longstr, <<"k1">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ])),
+ #'exchange.declare_ok'{} = amqp_channel:call(Ch, #'exchange.declare'{exchange = DLX}),
+ declare_queue(Ch, TargetQ, []),
+ bind_queue(Ch, TargetQ, DLX, <<"k1">>),
+ {Server, Ch, SourceQ, TargetQ}.
+
+%% Test that at-least-once dead-lettering works for message dead-lettered due to message TTL.
+expired(Config) ->
+ {_Server, Ch, SourceQ, TargetQ} = declare_topology(Config, []),
+ Msg = <<"msg">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg}),
+ {_, #amqp_msg{props = #'P_basic'{headers = Headers,
+ expiration = undefined}}} =
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}),
+ 1000),
+ assert_dlx_headers(Headers, <<"expired">>, SourceQ),
+ ?assertEqual(1, counted(messages_dead_lettered_expired_total, Config)),
+ eventually(?_assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config))).
+
+%% Test that at-least-once dead-lettering works for message dead-lettered due to rejected by consumer.
+rejected(Config) ->
+ {Server, Ch, SourceQ, TargetQ} = declare_topology(Config, []),
+ publish(Ch, SourceQ),
+ wait_for_messages_ready([Server], ra_name(SourceQ), 1),
+ DelTag = consume(Ch, SourceQ, false),
+ amqp_channel:cast(Ch, #'basic.nack'{delivery_tag = DelTag,
+ multiple = false,
+ requeue = false}),
+ {_, #amqp_msg{props = #'P_basic'{headers = Headers}}} =
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = <<"msg">>}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}),
+ 1000),
+ assert_dlx_headers(Headers, <<"rejected">>, SourceQ),
+ ?assertEqual(1, counted(messages_dead_lettered_rejected_total, Config)),
+ eventually(?_assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config))).
+
+%% Test that at-least-once dead-lettering works for message dead-lettered due to delivery-limit exceeded.
+delivery_limit(Config) ->
+ {Server, Ch, SourceQ, TargetQ} = declare_topology(Config, [{<<"x-delivery-limit">>, long, 0}]),
+ publish(Ch, SourceQ),
+ wait_for_messages_ready([Server], ra_name(SourceQ), 1),
+ DelTag = consume(Ch, SourceQ, false),
+ amqp_channel:cast(Ch, #'basic.nack'{delivery_tag = DelTag,
+ multiple = false,
+ requeue = true}),
+ {_, #amqp_msg{props = #'P_basic'{headers = Headers}}} =
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = <<"msg">>}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}),
+ 1000),
+ assert_dlx_headers(Headers, <<"delivery_limit">>, SourceQ),
+ ?assertEqual(1, counted(messages_dead_lettered_delivery_limit_total, Config)),
+ eventually(?_assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config))).
+
+assert_dlx_headers(Headers, Reason, SourceQ) ->
+ ?assertEqual({longstr, Reason}, rabbit_misc:table_lookup(Headers, <<"x-first-death-reason">>)),
+ ?assertEqual({longstr, SourceQ}, rabbit_misc:table_lookup(Headers, <<"x-first-death-queue">>)),
+ ?assertEqual({longstr, <<>>}, rabbit_misc:table_lookup(Headers, <<"x-first-death-exchange">>)),
+ {array, [{table, Death}]} = rabbit_misc:table_lookup(Headers, <<"x-death">>),
+ ?assertEqual({longstr, SourceQ}, rabbit_misc:table_lookup(Death, <<"queue">>)),
+ ?assertEqual({longstr, Reason}, rabbit_misc:table_lookup(Death, <<"reason">>)),
+ ?assertEqual({longstr, <<>>}, rabbit_misc:table_lookup(Death, <<"exchange">>)),
+ ?assertEqual({long, 1}, rabbit_misc:table_lookup(Death, <<"count">>)),
+ ?assertEqual({array, [{longstr, SourceQ}]}, rabbit_misc:table_lookup(Death, <<"routing-keys">>)),
+ case Reason of
+ <<"expired">> ->
+ ?assertEqual({longstr, <<"0">>}, rabbit_misc:table_lookup(Death, <<"original-expiration">>));
+ _ ->
+ ok
+ end.
+
+%% Test that message is not lost despite no route from dead-letter exchange to target queue.
+%% Once the route becomes available, the message is delivered to the target queue
+%% and acked to the source quorum queue.
+target_queue_not_bound(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-routing-key">>, longstr, <<"k1">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ #'exchange.declare_ok'{} = amqp_channel:call(Ch, #'exchange.declare'{exchange = DLX}),
+ declare_queue(Ch, TargetQ, []),
+ Msg = <<"msg">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg}),
+ RaName = ra_name(SourceQ),
+ %% Binding from target queue to DLX is missing.
+ %% Therefore, 1 message should be kept in discards queue.
+ eventually(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ consistently(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ ?assertEqual(1, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(0, counted(messages_dead_lettered_confirmed_total, Config)),
+ %% Fix dead-letter toplology misconfiguration.
+ bind_queue(Ch, TargetQ, DLX, <<"k1">>),
+ %% Binding from target queue to DLX is now present.
+ %% Therefore, message should be delivered to target queue and acked to source queue.
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)),
+ 500, 10),
+ ?assertMatch({#'basic.get_ok'{}, #amqp_msg{props = #'P_basic'{expiration = undefined},
+ payload = Msg}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})),
+ ?assertEqual(1, counted(messages_dead_lettered_expired_total, Config)),
+ eventually(?_assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config))).
+
+%% Test that message is not lost when target queue gets deleted
+%% because dead-letter routing topology should always be respected.
+target_queue_deleted(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-routing-key">>, longstr, <<"k1">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ #'exchange.declare_ok'{} = amqp_channel:call(Ch, #'exchange.declare'{exchange = DLX}),
+ %% Make target queue a quorum queue to provoke sending an 'eol' message to dlx worker.
+ declare_queue(Ch, TargetQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}]),
+ bind_queue(Ch, TargetQ, DLX, <<"k1">>),
+ Msg1 = <<"m1">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg1}),
+ RaName = ra_name(SourceQ),
+ eventually(?_assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg1}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}))),
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ #'queue.delete_ok'{message_count = 0} = amqp_channel:call(Ch, #'queue.delete'{queue = TargetQ}),
+ Msg2 = <<"m2">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg2}),
+ %% Message should not be lost despite deleted target queue.
+ eventually(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ consistently(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ %% Message should be delivered once target queue is recreated.
+ %% (This time we simply create a classic target queue.)
+ declare_queue(Ch, TargetQ, []),
+ bind_queue(Ch, TargetQ, DLX, <<"k1">>),
+ eventually(?_assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg2}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})), 500, 5),
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ ?assertEqual(2, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(2, counted(messages_dead_lettered_confirmed_total, Config)).
+
+%% Test that message is not lost when configured dead-letter exchange does not exist.
+%% Once the exchange gets declared, the message is delivered to the target queue
+%% and acked to the source quorum queue.
+dlx_missing(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-routing-key">>, longstr, <<"k1">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ declare_queue(Ch, TargetQ, []),
+ Msg = <<"msg">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg}),
+ RaName = ra_name(SourceQ),
+ %% DLX is missing. Therefore, 1 message should be kept in discards queue.
+ eventually(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ consistently(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ %% Fix dead-letter toplology misconfiguration.
+ #'exchange.declare_ok'{} = amqp_channel:call(Ch, #'exchange.declare'{exchange = DLX}),
+ bind_queue(Ch, TargetQ, DLX, <<"k1">>),
+ %% DLX is now present.
+ %% Therefore, message should be delivered to target queue and acked to source queue.
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)),
+ 500, 8),
+ ?assertMatch({#'basic.get_ok'{}, #amqp_msg{props = #'P_basic'{expiration = undefined},
+ payload = Msg}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})),
+ ?assertEqual(1, counted(messages_dead_lettered_expired_total, Config)),
+ eventually(?_assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config))).
+
+%% Test that message is not lost when it cycles.
+%% Once the cycle is resolved, the message is delivered to the target queue and acked to
+%% the source quorum queue.
+cycle(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ PolicyName = ?config(policy, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, <<"">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ Msg = <<"msg">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg}),
+ RaName = ra_name(SourceQ),
+ %% Message cycled when it was dead-lettered:
+ %% source queue -> default exchange -> source queue
+ %% Therefore, 1 message should be kept in discards queue.
+ eventually(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ consistently(?_assertMatch([{1, _}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ %% Fix the cycle such that dead-lettering flows like this:
+ %% source queue -> default exchange -> target queue
+ declare_queue(Ch, TargetQ, []),
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server, PolicyName,
+ SourceQ, <<"queues">>,
+ [{<<"dead-letter-routing-key">>, TargetQ}]),
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)),
+ 500, 8),
+ ?assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})),
+ ok = rabbit_ct_broker_helpers:clear_policy(Config, Server, PolicyName),
+ ?assertEqual(1, counted(messages_dead_lettered_expired_total, Config)),
+ eventually(?_assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config))).
+
+%% Test that rabbit_fifo_dlx tracks statistics correctly.
+stats(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-routing-key">>, longstr, <<"k1">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ #'exchange.declare_ok'{} = amqp_channel:call(Ch, #'exchange.declare'{exchange = DLX}),
+ declare_queue(Ch, TargetQ, []),
+ Msg = <<"12">>, %% 2 bytes per message
+ [ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = Msg})
+ || _ <- lists:seq(1, 10)], %% 10 messages in total
+ RaName = ra_name(SourceQ),
+ %% Binding from target queue to DLX is missing. Therefore
+ %% * 10 msgs should be discarded (i.e. in discards queue or checked out to dlx_worker)
+ %% * 20 bytes (=10msgs*2bytes) should be discarded (i.e. in discards queue or checked out to dlx_worker)
+ eventually(?_assertEqual([{10, 20}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ ?assertMatch([#{
+ %% 2 msgs (=Prefetch) should be checked out to dlx_worker
+ num_discard_checked_out := 2,
+ %% 4 bytes (=2msgs*2bytes) should be checked out to dlx_worker
+ discard_checkout_message_bytes := 4,
+ %% 8 msgs (=10-2) should be in discards queue
+ num_discarded := 8,
+ %% 16 bytes (=8msgs*2bytes) should be in discards queue
+ discard_message_bytes := 16,
+ %% 10 msgs in total
+ num_messages := 10
+ }],
+ dirty_query([Server], RaName, fun rabbit_fifo:overview/1)),
+ ?assertEqual(10, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(0, counted(messages_dead_lettered_confirmed_total, Config)),
+ %% Fix dead-letter toplology misconfiguration.
+ bind_queue(Ch, TargetQ, DLX, <<"k1">>),
+ %% Binding from target queue to DLX is now present.
+ %% Therefore, all messages should be delivered to target queue and acked to source queue.
+ %% Therefore, all stats should be decremented back to 0.
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)),
+ 500, 10),
+ ?assertMatch([#{
+ num_discard_checked_out := 0,
+ discard_checkout_message_bytes := 0,
+ num_discarded := 0,
+ discard_message_bytes := 0,
+ num_messages := 0
+ }],
+ dirty_query([Server], RaName, fun rabbit_fifo:overview/1)),
+ [?assertMatch({#'basic.get_ok'{}, #amqp_msg{props = #'P_basic'{expiration = undefined},
+ payload = Msg}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})) || _ <- lists:seq(1, 10)],
+ ?assertEqual(10, counted(messages_dead_lettered_confirmed_total, Config)).
+
+%% Test that configuring overflow (default) drop-head will fall back to
+%% dead-letter-strategy at-most-once despite configuring at-least-once.
+drop_head_falls_back_to_at_most_once(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"drop-head">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ consistently(
+ ?_assertMatch(
+ [_, {active, 0}, _, _],
+ rabbit_ct_broker_helpers:rpc(Config, Server, supervisor, count_children, [rabbit_fifo_dlx_sup]))).
+
+%% Test that dynamically switching dead-letter-strategy works.
+switch_strategy(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ RaName = ra_name(SourceQ),
+ DLX = ?config(dead_letter_exchange, Config),
+ PolicyName = ?config(policy, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ %% default strategy is at-most-once
+ assert_active_dlx_workers(0, Config, Server),
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server, PolicyName,
+ SourceQ, <<"queues">>,
+ [{<<"dead-letter-strategy">>, <<"at-least-once">>}]),
+ assert_active_dlx_workers(1, Config, Server),
+ [ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"0">>},
+ payload = <<"m">>}) %% 1 byte per message
+ || _ <- lists:seq(1, 5)],
+ eventually(
+ ?_assertMatch(
+ [#{
+ %% 2 msgs (=Prefetch) should be checked out to dlx_worker
+ num_discard_checked_out := 2,
+ discard_checkout_message_bytes := 2,
+ %% 3 msgs (=5-2) should be in discards queue
+ num_discarded := 3,
+ discard_message_bytes := 3,
+ num_messages := 5
+ }],
+ dirty_query([Server], RaName, fun rabbit_fifo:overview/1))),
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server, PolicyName,
+ SourceQ, <<"queues">>,
+ [{<<"dead-letter-strategy">>, <<"at-most-once">>}]),
+ assert_active_dlx_workers(0, Config, Server),
+ ?assertMatch(
+ [#{
+ num_discard_checked_out := 0,
+ discard_checkout_message_bytes := 0,
+ num_discarded := 0,
+ discard_message_bytes := 0,
+ num_messages := 0
+ }],
+ dirty_query([Server], RaName, fun rabbit_fifo:overview/1)),
+ ok = rabbit_ct_broker_helpers:clear_policy(Config, Server, PolicyName),
+ ?assertEqual(5, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(0, counted(messages_dead_lettered_confirmed_total, Config)).
+
+%% Test that source quorum queue rejects messages when source quorum queue's max-length is reached.
+%% max-length should also take into account dead-lettered messages.
+reject_publish_source_queue_max_length(Config) ->
+ reject_publish(Config, {<<"x-max-length">>, long, 1}).
+
+%% Test that source quorum queue rejects messages when source quorum queue's max-length-bytes is reached.
+%% max-length-bytes should also take into account dead-lettered messages.
+reject_publish_source_queue_max_length_bytes(Config) ->
+ reject_publish(Config, {<<"x-max-length-bytes">>, long, 1}).
+
+reject_publish(Config, QArg) when is_tuple(QArg) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ PolicyName = ?config(policy, Config),
+ %% This routing key prevents messages from being routed to target dead-letter queue.
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server, PolicyName, SourceQ, <<"queues">>,
+ [{<<"dead-letter-routing-key">>, <<"fake">>}]),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, <<"">>},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>},
+ {<<"x-message-ttl">>, long, 0},
+ QArg
+ ]),
+ declare_queue(Ch, TargetQ, []),
+ #'confirm.select_ok'{} = amqp_channel:call(Ch, #'confirm.select'{}),
+ ok = publish_confirm(Ch, SourceQ),
+ ok = publish_confirm(Ch, SourceQ),
+ RaName = ra_name(SourceQ),
+ eventually(?_assertMatch([{2, 2}], %% 2 messages with 1 byte each
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ %% Now, we have 2 expired messages in the source quorum queue's discards queue.
+ %% Now that we are over the limit we expect publishes to be rejected.
+ ?assertEqual(fail, publish_confirm(Ch, SourceQ)),
+ %% Fix the dead-letter routing topology.
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server, PolicyName, SourceQ, <<"queues">>,
+ [{<<"dead-letter-routing-key">>, TargetQ}]),
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)), 500, 6),
+ %% Publish should be allowed again.
+ ok = publish_confirm(Ch, SourceQ),
+ %% Consume the 3 expired messages from the target dead-letter queue.
+ ?assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = <<"m">>}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})),
+ ?assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = <<"m">>}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})),
+ eventually(?_assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = <<"m">>}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}))),
+ ok = rabbit_ct_broker_helpers:clear_policy(Config, Server, PolicyName).
+
+%% Test that message gets delivered to target quorum queue eventually when it gets rejected initially.
+reject_publish_target_quorum_queue(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ RaName = ra_name(SourceQ),
+ TargetQ = ?config(target_queue_1, Config),
+ declare_queue(Ch, SourceQ, [{<<"x-dead-letter-exchange">>, longstr, <<"">>},
+ {<<"x-dead-letter-routing-key">>, longstr, TargetQ},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ declare_queue(Ch, TargetQ, [{<<"x-queue-type">>, longstr, <<"quorum">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-max-length">>, long, 1}
+ ]),
+ Msg = <<"m">>,
+ %% Send 4 messages although target queue has max-length of 1.
+ [ok,ok,ok,ok] = [begin
+ amqp_channel:cast(Ch, #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = integer_to_binary(N)},
+ payload = Msg})
+ end || N <- lists:seq(1,4)],
+ %% Make space in target queue by consuming messages one by one
+ %% allowing for more dead-lettered messages to reach the target queue.
+ [begin
+ timer:sleep(2000),
+ {#'basic.get_ok'{}, #amqp_msg{payload = Msg}} = amqp_channel:call(Ch, #'basic.get'{queue = TargetQ})
+ end || _ <- lists:seq(1,4)],
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)), 500, 10),
+ ?assertEqual(4, counted(messages_dead_lettered_expired_total, Config)),
+ eventually(?_assertEqual(4, counted(messages_dead_lettered_confirmed_total, Config))).
+
+%% Test that message gets eventually delivered to target classic queue when it gets rejected initially.
+reject_publish_target_classic_queue(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ RaName = ra_name(SourceQ),
+ TargetQ = ?config(target_queue_1, Config),
+ declare_queue(Ch, SourceQ, [{<<"x-dead-letter-exchange">>, longstr, <<"">>},
+ {<<"x-dead-letter-routing-key">>, longstr, TargetQ},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>},
+ {<<"x-message-ttl">>, long, 1}
+ ]),
+ declare_queue(Ch, TargetQ, [{<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-max-length">>, long, 1}
+ ]),
+ Msg = <<"m">>,
+ ok = amqp_channel:cast(Ch, #'basic.publish'{routing_key = SourceQ}, #amqp_msg{payload = Msg}),
+ ok = amqp_channel:cast(Ch, #'basic.publish'{routing_key = SourceQ}, #amqp_msg{payload = Msg}),
+ %% By now we expect target classic queue confirmed 1 message and rejected 1 message.
+ eventually(?_assertEqual([{1, 1}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ consistently(?_assertEqual([{1, 1}],
+ dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1))),
+ ?assertEqual(2, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(1, counted(messages_dead_lettered_confirmed_total, Config)),
+ %% Let's make space in the target queue for the rejected message.
+ {#'basic.get_ok'{}, #amqp_msg{payload = Msg}} = amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}),
+ eventually(?_assertEqual(2, counted(messages_dead_lettered_confirmed_total, Config)), 500, 6),
+ ?assertEqual([{0, 0}], dirty_query([Server], RaName, fun rabbit_fifo:query_stat_dlx/1)),
+ {#'basic.get_ok'{}, #amqp_msg{payload = Msg}} = amqp_channel:call(Ch, #'basic.get'{queue = TargetQ}),
+ ok.
+
+publish_confirm(Ch, QName) ->
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = QName},
+ #amqp_msg{payload = <<"m">>}),
+ amqp_channel:register_confirm_handler(Ch, self()),
+ receive
+ #'basic.ack'{} ->
+ ok;
+ #'basic.nack'{} ->
+ fail
+ after 2500 ->
+ ct:fail(confirm_timeout)
+ end.
+
+%% Test that all dead-lettered messages reach target quorum queue eventually
+%% when target queue is deleted and recreated with same name
+%% and when dead-letter-exchange is default exchange.
+target_quorum_queue_delete_create(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ SourceQ = ?config(source_queue, Config),
+ TargetQ = ?config(target_queue_1, Config),
+ declare_queue(Ch, SourceQ, [{<<"x-dead-letter-exchange">>, longstr, <<"">>},
+ {<<"x-dead-letter-routing-key">>, longstr, TargetQ},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>},
+ {<<"x-message-ttl">>, long, 1}
+ ]),
+ DeclareTargetQueue = fun() ->
+ declare_queue(Ch, TargetQ,
+ [{<<"x-queue-type">>, longstr, <<"quorum">>}])
+ end,
+
+ Send100Msgs = fun() ->
+ [ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{payload = <<"msg">>})
+ || _ <- lists:seq(1, 100)]
+ end,
+ DeclareTargetQueue(),
+ Send100Msgs(),
+ %% Delete and recreate target queue (immediately or after some while).
+ timer:sleep(rand:uniform(50)),
+ %% Log the current number of messages.
+ rabbit_ct_broker_helpers:rabbitmqctl_list(
+ Config, 0, ["list_queues", "name", "messages", "messages_ready",
+ "messages_unacknowledged"]),
+ #'queue.delete_ok'{} = amqp_channel:call(Ch, #'queue.delete'{queue = TargetQ}),
+ Send100Msgs(),
+ timer:sleep(rand:uniform(200)),
+ DeclareTargetQueue(),
+ Send100Msgs(),
+ %% Expect no message to get stuck in dlx worker.
+ wait_for_min_messages(Config, TargetQ, 200),
+ eventually(?_assertEqual([{0, 0}],
+ dirty_query([Server], ra_name(SourceQ), fun rabbit_fifo:query_stat_dlx/1)), 500, 10),
+ ?assertEqual(300, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(300, counted(messages_dead_lettered_confirmed_total, Config)),
+ #'queue.delete_ok'{} = amqp_channel:call(Ch, #'queue.delete'{queue = TargetQ}).
+
+%% Test that
+%% 1. Message is only acked to source queue once publisher confirms got received from **all** target queues.
+%% 2. Target queue can be classic queue, quorum queue, or stream queue.
+%%
+%% Lesson learnt by writing this test:
+%% If there are multiple target queues, messages will not be sent to target non-mirrored classic queues
+%% (even if durable) when their host node is temporarily down because these queues get (temporarily) deleted. See:
+%% https://github.com/rabbitmq/rabbitmq-server/blob/cf76b479300b767b8ea450293d096cbf729ed734/deps/rabbit/src/rabbit_amqqueue.erl#L1955-L1964
+many_target_queues(Config) ->
+ [Server1, Server2, Server3] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server1),
+ Ch2 = rabbit_ct_client_helpers:open_channel(Config, Server2),
+ SourceQ = ?config(source_queue, Config),
+ RaName = ra_name(SourceQ),
+ TargetQ1 = ?config(target_queue_1, Config),
+ TargetQ2 = ?config(target_queue_2, Config),
+ TargetQ3 = ?config(target_queue_3, Config),
+ TargetQ4 = ?config(target_queue_4, Config),
+ TargetQ5 = ?config(target_queue_5, Config),
+ TargetQ6 = ?config(target_queue_6, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ DLRKey = <<"k1">>,
+ %% Create topology:
+ %% * source quorum queue with 1 replica on node 1
+ %% * target non-mirrored classic queue on node 1
+ %% * target quorum queue with 3 replicas
+ %% * target stream queue with 3 replicas
+ %% * target mirrored classic queue with 3 replicas (leader on node 1)
+ %% * target mirrored classic queue with 1 replica (leader on node 2)
+ %% * target mirrored classic queue with 3 replica (leader on node 2)
+ declare_queue(Ch, SourceQ, [{<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-routing-key">>, longstr, DLRKey},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>},
+ {<<"x-quorum-initial-group-size">>, long, 1}
+ ]),
+ #'exchange.declare_ok'{} = amqp_channel:call(Ch, #'exchange.declare'{exchange = DLX}),
+ declare_queue(Ch, TargetQ1, []),
+ bind_queue(Ch, TargetQ1, DLX, DLRKey),
+ declare_queue(Ch, TargetQ2, [{<<"x-queue-type">>, longstr, <<"quorum">>},
+ {<<"x-quorum-initial-group-size">>, long, 3}
+ ]),
+ bind_queue(Ch, TargetQ2, DLX, DLRKey),
+ declare_queue(Ch, TargetQ3, [{<<"x-queue-type">>, longstr, <<"stream">>},
+ {<<"x-initial-cluster-size">>, long, 3}
+ ]),
+ bind_queue(Ch, TargetQ3, DLX, DLRKey),
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server1, <<"mirror-q4">>, TargetQ4, <<"queues">>,
+ [{<<"ha-mode">>, <<"all">>},
+ {<<"queue-master-locator">>, <<"client-local">>}]),
+ declare_queue(Ch, TargetQ4, []),
+ bind_queue(Ch, TargetQ4, DLX, DLRKey),
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server1, <<"mirror-q5">>, TargetQ5, <<"queues">>,
+ [{<<"ha-mode">>, <<"exactly">>},
+ {<<"ha-params">>, 1},
+ {<<"queue-master-locator">>, <<"client-local">>}]),
+ declare_queue(Ch2, TargetQ5, []),
+ bind_queue(Ch2, TargetQ5, DLX, DLRKey),
+ ok = rabbit_ct_broker_helpers:set_policy(Config, Server1, <<"mirror-q6">>, TargetQ6, <<"queues">>,
+ [{<<"ha-mode">>, <<"all">>},
+ {<<"queue-master-locator">>, <<"client-local">>}]),
+ declare_queue(Ch2, TargetQ6, []),
+ bind_queue(Ch2, TargetQ6, DLX, DLRKey),
+ Msg1 = <<"m1">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"5">>},
+ payload = Msg1}),
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg1}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ1}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg1}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ2}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ %% basic.get not supported by stream queues
+ #'basic.qos_ok'{} = amqp_channel:call(Ch, #'basic.qos'{prefetch_count = 2}),
+ CTag = <<"ctag">>,
+ amqp_channel:subscribe(
+ Ch,
+ #'basic.consume'{queue = TargetQ3,
+ consumer_tag = CTag,
+ arguments = [{<<"x-stream-offset">>, long, 0}]},
+ self()),
+ receive
+ #'basic.consume_ok'{consumer_tag = CTag} ->
+ ok
+ after 2000 ->
+ exit(consume_ok_timeout)
+ end,
+ receive
+ {#'basic.deliver'{consumer_tag = CTag},
+ #amqp_msg{payload = Msg1}} ->
+ ok
+ after 2000 ->
+ exit(deliver_timeout)
+ end,
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg1}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ4}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg1}},
+ amqp_channel:call(Ch2, #'basic.get'{queue = TargetQ5}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg1}},
+ amqp_channel:call(Ch2, #'basic.get'{queue = TargetQ6}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ?awaitMatch([{0, 0}],
+ dirty_query([Server1], RaName, fun rabbit_fifo:query_stat_dlx/1),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ok = rabbit_ct_broker_helpers:stop_node(Config, Server3),
+ ok = rabbit_ct_broker_helpers:stop_node(Config, Server2),
+ Msg2 = <<"m2">>,
+ ok = amqp_channel:cast(Ch,
+ #'basic.publish'{routing_key = SourceQ},
+ #amqp_msg{props = #'P_basic'{expiration = <<"1">>},
+ payload = Msg2}),
+ %% Nodes 2 and 3 are down.
+ %% rabbit_fifo_dlx_worker should wait until all queues confirm the message
+ %% before acking it to the source queue.
+ ?awaitMatch([{1, 2}],
+ dirty_query([Server1], RaName, fun rabbit_fifo:query_stat_dlx/1),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ timer:sleep(1000),
+ ?assertEqual([{1, 2}],
+ dirty_query([Server1], RaName, fun rabbit_fifo:query_stat_dlx/1)),
+ ?assertMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg2}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ1})),
+ ok = rabbit_ct_broker_helpers:start_node(Config, Server2),
+ ok = rabbit_ct_broker_helpers:start_node(Config, Server3),
+ ?awaitMatch([{0, 0}],
+ dirty_query([Server1], RaName, fun rabbit_fifo:query_stat_dlx/1),
+ 3000, 500),
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg2}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ2}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ receive
+ {#'basic.deliver'{consumer_tag = CTag},
+ #amqp_msg{payload = Msg2}} ->
+ ok
+ after 0 ->
+ exit(deliver_timeout)
+ end,
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg2}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ4}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg2}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ5}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ %%TODO why is the 1st message (m1) a duplicate?
+ ?awaitMatch({#'basic.get_ok'{}, #amqp_msg{payload = Msg2}},
+ amqp_channel:call(Ch, #'basic.get'{queue = TargetQ6}),
+ ?DEFAULT_WAIT, ?DEFAULT_INTERVAL),
+ ?assertEqual(2, counted(messages_dead_lettered_expired_total, Config)),
+ ?assertEqual(2, counted(messages_dead_lettered_confirmed_total, Config)).
+
+%% Test that there is a single active rabbit_fifo_dlx_worker that is co-located with the quorum queue leader.
+single_dlx_worker(Config) ->
+ [Server1, Server2, _] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server1),
+ SourceQ = ?config(source_queue, Config),
+ DLX = ?config(dead_letter_exchange, Config),
+ declare_queue(Ch, SourceQ, [
+ {<<"x-dead-letter-exchange">>, longstr, DLX},
+ {<<"x-dead-letter-strategy">>, longstr, <<"at-least-once">>},
+ {<<"x-overflow">>, longstr, <<"reject-publish">>},
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]),
+ ?assertMatch(
+ [[_, {active, 1}, _, _],
+ [_, {active, 0}, _, _],
+ [_, {active, 0}, _, _]],
+ rabbit_ct_broker_helpers:rpc_all(Config, supervisor, count_children, [rabbit_fifo_dlx_sup])),
+
+ ok = rabbit_ct_broker_helpers:stop_node(Config, Server1),
+ RaName = ra_name(SourceQ),
+ {ok, _, {_, Leader0}} = ra:members({RaName, Server2}),
+ ?assertNotEqual(Server1, Leader0),
+ [Follower0] = Servers -- [Server1, Leader0],
+ assert_active_dlx_workers(1, Config, Leader0),
+ assert_active_dlx_workers(0, Config, Follower0),
+ ok = rabbit_ct_broker_helpers:start_node(Config, Server1),
+ consistently(
+ ?_assertMatch(
+ [_, {active, 0}, _, _],
+ rabbit_ct_broker_helpers:rpc(Config, Server1, supervisor, count_children, [rabbit_fifo_dlx_sup], 1000))),
+
+ Pid = rabbit_ct_broker_helpers:rpc(Config, Leader0, erlang, whereis, [RaName]),
+ true = rabbit_ct_broker_helpers:rpc(Config, Leader0, erlang, exit, [Pid, kill]),
+ {ok, _, {_, Leader1}} = ?awaitMatch({ok, _, _},
+ ra:members({RaName, Follower0}),
+ 1000),
+ ?assertNotEqual(Leader0, Leader1),
+ [Follower1, Follower2] = Servers -- [Leader1],
+ assert_active_dlx_workers(0, Config, Follower1),
+ assert_active_dlx_workers(0, Config, Follower2),
+ assert_active_dlx_workers(1, Config, Leader1).
+
+assert_active_dlx_workers(N, Config, Server) ->
+ ?assertMatch(
+ [_, {active, N}, _, _],
+ rabbit_ct_broker_helpers:rpc(Config, Server, supervisor, count_children, [rabbit_fifo_dlx_sup], 1000)).
+
+declare_queue(Channel, Queue, Args) ->
+ #'queue.declare_ok'{} = amqp_channel:call(Channel, #'queue.declare'{
+ queue = Queue,
+ durable = true,
+ arguments = Args
+ }).
+
+bind_queue(Channel, Queue, Exchange, RoutingKey) ->
+ #'queue.bind_ok'{} = amqp_channel:call(Channel, #'queue.bind'{
+ queue = Queue,
+ exchange = Exchange,
+ routing_key = RoutingKey
+ }).
+
+delete_queue(Channel, Queue) ->
+ %% We implicitly test here that we don't end up with duplicate messages.
+ #'queue.delete_ok'{message_count = 0} = amqp_channel:call(Channel, #'queue.delete'{queue = Queue}).
+
+get_global_counters(Config) ->
+ rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_global_counters, overview, []).
+
+%% Returns the delta of Metric between testcase start and now.
+counted(Metric, Config) ->
+ OldCounters = ?config(counters, Config),
+ Counters = get_global_counters(Config),
+ metric(Metric, Counters) -
+ metric(Metric, OldCounters).
+
+metric(Metric, Counters) ->
+ Metrics = maps:get([{queue_type, rabbit_quorum_queue}, {dead_letter_strategy, at_least_once}], Counters),
+ maps:get(Metric, Metrics).
diff --git a/deps/rabbit/test/rabbit_foo_protocol_connection_info.erl b/deps/rabbit/test/rabbit_foo_protocol_connection_info.erl
index 12e5f0e8ac..2e1c304147 100644
--- a/deps/rabbit/test/rabbit_foo_protocol_connection_info.erl
+++ b/deps/rabbit/test/rabbit_foo_protocol_connection_info.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_foo_protocol_connection_info).
diff --git a/deps/rabbit/test/rabbit_ha_test_consumer.erl b/deps/rabbit/test/rabbit_ha_test_consumer.erl
index b50ef3e323..eb4f53d9b2 100644
--- a/deps/rabbit/test/rabbit_ha_test_consumer.erl
+++ b/deps/rabbit/test/rabbit_ha_test_consumer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ha_test_consumer).
diff --git a/deps/rabbit/test/rabbit_ha_test_producer.erl b/deps/rabbit/test/rabbit_ha_test_producer.erl
index 2b53f5d0f1..dec80306d1 100644
--- a/deps/rabbit/test/rabbit_ha_test_producer.erl
+++ b/deps/rabbit/test/rabbit_ha_test_producer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ha_test_producer).
diff --git a/deps/rabbit/test/rabbitmq_queues_cli_integration_SUITE.erl b/deps/rabbit/test/rabbitmq_queues_cli_integration_SUITE.erl
index b41c179cde..5b956ec809 100644
--- a/deps/rabbit/test/rabbitmq_queues_cli_integration_SUITE.erl
+++ b/deps/rabbit/test/rabbitmq_queues_cli_integration_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_queues_cli_integration_SUITE).
diff --git a/deps/rabbit/test/rabbitmqctl_integration_SUITE.erl b/deps/rabbit/test/rabbitmqctl_integration_SUITE.erl
index 4e7c7ce3ea..4e71267470 100644
--- a/deps/rabbit/test/rabbitmqctl_integration_SUITE.erl
+++ b/deps/rabbit/test/rabbitmqctl_integration_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmqctl_integration_SUITE).
diff --git a/deps/rabbit/test/rabbitmqctl_shutdown_SUITE.erl b/deps/rabbit/test/rabbitmqctl_shutdown_SUITE.erl
index bace3291b4..f1080625a0 100644
--- a/deps/rabbit/test/rabbitmqctl_shutdown_SUITE.erl
+++ b/deps/rabbit/test/rabbitmqctl_shutdown_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmqctl_shutdown_SUITE).
diff --git a/deps/rabbit/test/signal_handling_SUITE.erl b/deps/rabbit/test/signal_handling_SUITE.erl
index 8cc25fa344..79caf96580 100644
--- a/deps/rabbit/test/signal_handling_SUITE.erl
+++ b/deps/rabbit/test/signal_handling_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(signal_handling_SUITE).
diff --git a/deps/rabbit/test/simple_ha_SUITE.erl b/deps/rabbit/test/simple_ha_SUITE.erl
index 264339429c..653949dd5b 100644
--- a/deps/rabbit/test/simple_ha_SUITE.erl
+++ b/deps/rabbit/test/simple_ha_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(simple_ha_SUITE).
diff --git a/deps/rabbit/test/single_active_consumer_SUITE.erl b/deps/rabbit/test/single_active_consumer_SUITE.erl
index 2aabc00a8a..2e06e9585e 100644
--- a/deps/rabbit/test/single_active_consumer_SUITE.erl
+++ b/deps/rabbit/test/single_active_consumer_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(single_active_consumer_SUITE).
diff --git a/deps/rabbit/test/sync_detection_SUITE.erl b/deps/rabbit/test/sync_detection_SUITE.erl
index 4ca06fa7ec..ba69250b34 100644
--- a/deps/rabbit/test/sync_detection_SUITE.erl
+++ b/deps/rabbit/test/sync_detection_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(sync_detection_SUITE).
diff --git a/deps/rabbit/test/term_to_binary_compat_prop_SUITE.erl b/deps/rabbit/test/term_to_binary_compat_prop_SUITE.erl
index 2937aed722..91a1d5cb8e 100644
--- a/deps/rabbit/test/term_to_binary_compat_prop_SUITE.erl
+++ b/deps/rabbit/test/term_to_binary_compat_prop_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
diff --git a/deps/rabbit/test/topic_permission_SUITE.erl b/deps/rabbit/test/topic_permission_SUITE.erl
index f6c9974ee3..06c6f18fab 100644
--- a/deps/rabbit/test/topic_permission_SUITE.erl
+++ b/deps/rabbit/test/topic_permission_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(topic_permission_SUITE).
diff --git a/deps/rabbit/test/unit_access_control_SUITE.erl b/deps/rabbit/test/unit_access_control_SUITE.erl
index 23d32fc987..ccbd764b3f 100644
--- a/deps/rabbit/test/unit_access_control_SUITE.erl
+++ b/deps/rabbit/test/unit_access_control_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_access_control_SUITE).
diff --git a/deps/rabbit/test/unit_access_control_authn_authz_context_propagation_SUITE.erl b/deps/rabbit/test/unit_access_control_authn_authz_context_propagation_SUITE.erl
index 758fe23695..e7d54cab12 100644
--- a/deps/rabbit/test/unit_access_control_authn_authz_context_propagation_SUITE.erl
+++ b/deps/rabbit/test/unit_access_control_authn_authz_context_propagation_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_access_control_authn_authz_context_propagation_SUITE).
diff --git a/deps/rabbit/test/unit_access_control_credential_validation_SUITE.erl b/deps/rabbit/test/unit_access_control_credential_validation_SUITE.erl
index a243063865..4255b1d443 100644
--- a/deps/rabbit/test/unit_access_control_credential_validation_SUITE.erl
+++ b/deps/rabbit/test/unit_access_control_credential_validation_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_access_control_credential_validation_SUITE).
diff --git a/deps/rabbit/test/unit_amqp091_content_framing_SUITE.erl b/deps/rabbit/test/unit_amqp091_content_framing_SUITE.erl
index 6eb13bb027..61e004f10d 100644
--- a/deps/rabbit/test/unit_amqp091_content_framing_SUITE.erl
+++ b/deps/rabbit/test/unit_amqp091_content_framing_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_amqp091_content_framing_SUITE).
diff --git a/deps/rabbit/test/unit_amqp091_server_properties_SUITE.erl b/deps/rabbit/test/unit_amqp091_server_properties_SUITE.erl
index e2021d1669..6de9a91950 100644
--- a/deps/rabbit/test/unit_amqp091_server_properties_SUITE.erl
+++ b/deps/rabbit/test/unit_amqp091_server_properties_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_amqp091_server_properties_SUITE).
diff --git a/deps/rabbit/test/unit_app_management_SUITE.erl b/deps/rabbit/test/unit_app_management_SUITE.erl
index bd1969f3c6..fb113b0b8a 100644
--- a/deps/rabbit/test/unit_app_management_SUITE.erl
+++ b/deps/rabbit/test/unit_app_management_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_app_management_SUITE).
diff --git a/deps/rabbit/test/unit_cluster_formation_locking_mocks_SUITE.erl b/deps/rabbit/test/unit_cluster_formation_locking_mocks_SUITE.erl
index d8c95c176d..73ece293c5 100644
--- a/deps/rabbit/test/unit_cluster_formation_locking_mocks_SUITE.erl
+++ b/deps/rabbit/test/unit_cluster_formation_locking_mocks_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_cluster_formation_locking_mocks_SUITE).
diff --git a/deps/rabbit/test/unit_collections_SUITE.erl b/deps/rabbit/test/unit_collections_SUITE.erl
index 3ff3a5849a..b89ff688a7 100644
--- a/deps/rabbit/test/unit_collections_SUITE.erl
+++ b/deps/rabbit/test/unit_collections_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_collections_SUITE).
diff --git a/deps/rabbit/test/unit_config_value_encryption_SUITE.erl b/deps/rabbit/test/unit_config_value_encryption_SUITE.erl
index 3efbec7a8c..905a0e7692 100644
--- a/deps/rabbit/test/unit_config_value_encryption_SUITE.erl
+++ b/deps/rabbit/test/unit_config_value_encryption_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_config_value_encryption_SUITE).
diff --git a/deps/rabbit/test/unit_connection_tracking_SUITE.erl b/deps/rabbit/test/unit_connection_tracking_SUITE.erl
index 2e0f31a05a..76fc246bcf 100644
--- a/deps/rabbit/test/unit_connection_tracking_SUITE.erl
+++ b/deps/rabbit/test/unit_connection_tracking_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_connection_tracking_SUITE).
diff --git a/deps/rabbit/test/unit_credit_flow_SUITE.erl b/deps/rabbit/test/unit_credit_flow_SUITE.erl
index aae84f0077..6229050de6 100644
--- a/deps/rabbit/test/unit_credit_flow_SUITE.erl
+++ b/deps/rabbit/test/unit_credit_flow_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_credit_flow_SUITE).
diff --git a/deps/rabbit/test/unit_disk_monitor_SUITE.erl b/deps/rabbit/test/unit_disk_monitor_SUITE.erl
index 7a746349ca..570670d3ea 100644
--- a/deps/rabbit/test/unit_disk_monitor_SUITE.erl
+++ b/deps/rabbit/test/unit_disk_monitor_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_disk_monitor_SUITE).
diff --git a/deps/rabbit/test/unit_disk_monitor_mocks_SUITE.erl b/deps/rabbit/test/unit_disk_monitor_mocks_SUITE.erl
index ae16cbb379..2ea52ca4c4 100644
--- a/deps/rabbit/test/unit_disk_monitor_mocks_SUITE.erl
+++ b/deps/rabbit/test/unit_disk_monitor_mocks_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_disk_monitor_mocks_SUITE).
diff --git a/deps/rabbit/test/unit_file_handle_cache_SUITE.erl b/deps/rabbit/test/unit_file_handle_cache_SUITE.erl
index 489cf948c8..4fa045e732 100644
--- a/deps/rabbit/test/unit_file_handle_cache_SUITE.erl
+++ b/deps/rabbit/test/unit_file_handle_cache_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_file_handle_cache_SUITE).
diff --git a/deps/rabbit/test/unit_gen_server2_SUITE.erl b/deps/rabbit/test/unit_gen_server2_SUITE.erl
index 65e13818ec..fb1d80aa0d 100644
--- a/deps/rabbit/test/unit_gen_server2_SUITE.erl
+++ b/deps/rabbit/test/unit_gen_server2_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_gen_server2_SUITE).
diff --git a/deps/rabbit/test/unit_gm_SUITE.erl b/deps/rabbit/test/unit_gm_SUITE.erl
index 6ce552f039..101a911bb8 100644
--- a/deps/rabbit/test/unit_gm_SUITE.erl
+++ b/deps/rabbit/test/unit_gm_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_gm_SUITE).
diff --git a/deps/rabbit/test/unit_log_management_SUITE.erl b/deps/rabbit/test/unit_log_management_SUITE.erl
index 195d872bc9..3b4848aad4 100644
--- a/deps/rabbit/test/unit_log_management_SUITE.erl
+++ b/deps/rabbit/test/unit_log_management_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_log_management_SUITE).
diff --git a/deps/rabbit/test/unit_operator_policy_SUITE.erl b/deps/rabbit/test/unit_operator_policy_SUITE.erl
index dedd6c82af..bb6e869102 100644
--- a/deps/rabbit/test/unit_operator_policy_SUITE.erl
+++ b/deps/rabbit/test/unit_operator_policy_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_operator_policy_SUITE).
diff --git a/deps/rabbit/test/unit_pg_local_SUITE.erl b/deps/rabbit/test/unit_pg_local_SUITE.erl
index 9819d78e49..40a299252b 100644
--- a/deps/rabbit/test/unit_pg_local_SUITE.erl
+++ b/deps/rabbit/test/unit_pg_local_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_pg_local_SUITE).
diff --git a/deps/rabbit/test/unit_plugin_directories_SUITE.erl b/deps/rabbit/test/unit_plugin_directories_SUITE.erl
index d857f99419..f3c4603b5c 100644
--- a/deps/rabbit/test/unit_plugin_directories_SUITE.erl
+++ b/deps/rabbit/test/unit_plugin_directories_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_plugin_directories_SUITE).
diff --git a/deps/rabbit/test/unit_plugin_versioning_SUITE.erl b/deps/rabbit/test/unit_plugin_versioning_SUITE.erl
index 127d11d8c4..33ea8d6cd5 100644
--- a/deps/rabbit/test/unit_plugin_versioning_SUITE.erl
+++ b/deps/rabbit/test/unit_plugin_versioning_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_plugin_versioning_SUITE).
diff --git a/deps/rabbit/test/unit_policy_validators_SUITE.erl b/deps/rabbit/test/unit_policy_validators_SUITE.erl
index 54dbdd56cf..0d6a66018e 100644
--- a/deps/rabbit/test/unit_policy_validators_SUITE.erl
+++ b/deps/rabbit/test/unit_policy_validators_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_policy_validators_SUITE).
diff --git a/deps/rabbit/test/unit_priority_queue_SUITE.erl b/deps/rabbit/test/unit_priority_queue_SUITE.erl
index 41b7717e27..95af76f654 100644
--- a/deps/rabbit/test/unit_priority_queue_SUITE.erl
+++ b/deps/rabbit/test/unit_priority_queue_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_priority_queue_SUITE).
diff --git a/deps/rabbit/test/unit_queue_consumers_SUITE.erl b/deps/rabbit/test/unit_queue_consumers_SUITE.erl
index 533991dc8e..4a582926c8 100644
--- a/deps/rabbit/test/unit_queue_consumers_SUITE.erl
+++ b/deps/rabbit/test/unit_queue_consumers_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_queue_consumers_SUITE).
diff --git a/deps/rabbit/test/unit_stats_and_metrics_SUITE.erl b/deps/rabbit/test/unit_stats_and_metrics_SUITE.erl
index 3cfe4ff1ce..1f05a248f9 100644
--- a/deps/rabbit/test/unit_stats_and_metrics_SUITE.erl
+++ b/deps/rabbit/test/unit_stats_and_metrics_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_stats_and_metrics_SUITE).
diff --git a/deps/rabbit/test/unit_supervisor2_SUITE.erl b/deps/rabbit/test/unit_supervisor2_SUITE.erl
index 235ff64c09..ca8564c497 100644
--- a/deps/rabbit/test/unit_supervisor2_SUITE.erl
+++ b/deps/rabbit/test/unit_supervisor2_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_supervisor2_SUITE).
diff --git a/deps/rabbit/test/unit_vm_memory_monitor_SUITE.erl b/deps/rabbit/test/unit_vm_memory_monitor_SUITE.erl
index c09cd91deb..19dfdfaa22 100644
--- a/deps/rabbit/test/unit_vm_memory_monitor_SUITE.erl
+++ b/deps/rabbit/test/unit_vm_memory_monitor_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_vm_memory_monitor_SUITE).
diff --git a/deps/rabbit/test/upgrade_preparation_SUITE.erl b/deps/rabbit/test/upgrade_preparation_SUITE.erl
index 90d0bddb49..6898feca99 100644
--- a/deps/rabbit/test/upgrade_preparation_SUITE.erl
+++ b/deps/rabbit/test/upgrade_preparation_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(upgrade_preparation_SUITE).
diff --git a/deps/rabbit/test/vhost_SUITE.erl b/deps/rabbit/test/vhost_SUITE.erl
index a86d90f50a..569489ac64 100644
--- a/deps/rabbit/test/vhost_SUITE.erl
+++ b/deps/rabbit/test/vhost_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(vhost_SUITE).
diff --git a/deps/rabbit_common/include/rabbit.hrl b/deps/rabbit_common/include/rabbit.hrl
index f40b92a24b..4ecc392f84 100644
--- a/deps/rabbit_common/include/rabbit.hrl
+++ b/deps/rabbit_common/include/rabbit.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-include("resource.hrl").
diff --git a/deps/rabbit_common/include/rabbit_core_metrics.hrl b/deps/rabbit_common/include/rabbit_core_metrics.hrl
index c3609a655e..dd030cb955 100644
--- a/deps/rabbit_common/include/rabbit_core_metrics.hrl
+++ b/deps/rabbit_common/include/rabbit_core_metrics.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% These tables contain the raw metrics as stored by RabbitMQ core
diff --git a/deps/rabbit_common/include/rabbit_memory.hrl b/deps/rabbit_common/include/rabbit_memory.hrl
index 0663330b2f..c01bf0c52b 100644
--- a/deps/rabbit_common/include/rabbit_memory.hrl
+++ b/deps/rabbit_common/include/rabbit_memory.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(DEFAULT_MEMORY_CHECK_INTERVAL, 1000).
diff --git a/deps/rabbit_common/include/rabbit_misc.hrl b/deps/rabbit_common/include/rabbit_misc.hrl
index edc49a5843..d2b752e181 100644
--- a/deps/rabbit_common/include/rabbit_misc.hrl
+++ b/deps/rabbit_common/include/rabbit_misc.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(RPC_TIMEOUT, 15000).
diff --git a/deps/rabbit_common/include/rabbit_msg_store.hrl b/deps/rabbit_common/include/rabbit_msg_store.hrl
index 97a64b242e..91e11e2e11 100644
--- a/deps/rabbit_common/include/rabbit_msg_store.hrl
+++ b/deps/rabbit_common/include/rabbit_msg_store.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-include("rabbit.hrl").
diff --git a/deps/rabbit_common/include/resource.hrl b/deps/rabbit_common/include/resource.hrl
index 1bd9b0a421..020cf8c686 100644
--- a/deps/rabbit_common/include/resource.hrl
+++ b/deps/rabbit_common/include/resource.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(resource, {
diff --git a/deps/rabbit_common/src/app_utils.erl b/deps/rabbit_common/src/app_utils.erl
index d1476f3596..06eb6bbd67 100644
--- a/deps/rabbit_common/src/app_utils.erl
+++ b/deps/rabbit_common/src/app_utils.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(app_utils).
diff --git a/deps/rabbit_common/src/code_version.erl b/deps/rabbit_common/src/code_version.erl
index 16889e3c2e..b9923d9ebe 100644
--- a/deps/rabbit_common/src/code_version.erl
+++ b/deps/rabbit_common/src/code_version.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(code_version).
diff --git a/deps/rabbit_common/src/credit_flow.erl b/deps/rabbit_common/src/credit_flow.erl
index f8adc788f1..ad4a46b544 100644
--- a/deps/rabbit_common/src/credit_flow.erl
+++ b/deps/rabbit_common/src/credit_flow.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(credit_flow).
diff --git a/deps/rabbit_common/src/delegate.erl b/deps/rabbit_common/src/delegate.erl
index bdea11534d..5c107cd867 100644
--- a/deps/rabbit_common/src/delegate.erl
+++ b/deps/rabbit_common/src/delegate.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(delegate).
diff --git a/deps/rabbit_common/src/delegate_sup.erl b/deps/rabbit_common/src/delegate_sup.erl
index d20fb038c5..97b3bebf12 100644
--- a/deps/rabbit_common/src/delegate_sup.erl
+++ b/deps/rabbit_common/src/delegate_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(delegate_sup).
diff --git a/deps/rabbit_common/src/file_handle_cache.erl b/deps/rabbit_common/src/file_handle_cache.erl
index 50ea181d14..5e5472cd8d 100644
--- a/deps/rabbit_common/src/file_handle_cache.erl
+++ b/deps/rabbit_common/src/file_handle_cache.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(file_handle_cache).
diff --git a/deps/rabbit_common/src/file_handle_cache_stats.erl b/deps/rabbit_common/src/file_handle_cache_stats.erl
index c5122112fa..b268f5c6a7 100644
--- a/deps/rabbit_common/src/file_handle_cache_stats.erl
+++ b/deps/rabbit_common/src/file_handle_cache_stats.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(file_handle_cache_stats).
diff --git a/deps/rabbit_common/src/gen_server2.erl b/deps/rabbit_common/src/gen_server2.erl
index 2b7f03ef10..ada7888b02 100644
--- a/deps/rabbit_common/src/gen_server2.erl
+++ b/deps/rabbit_common/src/gen_server2.erl
@@ -93,7 +93,7 @@
%%
%% 11) Internal buffer length is emitted as a core [RabbitMQ] metric.
-%% All modifications are (C) 2009-2021 VMware, Inc. or its affiliates.
+%% All modifications are (C) 2009-2022 VMware, Inc. or its affiliates.
%% ``The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
diff --git a/deps/rabbit_common/src/mirrored_supervisor.erl b/deps/rabbit_common/src/mirrored_supervisor.erl
index 2ef2bfda6e..fe097f910d 100644
--- a/deps/rabbit_common/src/mirrored_supervisor.erl
+++ b/deps/rabbit_common/src/mirrored_supervisor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mirrored_supervisor).
diff --git a/deps/rabbit_common/src/mirrored_supervisor_locks.erl b/deps/rabbit_common/src/mirrored_supervisor_locks.erl
index fc66a9eef3..79630a6225 100644
--- a/deps/rabbit_common/src/mirrored_supervisor_locks.erl
+++ b/deps/rabbit_common/src/mirrored_supervisor_locks.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mirrored_supervisor_locks).
diff --git a/deps/rabbit_common/src/mnesia_sync.erl b/deps/rabbit_common/src/mnesia_sync.erl
index 081e897009..f8227a8913 100644
--- a/deps/rabbit_common/src/mnesia_sync.erl
+++ b/deps/rabbit_common/src/mnesia_sync.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mnesia_sync).
diff --git a/deps/rabbit_common/src/pmon.erl b/deps/rabbit_common/src/pmon.erl
index d9cbe463cb..0e1f464c9a 100644
--- a/deps/rabbit_common/src/pmon.erl
+++ b/deps/rabbit_common/src/pmon.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(pmon).
diff --git a/deps/rabbit_common/src/priority_queue.erl b/deps/rabbit_common/src/priority_queue.erl
index 0c8580cc7c..9c92ce4e09 100644
--- a/deps/rabbit_common/src/priority_queue.erl
+++ b/deps/rabbit_common/src/priority_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Priority queues have essentially the same interface as ordinary
diff --git a/deps/rabbit_common/src/rabbit_amqp_connection.erl b/deps/rabbit_common/src/rabbit_amqp_connection.erl
index 058fa7d590..b0c5ec3168 100644
--- a/deps/rabbit_common/src/rabbit_amqp_connection.erl
+++ b/deps/rabbit_common/src/rabbit_amqp_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp_connection).
diff --git a/deps/rabbit_common/src/rabbit_amqqueue_common.erl b/deps/rabbit_common/src/rabbit_amqqueue_common.erl
index 958c2ce9c3..cb7883e3e0 100644
--- a/deps/rabbit_common/src/rabbit_amqqueue_common.erl
+++ b/deps/rabbit_common/src/rabbit_amqqueue_common.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqqueue_common).
diff --git a/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl b/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl
index 0c18a93745..f08a0ccba7 100644
--- a/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl
+++ b/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_dummy).
diff --git a/deps/rabbit_common/src/rabbit_auth_mechanism.erl b/deps/rabbit_common/src/rabbit_auth_mechanism.erl
index e9415780c8..eea4e03c23 100644
--- a/deps/rabbit_common/src/rabbit_auth_mechanism.erl
+++ b/deps/rabbit_common/src/rabbit_auth_mechanism.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_mechanism).
diff --git a/deps/rabbit_common/src/rabbit_authn_backend.erl b/deps/rabbit_common/src/rabbit_authn_backend.erl
index 61d230c69a..116b85a4de 100644
--- a/deps/rabbit_common/src/rabbit_authn_backend.erl
+++ b/deps/rabbit_common/src/rabbit_authn_backend.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_authn_backend).
diff --git a/deps/rabbit_common/src/rabbit_authz_backend.erl b/deps/rabbit_common/src/rabbit_authz_backend.erl
index 91b125f766..3fcd043fdc 100644
--- a/deps/rabbit_common/src/rabbit_authz_backend.erl
+++ b/deps/rabbit_common/src/rabbit_authz_backend.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_authz_backend).
diff --git a/deps/rabbit_common/src/rabbit_basic_common.erl b/deps/rabbit_common/src/rabbit_basic_common.erl
index 4facb1f1d0..6cc9a3fa83 100644
--- a/deps/rabbit_common/src/rabbit_basic_common.erl
+++ b/deps/rabbit_common/src/rabbit_basic_common.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_basic_common).
diff --git a/deps/rabbit_common/src/rabbit_binary_generator.erl b/deps/rabbit_common/src/rabbit_binary_generator.erl
index 1df98e50c4..e13ba66969 100644
--- a/deps/rabbit_common/src/rabbit_binary_generator.erl
+++ b/deps/rabbit_common/src/rabbit_binary_generator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_binary_generator).
diff --git a/deps/rabbit_common/src/rabbit_binary_parser.erl b/deps/rabbit_common/src/rabbit_binary_parser.erl
index cfe6f64833..506499d49a 100644
--- a/deps/rabbit_common/src/rabbit_binary_parser.erl
+++ b/deps/rabbit_common/src/rabbit_binary_parser.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_binary_parser).
diff --git a/deps/rabbit_common/src/rabbit_cert_info.erl b/deps/rabbit_common/src/rabbit_cert_info.erl
index 537915ca44..964d34e35c 100644
--- a/deps/rabbit_common/src/rabbit_cert_info.erl
+++ b/deps/rabbit_common/src/rabbit_cert_info.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_cert_info).
diff --git a/deps/rabbit_common/src/rabbit_channel_common.erl b/deps/rabbit_common/src/rabbit_channel_common.erl
index 9b7e144c02..7151d1276e 100644
--- a/deps/rabbit_common/src/rabbit_channel_common.erl
+++ b/deps/rabbit_common/src/rabbit_channel_common.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_channel_common).
diff --git a/deps/rabbit_common/src/rabbit_command_assembler.erl b/deps/rabbit_common/src/rabbit_command_assembler.erl
index 80cb70fc27..9ef13ee313 100644
--- a/deps/rabbit_common/src/rabbit_command_assembler.erl
+++ b/deps/rabbit_common/src/rabbit_command_assembler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_command_assembler).
diff --git a/deps/rabbit_common/src/rabbit_control_misc.erl b/deps/rabbit_common/src/rabbit_control_misc.erl
index 9abb20a27c..218cff3a3c 100644
--- a/deps/rabbit_common/src/rabbit_control_misc.erl
+++ b/deps/rabbit_common/src/rabbit_control_misc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_control_misc).
diff --git a/deps/rabbit_common/src/rabbit_core_metrics.erl b/deps/rabbit_common/src/rabbit_core_metrics.erl
index 0bd61d1e07..3117658140 100644
--- a/deps/rabbit_common/src/rabbit_core_metrics.erl
+++ b/deps/rabbit_common/src/rabbit_core_metrics.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_core_metrics).
diff --git a/deps/rabbit_common/src/rabbit_data_coercion.erl b/deps/rabbit_common/src/rabbit_data_coercion.erl
index 35f6171abf..4d36ac0905 100644
--- a/deps/rabbit_common/src/rabbit_data_coercion.erl
+++ b/deps/rabbit_common/src/rabbit_data_coercion.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_data_coercion).
diff --git a/deps/rabbit_common/src/rabbit_date_time.erl b/deps/rabbit_common/src/rabbit_date_time.erl
new file mode 100644
index 0000000000..3490534fa0
--- /dev/null
+++ b/deps/rabbit_common/src/rabbit_date_time.erl
@@ -0,0 +1,48 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module(rabbit_date_time).
+
+-export([parse_duration/1]).
+
+-type datetime_plist() :: list({atom(), integer()}).
+
+% from https://github.com/erlsci/iso8601/blob/main/src/iso8601.erl
+-spec gi(string()) -> integer().
+gi(DS) ->
+ {Int, _Rest} = string:to_integer(DS),
+ case Int of
+ error ->
+ 0;
+ _ ->
+ Int
+ end.
+
+-spec parse_duration(string()) -> datetime_plist().
+parse_duration(Bin)
+ when is_binary(Bin) -> %TODO extended format
+ parse_duration(binary_to_list(Bin));
+parse_duration(Str) ->
+ case re:run(Str,
+ "^(?<sign>-|\\+)?P(?:(?<years>[0-9]+)Y)?(?:(?<months>[0"
+ "-9]+)M)?(?:(?<days>[0-9]+)D)?(T(?:(?<hours>[0-9]+)H)?("
+ "?:(?<minutes>[0-9]+)M)?(?:(?<seconds>[0-9]+(?:\\.[0-9]"
+ "+)?)S)?)?$",
+ [{capture, [sign, years, months, days, hours, minutes, seconds],
+ list}])
+ of
+ {match, [Sign, Years, Months, Days, Hours, Minutes, Seconds]} ->
+ {ok, [{sign, Sign},
+ {years, gi(Years)},
+ {months, gi(Months)},
+ {days, gi(Days)},
+ {hours, gi(Hours)},
+ {minutes, gi(Minutes)},
+ {seconds, gi(Seconds)}]};
+ nomatch ->
+ error
+ end.
diff --git a/deps/rabbit_common/src/rabbit_env.erl b/deps/rabbit_common/src/rabbit_env.erl
index 39c9effae2..0b6737bedf 100644
--- a/deps/rabbit_common/src/rabbit_env.erl
+++ b/deps/rabbit_common/src/rabbit_env.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_env).
diff --git a/deps/rabbit_common/src/rabbit_error_logger_handler.erl b/deps/rabbit_common/src/rabbit_error_logger_handler.erl
index 8ebadd6e85..d17c372c6c 100644
--- a/deps/rabbit_common/src/rabbit_error_logger_handler.erl
+++ b/deps/rabbit_common/src/rabbit_error_logger_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_error_logger_handler).
diff --git a/deps/rabbit_common/src/rabbit_event.erl b/deps/rabbit_common/src/rabbit_event.erl
index 99e03e9c67..8d3cdfe750 100644
--- a/deps/rabbit_common/src/rabbit_event.erl
+++ b/deps/rabbit_common/src/rabbit_event.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_event).
diff --git a/deps/rabbit_common/src/rabbit_exchange_type.erl b/deps/rabbit_common/src/rabbit_exchange_type.erl
index 2c2f180779..c7b66bf4a2 100644
--- a/deps/rabbit_common/src/rabbit_exchange_type.erl
+++ b/deps/rabbit_common/src/rabbit_exchange_type.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type).
diff --git a/deps/rabbit_common/src/rabbit_heartbeat.erl b/deps/rabbit_common/src/rabbit_heartbeat.erl
index 4e99285706..67690ebd66 100644
--- a/deps/rabbit_common/src/rabbit_heartbeat.erl
+++ b/deps/rabbit_common/src/rabbit_heartbeat.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_heartbeat).
diff --git a/deps/rabbit_common/src/rabbit_json.erl b/deps/rabbit_common/src/rabbit_json.erl
index 484512efc6..e434dee14e 100644
--- a/deps/rabbit_common/src/rabbit_json.erl
+++ b/deps/rabbit_common/src/rabbit_json.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_json).
diff --git a/deps/rabbit_common/src/rabbit_log.erl b/deps/rabbit_common/src/rabbit_log.erl
index d774e6dcc2..81258f64fe 100644
--- a/deps/rabbit_common/src/rabbit_log.erl
+++ b/deps/rabbit_common/src/rabbit_log.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_log).
diff --git a/deps/rabbit_common/src/rabbit_misc.erl b/deps/rabbit_common/src/rabbit_misc.erl
index e94d2f3a79..3197171e27 100644
--- a/deps/rabbit_common/src/rabbit_misc.erl
+++ b/deps/rabbit_common/src/rabbit_misc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_misc).
diff --git a/deps/rabbit_common/src/rabbit_msg_store_index.erl b/deps/rabbit_common/src/rabbit_msg_store_index.erl
index e51ed43182..c3bca81e2e 100644
--- a/deps/rabbit_common/src/rabbit_msg_store_index.erl
+++ b/deps/rabbit_common/src/rabbit_msg_store_index.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_msg_store_index).
diff --git a/deps/rabbit_common/src/rabbit_net.erl b/deps/rabbit_common/src/rabbit_net.erl
index 865ca6f253..a6322c0ed4 100644
--- a/deps/rabbit_common/src/rabbit_net.erl
+++ b/deps/rabbit_common/src/rabbit_net.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_net).
diff --git a/deps/rabbit_common/src/rabbit_nodes_common.erl b/deps/rabbit_common/src/rabbit_nodes_common.erl
index b73debfe17..2a0017fc00 100644
--- a/deps/rabbit_common/src/rabbit_nodes_common.erl
+++ b/deps/rabbit_common/src/rabbit_nodes_common.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_nodes_common).
diff --git a/deps/rabbit_common/src/rabbit_password_hashing.erl b/deps/rabbit_common/src/rabbit_password_hashing.erl
index 035936361c..5c5540185d 100644
--- a/deps/rabbit_common/src/rabbit_password_hashing.erl
+++ b/deps/rabbit_common/src/rabbit_password_hashing.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_password_hashing).
diff --git a/deps/rabbit_common/src/rabbit_pbe.erl b/deps/rabbit_common/src/rabbit_pbe.erl
index 7ad8af5035..288ea961a5 100644
--- a/deps/rabbit_common/src/rabbit_pbe.erl
+++ b/deps/rabbit_common/src/rabbit_pbe.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_pbe).
diff --git a/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl b/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl
index 14132ae528..5600fc1d90 100644
--- a/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl
+++ b/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl
@@ -2,7 +2,7 @@
%% from rabbitmq-autocluster by Gavin Roy.
%%
%% Copyright (c) 2014-2015 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates
%% All rights reserved.
%%
%% Redistribution and use in source and binary forms, with or without modification,
@@ -32,7 +32,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2014-2015 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_backend).
diff --git a/deps/rabbit_common/src/rabbit_policy_validator.erl b/deps/rabbit_common/src/rabbit_policy_validator.erl
index f78c5af7a6..b97ff09aa2 100644
--- a/deps/rabbit_common/src/rabbit_policy_validator.erl
+++ b/deps/rabbit_common/src/rabbit_policy_validator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_policy_validator).
diff --git a/deps/rabbit_common/src/rabbit_queue_collector.erl b/deps/rabbit_common/src/rabbit_queue_collector.erl
index 1781d83e71..b215cdc18b 100644
--- a/deps/rabbit_common/src/rabbit_queue_collector.erl
+++ b/deps/rabbit_common/src/rabbit_queue_collector.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_queue_collector).
diff --git a/deps/rabbit_common/src/rabbit_registry.erl b/deps/rabbit_common/src/rabbit_registry.erl
index 1731b86add..460b7efe26 100644
--- a/deps/rabbit_common/src/rabbit_registry.erl
+++ b/deps/rabbit_common/src/rabbit_registry.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_registry).
diff --git a/deps/rabbit_common/src/rabbit_registry_class.erl b/deps/rabbit_common/src/rabbit_registry_class.erl
index b651060619..c89f0be126 100644
--- a/deps/rabbit_common/src/rabbit_registry_class.erl
+++ b/deps/rabbit_common/src/rabbit_registry_class.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_registry_class).
diff --git a/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl b/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl
index ea6a80edcc..53b0f08c74 100644
--- a/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl
+++ b/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
diff --git a/deps/rabbit_common/src/rabbit_runtime.erl b/deps/rabbit_common/src/rabbit_runtime.erl
index 26f190c5eb..24ebee1548 100644
--- a/deps/rabbit_common/src/rabbit_runtime.erl
+++ b/deps/rabbit_common/src/rabbit_runtime.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This module provides access to runtime metrics that are exposed
diff --git a/deps/rabbit_common/src/rabbit_runtime_parameter.erl b/deps/rabbit_common/src/rabbit_runtime_parameter.erl
index 4c3803e1e7..d1fb99b012 100644
--- a/deps/rabbit_common/src/rabbit_runtime_parameter.erl
+++ b/deps/rabbit_common/src/rabbit_runtime_parameter.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_runtime_parameter).
diff --git a/deps/rabbit_common/src/rabbit_ssl_options.erl b/deps/rabbit_common/src/rabbit_ssl_options.erl
index e5302d4420..aa20e78b08 100644
--- a/deps/rabbit_common/src/rabbit_ssl_options.erl
+++ b/deps/rabbit_common/src/rabbit_ssl_options.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ssl_options).
diff --git a/deps/rabbit_common/src/rabbit_types.erl b/deps/rabbit_common/src/rabbit_types.erl
index 0f7782aef6..55c6b57fdf 100644
--- a/deps/rabbit_common/src/rabbit_types.erl
+++ b/deps/rabbit_common/src/rabbit_types.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_types).
diff --git a/deps/rabbit_common/src/rabbit_writer.erl b/deps/rabbit_common/src/rabbit_writer.erl
index 476f54ce0c..9ba99d1d33 100644
--- a/deps/rabbit_common/src/rabbit_writer.erl
+++ b/deps/rabbit_common/src/rabbit_writer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_writer).
diff --git a/deps/rabbit_common/src/supervisor2.erl b/deps/rabbit_common/src/supervisor2.erl
index d6e8b82262..203d5cd575 100644
--- a/deps/rabbit_common/src/supervisor2.erl
+++ b/deps/rabbit_common/src/supervisor2.erl
@@ -40,7 +40,7 @@
%% 5) normal, and {shutdown, _} exit reasons are all treated the same
%% (i.e. are regarded as normal exits)
%%
-%% All modifications are (C) 2010-2021 VMware, Inc. or its affiliates.
+%% All modifications are (C) 2010-2022 VMware, Inc. or its affiliates.
%%
%% %CopyrightBegin%
%%
diff --git a/deps/rabbit_common/src/vm_memory_monitor.erl b/deps/rabbit_common/src/vm_memory_monitor.erl
index efb2a63776..302d481f90 100644
--- a/deps/rabbit_common/src/vm_memory_monitor.erl
+++ b/deps/rabbit_common/src/vm_memory_monitor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% In practice Erlang shouldn't be allowed to grow to more than a half
diff --git a/deps/rabbit_common/src/worker_pool.erl b/deps/rabbit_common/src/worker_pool.erl
index 663ac99267..fc78143b2c 100644
--- a/deps/rabbit_common/src/worker_pool.erl
+++ b/deps/rabbit_common/src/worker_pool.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(worker_pool).
diff --git a/deps/rabbit_common/src/worker_pool_sup.erl b/deps/rabbit_common/src/worker_pool_sup.erl
index d3f53d2e2a..a9815ba149 100644
--- a/deps/rabbit_common/src/worker_pool_sup.erl
+++ b/deps/rabbit_common/src/worker_pool_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(worker_pool_sup).
diff --git a/deps/rabbit_common/src/worker_pool_worker.erl b/deps/rabbit_common/src/worker_pool_worker.erl
index b90a878225..8a2e217bfc 100644
--- a/deps/rabbit_common/src/worker_pool_worker.erl
+++ b/deps/rabbit_common/src/worker_pool_worker.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(worker_pool_worker).
diff --git a/deps/rabbit_common/test/gen_server2_test_server.erl b/deps/rabbit_common/test/gen_server2_test_server.erl
index 0bc8d360e9..13e1b997d3 100644
--- a/deps/rabbit_common/test/gen_server2_test_server.erl
+++ b/deps/rabbit_common/test/gen_server2_test_server.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(gen_server2_test_server).
diff --git a/deps/rabbit_common/test/rabbit_env_SUITE.erl b/deps/rabbit_common/test/rabbit_env_SUITE.erl
index 1ca7c5ca96..bb2ea1e772 100644
--- a/deps/rabbit_common/test/rabbit_env_SUITE.erl
+++ b/deps/rabbit_common/test/rabbit_env_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_env_SUITE).
diff --git a/deps/rabbit_common/test/supervisor2_SUITE.erl b/deps/rabbit_common/test/supervisor2_SUITE.erl
index 3ac62c151f..d4376d326f 100644
--- a/deps/rabbit_common/test/supervisor2_SUITE.erl
+++ b/deps/rabbit_common/test/supervisor2_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(supervisor2_SUITE).
diff --git a/deps/rabbit_common/test/unit_SUITE.erl b/deps/rabbit_common/test/unit_SUITE.erl
index 105488bed0..3017b9f9a7 100644
--- a/deps/rabbit_common/test/unit_SUITE.erl
+++ b/deps/rabbit_common/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbit_common/test/unit_priority_queue_SUITE.erl b/deps/rabbit_common/test/unit_priority_queue_SUITE.erl
index f650fc84d7..a37b548452 100644
--- a/deps/rabbit_common/test/unit_priority_queue_SUITE.erl
+++ b/deps/rabbit_common/test/unit_priority_queue_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_priority_queue_SUITE).
diff --git a/deps/rabbit_common/test/worker_pool_SUITE.erl b/deps/rabbit_common/test/worker_pool_SUITE.erl
index c0df03062e..82124edb02 100644
--- a/deps/rabbit_common/test/worker_pool_SUITE.erl
+++ b/deps/rabbit_common/test/worker_pool_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(worker_pool_SUITE).
diff --git a/deps/rabbitmq_amqp1_0/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListAmqp10ConnectionsCommand.erl b/deps/rabbitmq_amqp1_0/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListAmqp10ConnectionsCommand.erl
index 24a60b2ce1..19d355aa0f 100644
--- a/deps/rabbitmq_amqp1_0/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListAmqp10ConnectionsCommand.erl
+++ b/deps/rabbitmq_amqp1_0/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListAmqp10ConnectionsCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.ListAmqp10ConnectionsCommand').
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0.erl
index c02c28d827..a7ea20d466 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_channel.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_channel.erl
index e22461695d..a986fb25ea 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_channel.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_channel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_channel).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_incoming_link.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_incoming_link.erl
index a38557e3e1..b5babd790d 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_incoming_link.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_incoming_link.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_incoming_link).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_link_util.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_link_util.erl
index 818c95dd76..48bc4ba932 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_link_util.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_link_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_link_util).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_message.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_message.erl
index 42248ce0ab..bc98bb5915 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_message.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_message.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_message).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_outgoing_link.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_outgoing_link.erl
index 3e58a23b76..5ed22f6dac 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_outgoing_link.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_outgoing_link.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_outgoing_link).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl
index 20a4584fbb..6e44215bc5 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_reader).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session.erl
index 6b69f38d98..4de09a840a 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_session).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_process.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_process.erl
index d1899ece06..471a2da165 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_process.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_process.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_session_process).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup.erl
index 24fe177476..369a0bb0c3 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_session_sup).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup_sup.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup_sup.erl
index 9462b860fd..e68344b3a5 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup_sup.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_session_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_session_sup_sup).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_util.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_util.erl
index f8ea489241..4626e0d07c 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_util.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_util).
diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_writer.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_writer.erl
index f9ab546a0a..287a243f8d 100644
--- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_writer.erl
+++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_writer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp1_0_writer).
diff --git a/deps/rabbitmq_amqp1_0/test/amqp10_client_SUITE.erl b/deps/rabbitmq_amqp1_0/test/amqp10_client_SUITE.erl
index 939d7480db..3946183bb2 100644
--- a/deps/rabbitmq_amqp1_0/test/amqp10_client_SUITE.erl
+++ b/deps/rabbitmq_amqp1_0/test/amqp10_client_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_client_SUITE).
diff --git a/deps/rabbitmq_amqp1_0/test/command_SUITE.erl b/deps/rabbitmq_amqp1_0/test/command_SUITE.erl
index a107e8ddbc..eea21e3389 100644
--- a/deps/rabbitmq_amqp1_0/test/command_SUITE.erl
+++ b/deps/rabbitmq_amqp1_0/test/command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(command_SUITE).
diff --git a/deps/rabbitmq_amqp1_0/test/proxy_protocol_SUITE.erl b/deps/rabbitmq_amqp1_0/test/proxy_protocol_SUITE.erl
index ec42a0d722..9153709172 100644
--- a/deps/rabbitmq_amqp1_0/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbitmq_amqp1_0/test/proxy_protocol_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(proxy_protocol_SUITE).
diff --git a/deps/rabbitmq_amqp1_0/test/system_SUITE.erl b/deps/rabbitmq_amqp1_0/test/system_SUITE.erl
index bf4117fbbc..c10de84753 100644
--- a/deps/rabbitmq_amqp1_0/test/system_SUITE.erl
+++ b/deps/rabbitmq_amqp1_0/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_amqp1_0/test/unit_SUITE.erl b/deps/rabbitmq_amqp1_0/test/unit_SUITE.erl
index b5f166023d..3827e1254e 100644
--- a/deps/rabbitmq_amqp1_0/test/unit_SUITE.erl
+++ b/deps/rabbitmq_amqp1_0/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_auth_backend_cache/include/rabbit_auth_backend_cache.hrl b/deps/rabbitmq_auth_backend_cache/include/rabbit_auth_backend_cache.hrl
index e59e65c14c..a40c08a57f 100644
--- a/deps/rabbitmq_auth_backend_cache/include/rabbit_auth_backend_cache.hrl
+++ b/deps/rabbitmq_auth_backend_cache/include/rabbit_auth_backend_cache.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Same as default channel operation timeout.
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache.erl
index 61e934d559..0d1e726950 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_cache).
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache_app.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache_app.erl
index 7c8d4d306b..c26e9597bf 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache_app.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_cache_app).
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache.erl
index 194509a3fc..0abb5ace98 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_cache).
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_dict.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_dict.erl
index 9dc9d4721f..a51f102259 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_dict.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_dict.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_cache_dict).
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets.erl
index 020885ba17..ba6b4aef57 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_cache_ets).
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented.erl
index c4dd827768..1098dbeacd 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_cache_ets_segmented).
diff --git a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented_stateless.erl b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented_stateless.erl
index 82a78a62ea..ce05232b76 100644
--- a/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented_stateless.erl
+++ b/deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented_stateless.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_cache_ets_segmented_stateless).
diff --git a/deps/rabbitmq_auth_backend_cache/test/config_schema_SUITE.erl b/deps/rabbitmq_auth_backend_cache/test/config_schema_SUITE.erl
index 813c01d884..9fa3c6b199 100644
--- a/deps/rabbitmq_auth_backend_cache/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_cache/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_backend_cache_SUITE.erl b/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_backend_cache_SUITE.erl
index ea66084596..42a6893ee9 100644
--- a/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_backend_cache_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_backend_cache_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_cache_SUITE).
diff --git a/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_cache_SUITE.erl b/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_cache_SUITE.erl
index 2f5d0b89ff..907b1c683b 100644
--- a/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_cache_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_cache/test/rabbit_auth_cache_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_cache_SUITE).
diff --git a/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http.erl b/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http.erl
index ec8e822405..07508d02c3 100644
--- a/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http.erl
+++ b/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_http).
diff --git a/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http_app.erl b/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http_app.erl
index d6d362f69d..6a815d2dce 100644
--- a/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http_app.erl
+++ b/deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_http_app).
diff --git a/deps/rabbitmq_auth_backend_http/test/auth_SUITE.erl b/deps/rabbitmq_auth_backend_http/test/auth_SUITE.erl
index 9074943aa9..7b326b72c8 100644
--- a/deps/rabbitmq_auth_backend_http/test/auth_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_http/test/auth_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(auth_SUITE).
diff --git a/deps/rabbitmq_auth_backend_http/test/config_schema_SUITE.erl b/deps/rabbitmq_auth_backend_http/test/config_schema_SUITE.erl
index 28d40339b2..af88669f33 100644
--- a/deps/rabbitmq_auth_backend_http/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_http/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_auth_backend_http/test/unit_SUITE.erl b/deps/rabbitmq_auth_backend_http/test/unit_SUITE.erl
index e081ca397a..83296477ac 100644
--- a/deps/rabbitmq_auth_backend_http/test/unit_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_http/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl
index 7f2730682c..1920cc0d63 100644
--- a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl
+++ b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_ldap).
diff --git a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_app.erl b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_app.erl
index 48468620bb..0ff93d0106 100644
--- a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_app.erl
+++ b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_ldap_app).
diff --git a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_util.erl b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_util.erl
index 21e808b982..7e4d01fc34 100644
--- a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_util.erl
+++ b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_ldap_util).
diff --git a/deps/rabbitmq_auth_backend_ldap/test/config_schema_SUITE.erl b/deps/rabbitmq_auth_backend_ldap/test/config_schema_SUITE.erl
index 7a138f55af..11f9107e9b 100644
--- a/deps/rabbitmq_auth_backend_ldap/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_ldap/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_auth_backend_ldap/test/rabbit_ldap_seed.erl b/deps/rabbitmq_auth_backend_ldap/test/rabbit_ldap_seed.erl
index 1eace23997..77633c4d6b 100644
--- a/deps/rabbitmq_auth_backend_ldap/test/rabbit_ldap_seed.erl
+++ b/deps/rabbitmq_auth_backend_ldap/test/rabbit_ldap_seed.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ldap_seed).
diff --git a/deps/rabbitmq_auth_backend_ldap/test/system_SUITE.erl b/deps/rabbitmq_auth_backend_ldap/test/system_SUITE.erl
index 936d77aa6c..2fa2fea3a9 100644
--- a/deps/rabbitmq_auth_backend_ldap/test/system_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_ldap/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_auth_backend_ldap/test/unit_SUITE.erl b/deps/rabbitmq_auth_backend_ldap/test/unit_SUITE.erl
index 36b9f3034c..1e3b20953c 100644
--- a/deps/rabbitmq_auth_backend_ldap/test/unit_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_ldap/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/Elixir.RabbitMQ.CLI.Ctl.Commands.AddUaaKeyCommand.erl b/deps/rabbitmq_auth_backend_oauth2/src/Elixir.RabbitMQ.CLI.Ctl.Commands.AddUaaKeyCommand.erl
index 357c24cbcd..902a745299 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/Elixir.RabbitMQ.CLI.Ctl.Commands.AddUaaKeyCommand.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/Elixir.RabbitMQ.CLI.Ctl.Commands.AddUaaKeyCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.AddUaaKeyCommand').
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl
index 306c7f2cc8..91bf69ac66 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_oauth2).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2_app.erl b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2_app.erl
index dd4c88c800..bf9b4402a7 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2_app.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_oauth2_app).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_oauth2_scope.erl b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_oauth2_scope.erl
index ec2c45290f..60515ecb71 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_oauth2_scope.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_oauth2_scope.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_oauth2_scope).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt.erl b/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt.erl
index 6721bbf5e7..731ae6a481 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(uaa_jwt).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwk.erl b/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwk.erl
index a258ee0051..2ea3c58d29 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwk.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwk.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(uaa_jwt_jwk).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwt.erl b/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwt.erl
index aa1cdd8241..d1835120d4 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwt.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt_jwt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(uaa_jwt_jwt).
diff --git a/deps/rabbitmq_auth_backend_oauth2/src/wildcard.erl b/deps/rabbitmq_auth_backend_oauth2/src/wildcard.erl
index 5c25cbf272..60f2353600 100644
--- a/deps/rabbitmq_auth_backend_oauth2/src/wildcard.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/src/wildcard.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(wildcard).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/add_uaa_key_command_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/add_uaa_key_command_SUITE.erl
index 86dccca5ce..7dcb226853 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/add_uaa_key_command_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/add_uaa_key_command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(add_uaa_key_command_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/config_schema_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/config_schema_SUITE.erl
index 9a7ada0ece..e84ce33e43 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/jwks_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/jwks_SUITE.erl
index 2ae29a2761..3906f1ba0a 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/jwks_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/jwks_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(jwks_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/rabbit_auth_backend_oauth2_test_util.erl b/deps/rabbitmq_auth_backend_oauth2/test/rabbit_auth_backend_oauth2_test_util.erl
index 80b6648352..b367a3a606 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/rabbit_auth_backend_oauth2_test_util.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/rabbit_auth_backend_oauth2_test_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_backend_oauth2_test_util).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/scope_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/scope_SUITE.erl
index 771e5b6786..13031e9c27 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/scope_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/scope_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(scope_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/system_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/system_SUITE.erl
index fa63eef3e0..05b0b0d7ae 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/system_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/unit_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/unit_SUITE.erl
index 5441944089..91e8e6fe7a 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/unit_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_auth_backend_oauth2/test/wildcard_match_SUITE.erl b/deps/rabbitmq_auth_backend_oauth2/test/wildcard_match_SUITE.erl
index cd7059979f..829732da6e 100644
--- a/deps/rabbitmq_auth_backend_oauth2/test/wildcard_match_SUITE.erl
+++ b/deps/rabbitmq_auth_backend_oauth2/test/wildcard_match_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(wildcard_match_SUITE).
diff --git a/deps/rabbitmq_auth_mechanism_ssl/README.md b/deps/rabbitmq_auth_mechanism_ssl/README.md
index d1bad3ec94..1c72e02411 100644
--- a/deps/rabbitmq_auth_mechanism_ssl/README.md
+++ b/deps/rabbitmq_auth_mechanism_ssl/README.md
@@ -128,6 +128,6 @@ ssl_cert_login_from = common_name
## Copyright & License
-(c) 2007-2021 VMware, Inc. or its affiliates.
+(c) 2007-2022 VMware, Inc. or its affiliates.
Released under the same license as RabbitMQ.
diff --git a/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl.erl b/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl.erl
index c8c346467a..95e20fe05d 100644
--- a/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl.erl
+++ b/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
diff --git a/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl_app.erl b/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl_app.erl
index 5e2eac48a8..cc911fb6cc 100644
--- a/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl_app.erl
+++ b/deps/rabbitmq_auth_mechanism_ssl/src/rabbit_auth_mechanism_ssl_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_auth_mechanism_ssl_app).
diff --git a/deps/rabbitmq_aws/priv/schema/rabbitmq_aws.schema b/deps/rabbitmq_aws/priv/schema/rabbitmq_aws.schema
index 8803783359..aab42d9cc9 100644
--- a/deps/rabbitmq_aws/priv/schema/rabbitmq_aws.schema
+++ b/deps/rabbitmq_aws/priv/schema/rabbitmq_aws.schema
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
% ===============================
diff --git a/deps/rabbitmq_aws/src/rabbitmq_aws_config.erl b/deps/rabbitmq_aws/src/rabbitmq_aws_config.erl
index b4a24eb68d..252a90e559 100644
--- a/deps/rabbitmq_aws/src/rabbitmq_aws_config.erl
+++ b/deps/rabbitmq_aws/src/rabbitmq_aws_config.erl
@@ -1,7 +1,7 @@
%% ====================================================================
%% @author Gavin M. Roy <gavinmroy@gmail.com>
%% @copyright 2016, Gavin M. Roy
-%% @copyright 2016-2021 VMware, Inc. or its affiliates.
+%% @copyright 2016-2022 VMware, Inc. or its affiliates.
%% @private
%% @doc rabbitmq_aws configuration functionality
%% @end
diff --git a/deps/rabbitmq_cli/lib/rabbit_common/records.ex b/deps/rabbitmq_cli/lib/rabbit_common/records.ex
index cfb6b1a79b..9db811be87 100644
--- a/deps/rabbitmq_cli/lib/rabbit_common/records.ex
+++ b/deps/rabbitmq_cli/lib/rabbit_common/records.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitCommon.Records do
require Record
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/auto_complete.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/auto_complete.ex
index b8c97a8e18..557f4dbcf3 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/auto_complete.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/auto_complete.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.AutoComplete do
alias RabbitMQ.CLI.Core.{CommandModules, Parser}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/command_behaviour.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/command_behaviour.ex
index 525b6958bf..4b73a4694f 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/command_behaviour.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/command_behaviour.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.CommandBehaviour do
alias RabbitMQ.CLI.Core.Helpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_default_switches_and_timeout.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_default_switches_and_timeout.ex
index 3c1b517fe1..2d33d384a1 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_default_switches_and_timeout.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_default_switches_and_timeout.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_no_positional_arguments.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_no_positional_arguments.ex
index ef5de9c91e..cb57d9d2cb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_no_positional_arguments.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_no_positional_arguments.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positional_argument.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positional_argument.ex
index 402593bb04..902f3fb69b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positional_argument.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positional_argument.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positive_integer_argument.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positive_integer_argument.ex
index 0825dc7ed9..5baf794ef1 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positive_integer_argument.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_one_positive_integer_argument.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_two_positional_arguments.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_two_positional_arguments.ex
index 701dbc3699..3fbb892a56 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_two_positional_arguments.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/accepts_two_positional_arguments.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/alarms.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/alarms.ex
index 38fe53ca99..9dd265093e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/alarms.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/alarms.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Alarms do
def alarm_lines(alarms, node_name) do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/ansi.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/ansi.ex
index 4d18461be8..e31c7d4098 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/ansi.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/ansi.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.ANSI do
def bright(string) do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex
index b9eb9a2701..fe4bb80854 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.CodePath do
alias RabbitMQ.CLI.Core.{Config, Paths, Platform}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/command_modules.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/command_modules.ex
index 7343a139cc..01935cf2da 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/command_modules.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/command_modules.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.CommandModules do
alias RabbitMQ.CLI.Core.{Config, DataCoercion}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex
index b403b18c87..de286c43f0 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Config do
alias RabbitMQ.CLI.{
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/data_coercion.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/data_coercion.ex
index 94def6536c..2c90c3ba71 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/data_coercion.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/data_coercion.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defprotocol RabbitMQ.CLI.Core.DataCoercion do
def to_atom(data)
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/distribution.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/distribution.ex
index 4b2423d52c..f039e226fe 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/distribution.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/distribution.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Distribution do
alias RabbitMQ.CLI.Core.{ANSI, Config, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex
index 8992588f9d..b301ad8b5a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.DocGuide.Macros do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/erl_eval.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/erl_eval.ex
index 9b35e4a0df..8913c7ee84 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/erl_eval.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/erl_eval.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.ErlEval do
def parse_expr(expr) do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/exit_codes.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/exit_codes.ex
index d087bdd7bf..e0d54a9d8c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/exit_codes.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/exit_codes.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Lists predefined error exit codes used by RabbitMQ CLI tools.
# The codes are adopted from [1], which (according to our team's research)
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/feature_flags.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/feature_flags.ex
index dd8148f354..fd573969e3 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/feature_flags.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/feature_flags.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.FeatureFlags do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/helpers.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/helpers.ex
index 4719af08d0..0d792238e0 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/helpers.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/helpers.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Helpers do
alias RabbitMQ.CLI.Core.{Config, DataCoercion, NodeName}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/listeners.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/listeners.ex
index e3bd61b4a0..4ff17607c6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/listeners.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/listeners.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Listeners do
import Record, only: [defrecord: 3, extract: 2]
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/log_files.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/log_files.ex
index 19c4f316f5..ef2874cd63 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/log_files.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/log_files.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.LogFiles do
@spec get_log_locations(atom, integer | :infinity) :: [String.t] | {:badrpc, term}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/memory.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/memory.ex
index d388cf1ec8..4f82884836 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/memory.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/memory.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Memory do
alias RabbitMQ.CLI.InformationUnit, as: IU
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_default_virtual_host.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_default_virtual_host.ex
index 996dba08c8..9f0b63ed22 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_default_virtual_host.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_default_virtual_host.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_no_defaults.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_no_defaults.ex
index 34175bd19e..b2ceb8c4a4 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_no_defaults.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/merges_no_defaults.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/networking.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/networking.ex
index b07c7a2d4f..6dd3727367 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/networking.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/networking.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Networking do
@type address_family() :: :inet | :inet6
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/node_name.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/node_name.ex
index cd43404491..bd5867e755 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/node_name.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/node_name.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.NodeName do
alias RabbitMQ.CLI.Core.Config
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/os_pid.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/os_pid.ex
index 1632b290a6..1c08d2a60b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/os_pid.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/os_pid.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.OsPid do
@external_process_check_interval 1000
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/output.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/output.ex
index 936049a90d..8fde452b48 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/output.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/output.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Output do
def format_output(:ok, _, _) do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/parser.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/parser.ex
index d8e2c8e4b7..b930c307bc 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/parser.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/parser.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Parser do
alias RabbitMQ.CLI.{CommandBehaviour, FormatterBehaviour}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/paths.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/paths.ex
index caec7b0b89..726f0b9d0a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/paths.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/paths.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Paths do
alias RabbitMQ.CLI.Core.Config
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/platform.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/platform.ex
index ae9410dc2d..2a73ff6e84 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/platform.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/platform.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Platform do
def path_separator() do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_running.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_running.ex
index de3a15c331..707b7c24b4 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_running.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_running.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be running
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_stopped.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_stopped.ex
index 50e8d3aa97..e91615bf73 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_stopped.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/requires_rabbit_app_stopped.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Should be used by commands that require rabbit app to be stopped
# but need no other execution environment validators.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/validators.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/validators.ex
index f87de91064..0973810a7b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/validators.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/validators.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Provides common validation functions.
defmodule RabbitMQ.CLI.Core.Validators do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/version.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/version.ex
index fe599fc8a0..25890955ea 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/version.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/version.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.Version do
@default_timeout 30_000
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_user_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_user_command.ex
index ab9c49c7bd..59423b649a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_user_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_user_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AddUserCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers, Input}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_vhost_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_vhost_command.ex
index 70217c307b..a1fd101978 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_vhost_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/add_vhost_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AddVhostCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/authenticate_user_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/authenticate_user_command.ex
index 7ae78f94ba..715d1f0085 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/authenticate_user_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/authenticate_user_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AuthenticateUserCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Input}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/autocomplete_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/autocomplete_command.ex
index 835aefcb1d..54751b8489 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/autocomplete_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/autocomplete_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AutocompleteCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_online_nodes_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_online_nodes_command.ex
index 81463161e4..25f9e51a05 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_online_nodes_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_online_nodes_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AwaitOnlineNodesCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex
index 933b4c0da0..778c6f6a5f 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AwaitStartupCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cancel_sync_queue_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cancel_sync_queue_command.ex
index 16e422f29d..9dcdd35071 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cancel_sync_queue_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cancel_sync_queue_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.CancelSyncQueueCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_cluster_node_type_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_cluster_node_type_command.ex
index 999407eb0e..cd2d2f3626 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_cluster_node_type_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_cluster_node_type_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ChangeClusterNodeTypeCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_password_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_password_command.ex
index 15c59f5201..eac10be49c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_password_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/change_password_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ChangePasswordCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers, Input}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_global_parameter_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_global_parameter_command.ex
index 1909ff982e..30b0469456 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_global_parameter_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_global_parameter_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearGlobalParameterCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_operator_policy_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_operator_policy_command.ex
index d13817d9ee..42aae9be23 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_operator_policy_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_operator_policy_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearOperatorPolicyCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_parameter_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_parameter_command.ex
index 8dbd310ae5..602ef4068e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_parameter_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_parameter_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearParameterCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_password_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_password_command.ex
index bdf2e728e2..d26bc86d54 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_password_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_password_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearPasswordCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_permissions_command.ex
index 9e3c045c74..d756a96181 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearPermissionsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_policy_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_policy_command.ex
index 6cd58734df..47e4f2ea06 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_policy_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_policy_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearPolicyCommand do
alias RabbitMQ.CLI.Core.{Helpers, DocGuide}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_topic_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_topic_permissions_command.ex
index 1969bed638..7d31a89d56 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_topic_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_topic_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearTopicPermissionsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_vhost_limits_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_vhost_limits_command.ex
index 68d9b78c6c..8adccb63f5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_vhost_limits_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/clear_vhost_limits_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClearVhostLimitsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_connections_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_connections_command.ex
index 4399dc14ea..2a831131fb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_connections_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_connections_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.CloseAllConnectionsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_user_connections_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_user_connections_command.ex
index 184e1df8a7..6bce8fb4ff 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_user_connections_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_all_user_connections_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.CloseAllUserConnectionsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_connection_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_connection_command.ex
index 2715725a2d..bcf1c06d08 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_connection_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/close_connection_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.CloseConnectionCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex
index cf700577fb..ff62c92d38 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ClusterStatusCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_queue_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_queue_command.ex
index 5c5aebe3eb..0a29f87744 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_queue_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_queue_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.DeleteQueueCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_user_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_user_command.ex
index 8af546e424..7ab1e1304e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_user_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_user_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.DeleteUserCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_vhost_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_vhost_command.ex
index 4207379e37..89ae26184a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_vhost_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/delete_vhost_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.DeleteVhostCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex
index c08f59fea3..8cc34aa095 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.EnableFeatureFlagCommand do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex
index ae65beae5b..9d8b168d4b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.EncodeCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/environment_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/environment_command.ex
index 73f874ed03..67411e0819 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/environment_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/environment_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.EnvironmentCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_command.ex
index 8547bb7b13..9a8d8fa329 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.EvalCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ErlEval, ExitCodes, Input}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_file_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_file_command.ex
index 70019df2cd..0c1e8d8ad2 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_file_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/eval_file_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.EvalFileCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ErlEval, ExitCodes}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/exec_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/exec_command.ex
index 1739bcf33f..69b74a7954 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/exec_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/exec_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ExecCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/export_definitions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/export_definitions_command.ex
index a9cd0b3029..2aeb251c79 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/export_definitions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/export_definitions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ExportDefinitionsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_boot_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_boot_command.ex
index ea26459893..4b4d0340ec 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_boot_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_boot_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ForceBootCommand do
alias RabbitMQ.CLI.Core.{Config, DocGuide}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_gc_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_gc_command.ex
index 5863877904..f646e6b7fd 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_gc_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_gc_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ForceGcCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_reset_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_reset_command.ex
index 4c8e6464ae..a98cffe573 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_reset_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_reset_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ForceResetCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/forget_cluster_node_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/forget_cluster_node_command.ex
index 43d982e72f..deaff99d45 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/forget_cluster_node_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/forget_cluster_node_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ForgetClusterNodeCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Distribution, Validators}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex
index 1148c95cae..a3ebad67f7 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/hipe_compile_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/hipe_compile_command.ex
index 8af20dc746..d7d6aa8985 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/hipe_compile_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/hipe_compile_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.HipeCompileCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/import_definitions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/import_definitions_command.ex
index 680c80de97..c979b6b20d 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/import_definitions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/import_definitions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ImportDefinitionsCommand do
alias RabbitMQ.CLI.Core.{Config, DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/join_cluster_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/join_cluster_command.ex
index c92965c8c9..d23ceec3d8 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/join_cluster_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/join_cluster_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.JoinClusterCommand do
alias RabbitMQ.CLI.Core.{Config, DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_bindings_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_bindings_command.ex
index 65cf84f304..3257cc2c55 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_bindings_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_bindings_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListBindingsCommand do
alias RabbitMQ.CLI.Ctl.{InfoKeys, RpcStream}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_channels_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_channels_command.ex
index bbd9ac1faf..218b0171d5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_channels_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_channels_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
defmodule RabbitMQ.CLI.Ctl.Commands.ListChannelsCommand do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_ciphers_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_ciphers_command.ex
index 9a0fe8cfff..d2390261bf 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_ciphers_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_ciphers_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListCiphersCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_connections_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_connections_command.ex
index 7cd3520d3f..a4ee6b568f 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_connections_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_connections_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListConnectionsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_consumers_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_consumers_command.ex
index fa21c36f5d..40b8da2e1a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_consumers_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_consumers_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListConsumersCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_exchanges_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_exchanges_command.ex
index 9c18a48826..6bf00b8e30 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_exchanges_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_exchanges_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListExchangesCommand do
alias RabbitMQ.CLI.Ctl.{InfoKeys, RpcStream}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_feature_flags_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_feature_flags_command.ex
index ec5b590164..043260fbc4 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_feature_flags_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_feature_flags_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListFeatureFlagsCommand do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_global_parameters_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_global_parameters_command.ex
index f273eadfa3..b0cda1469c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_global_parameters_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_global_parameters_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListGlobalParametersCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_hashes_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_hashes_command.ex
index 78c084ffda..6ddb024332 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_hashes_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_hashes_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListHashesCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_operator_policies_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_operator_policies_command.ex
index 1cc156cdb3..baf3c9b345 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_operator_policies_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_operator_policies_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListOperatorPoliciesCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_parameters_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_parameters_command.ex
index 4674d78d05..18b0db8d80 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_parameters_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_parameters_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListParametersCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_permissions_command.ex
index 0f667c9658..37b0250936 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListPermissionsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_policies_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_policies_command.ex
index c75b5fa6dd..c54914fac1 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_policies_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_policies_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListPoliciesCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_queues_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_queues_command.ex
index b0ed93520e..5719351176 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_queues_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_queues_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListQueuesCommand do
require RabbitMQ.CLI.Ctl.InfoKeys
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_topic_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_topic_permissions_command.ex
index 6848ce313d..93bbb16300 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_topic_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_topic_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListTopicPermissionsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_unresponsive_queues_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_unresponsive_queues_command.ex
index 5da18f8697..9d57abfc9a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_unresponsive_queues_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_unresponsive_queues_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListUnresponsiveQueuesCommand do
require RabbitMQ.CLI.Ctl.InfoKeys
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_permissions_command.ex
index 82f35ac865..cf4ef53a97 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListUserPermissionsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_topic_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_topic_permissions_command.ex
index 8ca23970d8..78393ff77d 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_topic_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_user_topic_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListUserTopicPermissionsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_users_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_users_command.ex
index 86e20cf9f7..247b4c6cf4 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_users_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_users_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListUsersCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhost_limits_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhost_limits_command.ex
index 0f7cce3798..91fd998172 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhost_limits_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhost_limits_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListVhostLimitsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhosts_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhosts_command.ex
index 5f5e1e67e0..e5a531c977 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhosts_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/list_vhosts_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ListVhostsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/node_health_check_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/node_health_check_command.ex
index a0888779a1..c94eeb6270 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/node_health_check_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/node_health_check_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.NodeHealthCheckCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/ping_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/ping_command.ex
index 72b9a07db3..3b7358b4c9 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/ping_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/ping_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.PingCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/purge_queue_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/purge_queue_command.ex
index 8c14c49112..a46fd59d1c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/purge_queue_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/purge_queue_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.PurgeQueueCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rename_cluster_node_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rename_cluster_node_command.ex
index b32d5d6ff4..97c8d8e6db 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rename_cluster_node_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rename_cluster_node_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.RenameClusterNodeCommand do
require Integer
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex
index 7dfb10a375..e86bf93c5c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/reset_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/reset_command.ex
index 44b77f6bef..61f4b66e95 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/reset_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/reset_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ResetCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/restart_vhost_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/restart_vhost_command.ex
index c3157cd16a..5f654b4a2e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/restart_vhost_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/restart_vhost_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.Core.ExitCodes
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/resume_listeners_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/resume_listeners_command.ex
index 39dc5b1630..df14c2c805 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/resume_listeners_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/resume_listeners_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ResumeListenersCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rotate_logs_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rotate_logs_command.ex
index a7b8756e38..a2fe30d2bb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rotate_logs_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/rotate_logs_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.RotateLogsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_cluster_name_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_cluster_name_command.ex
index a970e5f03a..9d1e46c176 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_cluster_name_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_cluster_name_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetClusterNameCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_disk_free_limit_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_disk_free_limit_command.ex
index b7beeb13e7..f7dc8ea3a5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_disk_free_limit_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_disk_free_limit_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetDiskFreeLimitCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_global_parameter_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_global_parameter_command.ex
index 81f7fc7c47..38f4cbb92e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_global_parameter_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_global_parameter_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetGlobalParameterCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_log_level_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_log_level_command.ex
index 877707bf9e..0679dab542 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_log_level_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_log_level_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetLogLevelCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_operator_policy_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_operator_policy_command.ex
index 4bb00d1735..055ab6dd15 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_operator_policy_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_operator_policy_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetOperatorPolicyCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_parameter_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_parameter_command.ex
index b1fe1e1cba..ea36251afa 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_parameter_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_parameter_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetParameterCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_permissions_command.ex
index 868da26ebb..b57d1bb06b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetPermissionsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_policy_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_policy_command.ex
index 3f68ebd023..7e6c7c1e3a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_policy_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_policy_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetPolicyCommand do
alias RabbitMQ.CLI.Core.{Helpers, DocGuide}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex
index 0852bfd4a2..ff1fa629d6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetTopicPermissionsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_user_tags_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_user_tags_command.ex
index 5e448b027b..9e9de36dc5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_user_tags_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_user_tags_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetUserTagsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_limits_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_limits_command.ex
index 3c6d725ea7..cfdbcdb735 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_limits_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_limits_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetVhostLimitsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_tags_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_tags_command.ex
index 1a262d2a26..ed71814889 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_tags_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vhost_tags_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetVhostTagsCommand do
alias RabbitMQ.CLI.Core.{DocGuide, ExitCodes, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vm_memory_high_watermark_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vm_memory_high_watermark_command.ex
index b0c58b38cc..27fa707d05 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vm_memory_high_watermark_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_vm_memory_high_watermark_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SetVmMemoryHighWatermarkCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/shutdown_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/shutdown_command.ex
index 612bb2da99..0d7c19b5cf 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/shutdown_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/shutdown_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.ShutdownCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/start_app_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/start_app_command.ex
index 9fafed8d2b..dc59e3442e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/start_app_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/start_app_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.StartAppCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex
index f4261ddfab..de46a16f2b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_app_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_app_command.ex
index a538f752fe..87604f581a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_app_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_app_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.StopAppCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex
index 336bfd2055..c73341d7ae 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.StopCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/suspend_listeners_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/suspend_listeners_command.ex
index ced30a65aa..664847c3ff 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/suspend_listeners_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/suspend_listeners_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SuspendListenersCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/sync_queue_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/sync_queue_command.ex
index 201bcefe2d..c402f9e1f7 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/sync_queue_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/sync_queue_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.SyncQueueCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_off_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_off_command.ex
index d73919d208..2baf0c1002 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_off_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_off_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.TraceOffCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_on_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_on_command.ex
index c522b480b8..3f45efc782 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_on_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/trace_on_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.TraceOnCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/update_cluster_nodes_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/update_cluster_nodes_command.ex
index e970977df7..9383424f0e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/update_cluster_nodes_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/update_cluster_nodes_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.UpdateClusterNodesCommand do
alias RabbitMQ.CLI.Core.{Config, DocGuide, Helpers}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/version_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/version_command.ex
index b65c7b70ca..b43aa726b7 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/version_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/version_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.VersionCommand do
alias RabbitMQ.CLI.Core.{Validators, Version}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex
index 327665c22e..b6ca408eaf 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do
alias RabbitMQ.CLI.Core.{Helpers, Validators}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/info_keys.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/info_keys.ex
index 784690caa2..c4eb806f7c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/info_keys.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/info_keys.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.InfoKeys do
import RabbitCommon.Records
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/rpc_stream.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/rpc_stream.ex
index 3582f55873..0575b22bee 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/rpc_stream.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/rpc_stream.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.RpcStream do
alias RabbitMQ.CLI.Ctl.InfoKeys
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex
index f70b67e419..c01f96c2c8 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.Formatters.FormatterHelpers
defmodule RabbitMQ.CLI.DefaultOutput do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/alarms_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/alarms_command.ex
index 14c85f935b..5e51c04557 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/alarms_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/alarms_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.AlarmsCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/certificates_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/certificates_command.ex
index 4e79a272ab..ac40ed65e8 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/certificates_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/certificates_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CertificatesCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_alarms_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_alarms_command.ex
index d13467803a..607fa51948 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_alarms_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_alarms_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckAlarmsCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_certificate_expiration_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_certificate_expiration_command.ex
index 7bde96001e..02710ec8fa 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_certificate_expiration_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_certificate_expiration_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckCertificateExpirationCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_local_alarms_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_local_alarms_command.ex
index 22b57a15ee..9517ad1382 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_local_alarms_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_local_alarms_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckLocalAlarmsCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_connectivity_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_connectivity_command.ex
index 021995a986..010fff1ff8 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_connectivity_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_connectivity_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckPortConnectivityCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_listener_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_listener_command.ex
index f1294d2a34..89c7671748 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_listener_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_port_listener_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckPortListenerCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_protocol_listener_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_protocol_listener_command.ex
index 87cd8e9d89..08afa175e6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_protocol_listener_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_protocol_listener_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckProtocolListenerCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_running_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_running_command.ex
index d7e1b09631..451ee96e54 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_running_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_running_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckRunningCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_virtual_hosts_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_virtual_hosts_command.ex
index 862401b01b..b0b33fda0f 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_virtual_hosts_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/check_virtual_hosts_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CheckVirtualHostsCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/cipher_suites_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/cipher_suites_command.ex
index 8ee671bd90..3e49cef892 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/cipher_suites_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/cipher_suites_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CipherSuitesCommand do
alias RabbitMQ.CLI.Core.Helpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/command_line_arguments_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/command_line_arguments_command.ex
index 51a292eee8..cffbf5bd01 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/command_line_arguments_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/command_line_arguments_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.CommandLineArgumentsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_event_stream_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_event_stream_command.ex
index 4a3bd8770a..6d56c68588 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_event_stream_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_event_stream_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ConsumeEventStreamCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/disable_auth_attempt_source_tracking_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/disable_auth_attempt_source_tracking_command.ex
index 7159541bfc..a1b29e373a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/disable_auth_attempt_source_tracking_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/disable_auth_attempt_source_tracking_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.DisableAuthAttemptSourceTrackingCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/discover_peers_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/discover_peers_command.ex
index b9d66be625..e9b2848c6a 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/discover_peers_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/discover_peers_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.DiscoverPeersCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/enable_auth_attempt_source_tracking_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/enable_auth_attempt_source_tracking_command.ex
index db52c4be45..8e8b4ae0c3 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/enable_auth_attempt_source_tracking_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/enable_auth_attempt_source_tracking_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.EnableAuthAttemptSourceTrackingCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_hash_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_hash_command.ex
index c5601475ff..88caf76c22 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_hash_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_hash_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ErlangCookieHashCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_sources_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_sources_command.ex
index 18c9ccbed9..1f2882b797 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_sources_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_cookie_sources_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ErlangCookieSourcesCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_version_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_version_command.ex
index 489ed14091..4bbd05ace6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_version_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/erlang_version_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ErlangVersionCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_booting_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_booting_command.ex
index 3f69bde9fd..377b4efc87 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_booting_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_booting_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.IsBootingCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_running_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_running_command.ex
index 54e67e069c..f792435afb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_running_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/is_running_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.IsRunningCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_network_interfaces_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_network_interfaces_command.ex
index b51d8ab5de..391b3163cb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_network_interfaces_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_network_interfaces_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ListNetworkInterfacesCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_node_auth_attempt_stats_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_node_auth_attempt_stats_command.ex
index a0817152c2..35b2207fe0 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_node_auth_attempt_stats_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/list_node_auth_attempt_stats_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ListNodeAuthAttemptStatsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/listeners_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/listeners_command.ex
index 6dd7090984..3d71f585b1 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/listeners_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/listeners_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ListenersCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_location_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_location_command.ex
index efe483bf22..31fd18dafd 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_location_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_location_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.LogLocationCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_command.ex
index 20dd315b38..da43a3e423 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.LogTailCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_stream_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_stream_command.ex
index dd26bb04b1..153aad854e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_stream_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/log_tail_stream_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.LogTailStreamCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/maybe_stuck_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/maybe_stuck_command.ex
index 042f071f7e..fd53c06017 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/maybe_stuck_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/maybe_stuck_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.MaybeStuckCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/memory_breakdown_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/memory_breakdown_command.ex
index 92f287c04e..aeff315f42 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/memory_breakdown_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/memory_breakdown_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.MemoryBreakdownCommand do
alias RabbitMQ.CLI.InformationUnit, as: IU
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/observer_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/observer_command.ex
index aab0a23be4..de39a10736 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/observer_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/observer_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ObserverCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex
index 5ee85826e4..2ddba9b11c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.OsEnvCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex
index 23dc2777fc..5c2cea8bb5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.RemoteShellCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/reset_node_auth_attempt_metrics_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/reset_node_auth_attempt_metrics_command.ex
index 3914df1ec7..f9df8be287 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/reset_node_auth_attempt_metrics_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/reset_node_auth_attempt_metrics_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ResetNodeAuthAttemptMetricsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolve_hostname_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolve_hostname_command.ex
index 5721f17344..30f032ae18 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolve_hostname_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolve_hostname_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ResolveHostnameCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolver_info_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolver_info_command.ex
index c80479b290..b285aa9a99 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolver_info_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/resolver_info_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ResolverInfoCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/runtime_thread_stats_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/runtime_thread_stats_command.ex
index 13f9c3f8c1..b5c878729e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/runtime_thread_stats_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/runtime_thread_stats_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.RuntimeThreadStatsCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/schema_info_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/schema_info_command.ex
index a9aac7dff7..c828e9fd48 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/schema_info_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/schema_info_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.SchemaInfoCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/server_version_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/server_version_command.ex
index 68dc65a682..15c8cfe69b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/server_version_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/server_version_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.ServerVersionCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/tls_versions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/tls_versions_command.ex
index 5af79c64dc..2e1111eecb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/tls_versions_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/tls_versions_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Commands.TlsVersionsCommand do
@behaviour RabbitMQ.CLI.CommandBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/diagnostics_helpers.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/diagnostics_helpers.ex
index 6536da3e4a..73a7693bde 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/diagnostics_helpers.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/diagnostics_helpers.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Diagnostics.Helpers do
def test_connection(hostname, port, timeout) do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatter_behaviour.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatter_behaviour.ex
index 87d6836bb1..0eedbd0f82 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatter_behaviour.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatter_behaviour.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Formats returned values e.g. to human-readable text or JSON.
defmodule RabbitMQ.CLI.FormatterBehaviour do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/csv.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/csv.ex
index aa5672b8a7..337a8e4f01 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/csv.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/csv.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.Formatters.FormatterHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/erlang.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/erlang.ex
index 7e8377a8c9..9d23185a04 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/erlang.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/erlang.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Formatters.Erlang do
@behaviour RabbitMQ.CLI.FormatterBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/formatter_helpers.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/formatter_helpers.ex
index e3c91fb0bc..d05a7df631 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/formatter_helpers.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/formatter_helpers.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Formatters.FormatterHelpers do
import RabbitCommon.Records
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/inspect.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/inspect.ex
index c285bc9ae3..7a792b1e6e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/inspect.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/inspect.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.Formatters.FormatterHelpers
defmodule RabbitMQ.CLI.Formatters.Inspect do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json.ex
index fb998c6333..81d2b7cca5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Basic JSON formatter. Supports 1-level of
# collection using start/finish_collection.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json_stream.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json_stream.ex
index 2d34be5590..b95b893157 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json_stream.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/json_stream.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Basic JSON formatter. Supports 1-level of
# collection using start/finish_collection.
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/msacc.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/msacc.ex
index 53ef4aae03..3c4cc095a7 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/msacc.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/msacc.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Formatters.Msacc do
@behaviour RabbitMQ.CLI.FormatterBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/plugins.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/plugins.ex
index e61de99560..7e6d24def2 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/plugins.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/plugins.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.Formatters.FormatterHelpers
defmodule RabbitMQ.CLI.Formatters.Plugins do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/pretty_table.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/pretty_table.ex
index be97dde2b4..b2e4871fe6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/pretty_table.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/pretty_table.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Formatters.PrettyTable do
@behaviour RabbitMQ.CLI.FormatterBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/report.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/report.ex
index 958ad0429a..d8079415c2 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/report.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/report.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Formatters.Report do
alias RabbitMQ.CLI.Formatters.FormatterHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string.ex
index 416a4e5d77..9830735d75 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
## Prints values from a command as strings(if possible)
defmodule RabbitMQ.CLI.Formatters.String do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string_per_line.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string_per_line.ex
index 31e4eea5c4..6749a79a9c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string_per_line.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/string_per_line.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Formatters.StringPerLine do
@doc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/table.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/table.ex
index 902a395662..c880977fe6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/table.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/formatters/table.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
alias RabbitMQ.CLI.Formatters.FormatterHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/information_unit.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/information_unit.ex
index d4e0c09ba1..c5e02277a9 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/information_unit.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/information_unit.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.InformationUnit do
require MapSet
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/directories_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/directories_command.ex
index fe7db99b5c..66869f4adf 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/directories_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/directories_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Commands.DirectoriesCommand do
alias RabbitMQ.CLI.Plugins.Helpers, as: PluginHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/disable_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/disable_command.ex
index af9185207b..89622b82ad 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/disable_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/disable_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Commands.DisableCommand do
alias RabbitMQ.CLI.Plugins.Helpers, as: PluginHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/enable_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/enable_command.ex
index 32e6b6bd22..cde9e14472 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/enable_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/enable_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Commands.EnableCommand do
alias RabbitMQ.CLI.Plugins.Helpers, as: PluginHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/is_enabled.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/is_enabled.ex
index 9436798d32..2a719a2508 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/is_enabled.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/is_enabled.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Commands.IsEnabledCommand do
alias RabbitMQ.CLI.Plugins.Helpers, as: PluginHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/list_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/list_command.ex
index 23582e8918..be4e1684c6 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/list_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/list_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Commands.ListCommand do
import RabbitCommon.Records
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/set_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/set_command.ex
index e23d20e726..b67f809aaf 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/set_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/commands/set_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Commands.SetCommand do
alias RabbitMQ.CLI.Plugins.Helpers, as: PluginHelpers
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/error_output.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/error_output.ex
index 623d351290..fcb2662a10 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/error_output.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/error_output.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
# Default output implementation for plugin commands
defmodule RabbitMQ.CLI.Plugins.ErrorOutput do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/plugins_helpers.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/plugins_helpers.ex
index cd2184d11f..1bd627051e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/plugins_helpers.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/plugins/plugins_helpers.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Plugins.Helpers do
import RabbitMQ.CLI.Core.DataCoercion
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/printer_behaviour.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/printer_behaviour.ex
index b74f67ae62..37dcd81920 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/printer_behaviour.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/printer_behaviour.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.PrinterBehaviour do
@callback init(options :: map()) :: {:ok, printer_state :: any} | {:error, error :: any}
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/file.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/file.ex
index 51f025da17..cc0333c928 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/file.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/file.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Printers.File do
@behaviour RabbitMQ.CLI.PrinterBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io.ex
index 208c372ee0..b8154a0438 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Printers.StdIO do
@behaviour RabbitMQ.CLI.PrinterBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io_raw.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io_raw.ex
index edbeb1a9f4..9b24d4035e 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io_raw.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/printers/std_io_raw.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Printers.StdIORaw do
@behaviour RabbitMQ.CLI.PrinterBehaviour
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/add_member_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/add_member_command.ex
index e01c332dd0..03aa928e66 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/add_member_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/add_member_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.AddMemberCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_mirror_sync_critical_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_mirror_sync_critical_command.ex
index 2184778576..f7cbb91d91 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_mirror_sync_critical_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_mirror_sync_critical_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.CheckIfNodeIsMirrorSyncCriticalCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_quorum_critical_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_quorum_critical_command.ex
index 688d0499b3..0c92516550 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_quorum_critical_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/check_if_node_is_quorum_critical_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.CheckIfNodeIsQuorumCriticalCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/delete_member_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/delete_member_command.ex
index c6ff515009..4fe9d77b52 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/delete_member_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/delete_member_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.DeleteMemberCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/grow_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/grow_command.ex
index aacebe2b7e..70374dad93 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/grow_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/grow_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.GrowCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/peek_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/peek_command.ex
index 02260bbfb4..daf5b051de 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/peek_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/peek_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.PeekCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/quorum_status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/quorum_status_command.ex
index 5a3bd3f90c..2bbaa3ed9b 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/quorum_status_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/quorum_status_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.QuorumStatusCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/rebalance_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/rebalance_command.ex
index b122a5162e..92fb71c973 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/rebalance_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/rebalance_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.RebalanceCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex
index 571aa6ff9e..4c1ca15ee1 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.ReclaimQuorumMemoryCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/shrink_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/shrink_command.ex
index d576a00e68..140b450396 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/shrink_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/shrink_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Queues.Commands.ShrinkCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/add_replica_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/add_replica_command.ex
index 260833e48b..5586461081 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/add_replica_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/add_replica_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Streams.Commands.AddReplicaCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex
index 5a3a3511cd..2c12a7c2f8 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Streams.Commands.DeleteReplicaCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/set_stream_retention_policy_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/set_stream_retention_policy_command.ex
index db32f2de62..2f9bff5166 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/set_stream_retention_policy_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/set_stream_retention_policy_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Streams.Commands.SetStreamRetentionPolicyCommand do
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/stream_status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/stream_status_command.ex
index 6f5bf510c0..6c6673dda5 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/stream_status_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/stream_status_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Streams.Commands.StreamStatusCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/time_unit.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/time_unit.ex
index b04b6e667f..814fd5c428 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/time_unit.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/time_unit.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.TimeUnit do
require MapSet
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex
index f592fd19ca..26a5e6a1ee 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Upgrade.Commands.AwaitOnlineQuorumPlusOneCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex
index e3f7f8c061..a12bc46dbe 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Upgrade.Commands.AwaitOnlineSynchronizedMirrorCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/drain_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/drain_command.ex
index a67ca2dbde..b8f1e7b9eb 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/drain_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/drain_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Upgrade.Commands.DrainCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/post_upgrade_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/post_upgrade_command.ex
index bbab8aaabb..a7899adf21 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/post_upgrade_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/post_upgrade_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Upgrade.Commands.PostUpgradeCommand do
alias RabbitMQ.CLI.Core.DocGuide
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/revive_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/revive_command.ex
index 8568df5edd..e50e376843 100644
--- a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/revive_command.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/revive_command.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Upgrade.Commands.ReviveCommand do
@moduledoc """
diff --git a/deps/rabbitmq_cli/lib/rabbitmqctl.ex b/deps/rabbitmq_cli/lib/rabbitmqctl.ex
index 3d6b4c520c..c6e4d0a48c 100644
--- a/deps/rabbitmq_cli/lib/rabbitmqctl.ex
+++ b/deps/rabbitmq_cli/lib/rabbitmqctl.ex
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQCtl do
alias RabbitMQ.CLI.Core.{
diff --git a/deps/rabbitmq_cli/test/ctl/clear_global_parameter_command_test.exs b/deps/rabbitmq_cli/test/ctl/clear_global_parameter_command_test.exs
index 425911ad18..9f2e9f0c38 100644
--- a/deps/rabbitmq_cli/test/ctl/clear_global_parameter_command_test.exs
+++ b/deps/rabbitmq_cli/test/ctl/clear_global_parameter_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule ClearGlobalParameterCommandTest do
diff --git a/deps/rabbitmq_cli/test/ctl/clear_policy_command_test.exs b/deps/rabbitmq_cli/test/ctl/clear_policy_command_test.exs
index 2a38d5c50b..b30f21810c 100644
--- a/deps/rabbitmq_cli/test/ctl/clear_policy_command_test.exs
+++ b/deps/rabbitmq_cli/test/ctl/clear_policy_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule ClearPolicyCommandTest do
diff --git a/deps/rabbitmq_cli/test/ctl/close_all_user_connections_command_test.exs b/deps/rabbitmq_cli/test/ctl/close_all_user_connections_command_test.exs
index 5d75fc7931..26c0553175 100644
--- a/deps/rabbitmq_cli/test/ctl/close_all_user_connections_command_test.exs
+++ b/deps/rabbitmq_cli/test/ctl/close_all_user_connections_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule CloseAllUserConnectionsCommandTest do
use ExUnit.Case, async: false
diff --git a/deps/rabbitmq_cli/test/ctl/resume_listeners_command_test.exs b/deps/rabbitmq_cli/test/ctl/resume_listeners_command_test.exs
index 9a37638ca5..9b1e036076 100644
--- a/deps/rabbitmq_cli/test/ctl/resume_listeners_command_test.exs
+++ b/deps/rabbitmq_cli/test/ctl/resume_listeners_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
defmodule ResumeListenersCommandTest do
diff --git a/deps/rabbitmq_cli/test/ctl/suspend_listeners_command_test.exs b/deps/rabbitmq_cli/test/ctl/suspend_listeners_command_test.exs
index cd4a5e602a..88beb768fd 100644
--- a/deps/rabbitmq_cli/test/ctl/suspend_listeners_command_test.exs
+++ b/deps/rabbitmq_cli/test/ctl/suspend_listeners_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
defmodule SuspendListenersCommandTest do
diff --git a/deps/rabbitmq_cli/test/streams/add_replica_command_test.exs b/deps/rabbitmq_cli/test/streams/add_replica_command_test.exs
index 1377fd661b..5549342f0f 100644
--- a/deps/rabbitmq_cli/test/streams/add_replica_command_test.exs
+++ b/deps/rabbitmq_cli/test/streams/add_replica_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
defmodule RabbitMQ.CLI.Streams.Commands.AddReplicaCommandTest do
diff --git a/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs b/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs
index b7fe17edb0..63f1cd5c83 100644
--- a/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs
+++ b/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
defmodule RabbitMQ.CLI.Streams.Commands.DeleteReplicaCommandTest do
diff --git a/deps/rabbitmq_cli/test/streams/set_stream_retention_policy_command_test.exs b/deps/rabbitmq_cli/test/streams/set_stream_retention_policy_command_test.exs
index 2cfbe410e1..2900d7eb25 100644
--- a/deps/rabbitmq_cli/test/streams/set_stream_retention_policy_command_test.exs
+++ b/deps/rabbitmq_cli/test/streams/set_stream_retention_policy_command_test.exs
@@ -2,7 +2,7 @@
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
-## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
##
defmodule RabbitMQ.CLI.Streams.Commands.SetStreamRetentionPolicyCommandTest do
diff --git a/deps/rabbitmq_consistent_hash_exchange/src/Elixir.RabbitMQ.CLI.Diagnostics.Commands.ConsistentHashExchangeRingStateCommand.erl b/deps/rabbitmq_consistent_hash_exchange/src/Elixir.RabbitMQ.CLI.Diagnostics.Commands.ConsistentHashExchangeRingStateCommand.erl
index bb00ccf01e..05510099eb 100644
--- a/deps/rabbitmq_consistent_hash_exchange/src/Elixir.RabbitMQ.CLI.Diagnostics.Commands.ConsistentHashExchangeRingStateCommand.erl
+++ b/deps/rabbitmq_consistent_hash_exchange/src/Elixir.RabbitMQ.CLI.Diagnostics.Commands.ConsistentHashExchangeRingStateCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Diagnostics.Commands.ConsistentHashExchangeRingStateCommand').
diff --git a/deps/rabbitmq_consistent_hash_exchange/src/rabbit_exchange_type_consistent_hash.erl b/deps/rabbitmq_consistent_hash_exchange/src/rabbit_exchange_type_consistent_hash.erl
index ae93c6ece9..606b6ba5af 100644
--- a/deps/rabbitmq_consistent_hash_exchange/src/rabbit_exchange_type_consistent_hash.erl
+++ b/deps/rabbitmq_consistent_hash_exchange/src/rabbit_exchange_type_consistent_hash.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_consistent_hash).
diff --git a/deps/rabbitmq_consistent_hash_exchange/test/rabbit_exchange_type_consistent_hash_SUITE.erl b/deps/rabbitmq_consistent_hash_exchange/test/rabbit_exchange_type_consistent_hash_SUITE.erl
index 67bfb404cc..4a99f0b302 100644
--- a/deps/rabbitmq_consistent_hash_exchange/test/rabbit_exchange_type_consistent_hash_SUITE.erl
+++ b/deps/rabbitmq_consistent_hash_exchange/test/rabbit_exchange_type_consistent_hash_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_consistent_hash_SUITE).
diff --git a/deps/rabbitmq_ct_client_helpers/src/rabbit_ct_client_helpers.erl b/deps/rabbitmq_ct_client_helpers/src/rabbit_ct_client_helpers.erl
index d084337189..12ffd7e32d 100644
--- a/deps/rabbitmq_ct_client_helpers/src/rabbit_ct_client_helpers.erl
+++ b/deps/rabbitmq_ct_client_helpers/src/rabbit_ct_client_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ct_client_helpers).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_control_helper.erl b/deps/rabbitmq_ct_helpers/src/rabbit_control_helper.erl
index 72083f5734..37b5aa3db8 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_control_helper.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_control_helper.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_control_helper).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl
index 03db9305d1..b22e508e00 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ct_broker_helpers).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_config_schema.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_config_schema.erl
index 65656b0363..96d42ba987 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_config_schema.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_config_schema.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ct_config_schema).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl
index 12e7a158c8..fea3396d40 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ct_helpers).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_proper_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_proper_helpers.erl
index 53349284f8..aed1eff84a 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_proper_helpers.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_proper_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ct_proper_helpers).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_vm_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_vm_helpers.erl
index ffdef1e62a..d6ac3855f1 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_vm_helpers.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_vm_helpers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ct_vm_helpers).
diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_mgmt_test_util.erl b/deps/rabbitmq_ct_helpers/src/rabbit_mgmt_test_util.erl
index b82bfe4651..7424108d4e 100644
--- a/deps/rabbitmq_ct_helpers/src/rabbit_mgmt_test_util.erl
+++ b/deps/rabbitmq_ct_helpers/src/rabbit_mgmt_test_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_test_util).
diff --git a/deps/rabbitmq_ct_helpers/test/terraform_SUITE.erl b/deps/rabbitmq_ct_helpers/test/terraform_SUITE.erl
index f2b7c7b93e..461eaf3125 100644
--- a/deps/rabbitmq_ct_helpers/test/terraform_SUITE.erl
+++ b/deps/rabbitmq_ct_helpers/test/terraform_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(terraform_SUITE).
diff --git a/deps/rabbitmq_event_exchange/src/rabbit_event_exchange_decorator.erl b/deps/rabbitmq_event_exchange/src/rabbit_event_exchange_decorator.erl
index 15d1a33fdf..8f6c32014f 100644
--- a/deps/rabbitmq_event_exchange/src/rabbit_event_exchange_decorator.erl
+++ b/deps/rabbitmq_event_exchange/src/rabbit_event_exchange_decorator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_event_exchange_decorator).
diff --git a/deps/rabbitmq_event_exchange/src/rabbit_exchange_type_event.erl b/deps/rabbitmq_event_exchange/src/rabbit_exchange_type_event.erl
index 975e51390f..987f4fdcec 100644
--- a/deps/rabbitmq_event_exchange/src/rabbit_exchange_type_event.erl
+++ b/deps/rabbitmq_event_exchange/src/rabbit_exchange_type_event.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_event).
diff --git a/deps/rabbitmq_event_exchange/test/config_schema_SUITE.erl b/deps/rabbitmq_event_exchange/test/config_schema_SUITE.erl
index df6dd193ae..08b3f57af3 100644
--- a/deps/rabbitmq_event_exchange/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_event_exchange/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_event_exchange/test/system_SUITE.erl b/deps/rabbitmq_event_exchange/test/system_SUITE.erl
index aa305d18d5..f8e883e518 100644
--- a/deps/rabbitmq_event_exchange/test/system_SUITE.erl
+++ b/deps/rabbitmq_event_exchange/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_event_exchange/test/unit_SUITE.erl b/deps/rabbitmq_event_exchange/test/unit_SUITE.erl
index d6ae77c08e..f02177e5ed 100644
--- a/deps/rabbitmq_event_exchange/test/unit_SUITE.erl
+++ b/deps/rabbitmq_event_exchange/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_federation/include/rabbit_federation.hrl b/deps/rabbitmq_federation/include/rabbit_federation.hrl
index a8706da0d5..995c34c0ce 100644
--- a/deps/rabbitmq_federation/include/rabbit_federation.hrl
+++ b/deps/rabbitmq_federation/include/rabbit_federation.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(upstream, {uris,
diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl
index e613ea65b6..9bd68022f8 100644
--- a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl
+++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand').
diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl
index 68e740ba1c..cb87b0db60 100644
--- a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl
+++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand').
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_app.erl b/deps/rabbitmq_federation/src/rabbit_federation_app.erl
index de03d67e6a..a827020cfa 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_app.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_app).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_db.erl b/deps/rabbitmq_federation/src/rabbit_federation_db.erl
index 30a6e6fa60..1a8c5c0b82 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_db.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_db.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_db).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_event.erl b/deps/rabbitmq_federation/src/rabbit_federation_event.erl
index 18aaacfa5d..e3679f6e64 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_event.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_event.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_event).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl
index a0fa137317..83a1ab9010 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% TODO rename this
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl
index ed9f9d0df4..fbc1944a3d 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_exchange_link).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl
index 0d44d31e12..8351def6d6 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_exchange_link_sup_sup).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl
index 1d2ae2d991..a16e038465 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_link_sup).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl b/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl
index 74b4ec1d1f..25d2b7e80a 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_link_util).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl b/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl
index c0751ae492..1683dcce9f 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_parameters).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_pg.erl b/deps/rabbitmq_federation/src/rabbit_federation_pg.erl
index b262f58abc..09f6bfc61c 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_pg.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_pg.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_pg).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue.erl
index ea996aa8de..3b2265f1ea 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_queue.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_queue).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl
index b9b9ae718f..06ebfe464f 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_queue_link).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl
index 0d879b2a3a..7719199694 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_queue_link_sup_sup).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_status.erl b/deps/rabbitmq_federation/src/rabbit_federation_status.erl
index ed14ba472d..d555f6e066 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_status.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_status.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_status).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_sup.erl
index d0f20aee0b..256eb23857 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_sup.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_sup).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl b/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl
index ebb29067b0..ed30e70ccc 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_upstream).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl b/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl
index 8f5e92d81b..37b33b4a02 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_upstream_exchange).
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_util.erl b/deps/rabbitmq_federation/src/rabbit_federation_util.erl
index e8f05654dd..1eb71481b9 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_util.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_util).
diff --git a/deps/rabbitmq_federation/test/exchange_SUITE.erl b/deps/rabbitmq_federation/test/exchange_SUITE.erl
index f20d4cb46f..dc6a2ab5c4 100644
--- a/deps/rabbitmq_federation/test/exchange_SUITE.erl
+++ b/deps/rabbitmq_federation/test/exchange_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(exchange_SUITE).
diff --git a/deps/rabbitmq_federation/test/federation_status_command_SUITE.erl b/deps/rabbitmq_federation/test/federation_status_command_SUITE.erl
index 188914cee4..8b4bdfb4d2 100644
--- a/deps/rabbitmq_federation/test/federation_status_command_SUITE.erl
+++ b/deps/rabbitmq_federation/test/federation_status_command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(federation_status_command_SUITE).
diff --git a/deps/rabbitmq_federation/test/queue_SUITE.erl b/deps/rabbitmq_federation/test/queue_SUITE.erl
index 65a08e462f..2fab15b940 100644
--- a/deps/rabbitmq_federation/test/queue_SUITE.erl
+++ b/deps/rabbitmq_federation/test/queue_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(queue_SUITE).
diff --git a/deps/rabbitmq_federation/test/rabbit_federation_status_SUITE.erl b/deps/rabbitmq_federation/test/rabbit_federation_status_SUITE.erl
index 42dfe76198..03c01b9093 100644
--- a/deps/rabbitmq_federation/test/rabbit_federation_status_SUITE.erl
+++ b/deps/rabbitmq_federation/test/rabbit_federation_status_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_status_SUITE).
diff --git a/deps/rabbitmq_federation/test/rabbit_federation_test_util.erl b/deps/rabbitmq_federation/test/rabbit_federation_test_util.erl
index 448a6b9cb8..4bec2d700d 100644
--- a/deps/rabbitmq_federation/test/rabbit_federation_test_util.erl
+++ b/deps/rabbitmq_federation/test/rabbit_federation_test_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_test_util).
diff --git a/deps/rabbitmq_federation/test/restart_federation_link_command_SUITE.erl b/deps/rabbitmq_federation/test/restart_federation_link_command_SUITE.erl
index 567cc081df..1b77ec91cd 100644
--- a/deps/rabbitmq_federation/test/restart_federation_link_command_SUITE.erl
+++ b/deps/rabbitmq_federation/test/restart_federation_link_command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(restart_federation_link_command_SUITE).
diff --git a/deps/rabbitmq_federation/test/unit_SUITE.erl b/deps/rabbitmq_federation/test/unit_SUITE.erl
index 14d072edb7..f63ab62edc 100644
--- a/deps/rabbitmq_federation/test/unit_SUITE.erl
+++ b/deps/rabbitmq_federation/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_federation/test/unit_inbroker_SUITE.erl b/deps/rabbitmq_federation/test/unit_inbroker_SUITE.erl
index cd47ca459a..f0a53ec381 100644
--- a/deps/rabbitmq_federation/test/unit_inbroker_SUITE.erl
+++ b/deps/rabbitmq_federation/test/unit_inbroker_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_inbroker_SUITE).
diff --git a/deps/rabbitmq_federation_management/src/rabbit_federation_mgmt.erl b/deps/rabbitmq_federation_management/src/rabbit_federation_mgmt.erl
index 15d90e68db..a1d2dd6997 100644
--- a/deps/rabbitmq_federation_management/src/rabbit_federation_mgmt.erl
+++ b/deps/rabbitmq_federation_management/src/rabbit_federation_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_federation_mgmt).
diff --git a/deps/rabbitmq_federation_management/test/federation_mgmt_SUITE.erl b/deps/rabbitmq_federation_management/test/federation_mgmt_SUITE.erl
index f479763400..e1a96795b1 100644
--- a/deps/rabbitmq_federation_management/test/federation_mgmt_SUITE.erl
+++ b/deps/rabbitmq_federation_management/test/federation_mgmt_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(federation_mgmt_SUITE).
diff --git a/deps/rabbitmq_jms_topic_exchange/src/rabbit_jms_topic_exchange.erl b/deps/rabbitmq_jms_topic_exchange/src/rabbit_jms_topic_exchange.erl
index 131351d36d..877d4baaa5 100644
--- a/deps/rabbitmq_jms_topic_exchange/src/rabbit_jms_topic_exchange.erl
+++ b/deps/rabbitmq_jms_topic_exchange/src/rabbit_jms_topic_exchange.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2012-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2012-2022 VMware, Inc. or its affiliates. All rights reserved.
%% -----------------------------------------------------------------------------
%% JMS on Rabbit Selector Exchange plugin
diff --git a/deps/rabbitmq_jms_topic_exchange/src/sjx_evaluator.erl b/deps/rabbitmq_jms_topic_exchange/src/sjx_evaluator.erl
index 19644f3b39..5304ae9501 100644
--- a/deps/rabbitmq_jms_topic_exchange/src/sjx_evaluator.erl
+++ b/deps/rabbitmq_jms_topic_exchange/src/sjx_evaluator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2012-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2012-2022 VMware, Inc. or its affiliates. All rights reserved.
%% -----------------------------------------------------------------------------
%% Derived from works which were:
%% Copyright (c) 2002, 2012 Tim Watson (watson.timothy@gmail.com)
diff --git a/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_SUITE.erl b/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_SUITE.erl
index 8765e9e3d0..4616bb9829 100644
--- a/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_SUITE.erl
+++ b/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2013-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2013-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rjms_topic_selector_SUITE).
diff --git a/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_unit_SUITE.erl b/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_unit_SUITE.erl
index 47123f097a..21c8c4d1b5 100644
--- a/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_unit_SUITE.erl
+++ b/deps/rabbitmq_jms_topic_exchange/test/rjms_topic_selector_unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2012-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2012-2022 VMware, Inc. or its affiliates. All rights reserved.
%% -----------------------------------------------------------------------------
%% Unit test file for RJMS Topic Selector plugin
diff --git a/deps/rabbitmq_management/include/rabbit_mgmt.hrl b/deps/rabbitmq_management/include/rabbit_mgmt.hrl
index 7372f113ac..1877c84736 100644
--- a/deps/rabbitmq_management/include/rabbit_mgmt.hrl
+++ b/deps/rabbitmq_management/include/rabbit_mgmt.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(AUTH_REALM, "Basic realm=\"RabbitMQ Management\"").
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_app.erl b/deps/rabbitmq_management/src/rabbit_mgmt_app.erl
index 4d8ec326ff..cee979869c 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_app.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_app).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_cors.erl b/deps/rabbitmq_management/src/rabbit_mgmt_cors.erl
index bf746c5e52..990fbc0d02 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_cors.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_cors.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Useful documentation about CORS:
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_csp.erl b/deps/rabbitmq_management/src/rabbit_mgmt_csp.erl
index 002faef8cf..65b44d3281 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_csp.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_csp.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Sets CSP header(s) on the response if configured,
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl
index 09ee723516..1ef6e3fd2e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_db).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl
index 8634453b88..31dfec36ff 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(rabbit_mgmt_db_cache).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache_sup.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache_sup.erl
index 542309069f..39576fddb8 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache_sup.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(rabbit_mgmt_db_cache_sup).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl b/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl
index 66886ec0cc..53eb15660d 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_dispatcher).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_extension.erl b/deps/rabbitmq_management/src/rabbit_mgmt_extension.erl
index 4093981fc7..108fac0b2d 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_extension.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_extension.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_extension).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_headers.erl b/deps/rabbitmq_management/src/rabbit_mgmt_headers.erl
index e4af081870..907232ccc7 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_headers.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_headers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This module contains helper functions that control
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_hsts.erl b/deps/rabbitmq_management/src/rabbit_mgmt_hsts.erl
index 03e0f96b44..ba4dce23dc 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_hsts.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_hsts.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Sets HSTS header(s) on the response if configured,
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_load_definitions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_load_definitions.erl
index 7a867dfe0e..d423bdd7d8 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_load_definitions.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_load_definitions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_load_definitions).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_reset_handler.erl b/deps/rabbitmq_management/src/rabbit_mgmt_reset_handler.erl
index a2e9f2d3c4..2d6badc391 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_reset_handler.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_reset_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% When management extensions are enabled and/or disabled at runtime, the
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_stats.erl b/deps/rabbitmq_management/src/rabbit_mgmt_stats.erl
index 8629ab32f7..08c11db800 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_stats.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_stats.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_stats).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_sup.erl b/deps/rabbitmq_management/src/rabbit_mgmt_sup.erl
index d18dae18c6..4e1f20e64d 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_sup.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_sup).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_sup_sup.erl b/deps/rabbitmq_management/src/rabbit_mgmt_sup_sup.erl
index 4d976e8452..fc6a4511e5 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_sup_sup.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_sup_sup).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_util.erl b/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
index 97f7a01b7b..d522612d36 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_util).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_aliveness_test.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_aliveness_test.erl
index d3f1370ec5..a945c10994 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_aliveness_test.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_aliveness_test.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_aliveness_test).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
index 6cc43a23f4..817e34dae0 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_auth).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth_attempts.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth_attempts.erl
index 04b6aafd0e..bcbf71c3e2 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth_attempts.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth_attempts.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_auth_attempts).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_binding.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_binding.erl
index b1cd8cb17d..806abce7c4 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_binding.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_binding.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_binding).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_bindings.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_bindings.erl
index da526488fc..4d74326d3b 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_bindings.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_bindings.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_bindings).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_channel.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_channel.erl
index 76311d84eb..0c18640c8a 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_channel.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_channel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_channel).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels.erl
index 343421cc08..895a84c12f 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_channels).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels_vhost.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels_vhost.erl
index fd5b88b482..c60b05b85d 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels_vhost.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_channels_vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_channels_vhost).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_cluster_name.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_cluster_name.erl
index 11c5aa67d7..bd02d7d832 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_cluster_name.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_cluster_name.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_cluster_name).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection.erl
index 5d44743df3..4aebeda354 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_connection).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection_channels.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection_channels.erl
index 41e6a763dc..a5052574e9 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection_channels.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connection_channels.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_connection_channels).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections.erl
index 585dc7557a..c626b4ba17 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_connections).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections_vhost.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections_vhost.erl
index aafcca9dd1..a67049ca2e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections_vhost.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_connections_vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_connections_vhost).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_consumers.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_consumers.erl
index 6f74849cb7..15a3814141 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_consumers.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_consumers.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(rabbit_mgmt_wm_consumers).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl
index 8314926a4a..f0e05243e4 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_definitions).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange.erl
index e5c36b51b8..1f848a6620 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_exchange).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange_publish.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange_publish.erl
index b5fbf44e8a..0f97fac993 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange_publish.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange_publish.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_exchange_publish).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchanges.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchanges.erl
index a0b008d239..11e9af1895 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchanges.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_exchanges.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_exchanges).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_extensions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_extensions.erl
index 4e7f43a424..abc319e6ce 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_extensions.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_extensions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_extensions).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flag_enable.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flag_enable.erl
index 436f2cecdc..e33f9c3915 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flag_enable.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flag_enable.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_feature_flag_enable).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flags.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flags.erl
index 5f125c0bbc..73667356f3 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flags.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_feature_flags.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_feature_flags).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameter.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameter.erl
index 8a87f3ca41..d566237985 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameter.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameter.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_global_parameter).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameters.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameters.erl
index 420f58872d..5bf892edae 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameters.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_global_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_global_parameters).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_alarms.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_alarms.erl
index b8791e5b00..d67481359d 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_alarms.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_alarms.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_alarms'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_certificate_expiration.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_certificate_expiration.erl
index fe0944fb79..0cad2fedac 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_certificate_expiration.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_certificate_expiration.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_certificate_expiration'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_local_alarms.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_local_alarms.erl
index aff61132ad..341c8c778c 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_local_alarms.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_local_alarms.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-dignoastics check_local_alarms'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_mirror_sync_critical.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_mirror_sync_critical.erl
index 96f6684668..d456512c8f 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_mirror_sync_critical.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_mirror_sync_critical.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_if_node_is_quorum_critical'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_quorum_critical.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_quorum_critical.erl
index 783a39adec..ae4163172f 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_quorum_critical.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_node_is_quorum_critical.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_if_node_is_quorum_critical'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_port_listener.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_port_listener.erl
index f7d8e15c48..1ea2c96a63 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_port_listener.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_port_listener.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_port_listener'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_protocol_listener.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_protocol_listener.erl
index 17a04e259a..7d16836618 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_protocol_listener.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_protocol_listener.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_protocol_listener'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_virtual_hosts.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_virtual_hosts.erl
index 980e117821..8c5e38b974 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_virtual_hosts.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_health_check_virtual_hosts.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% An HTTP API counterpart of 'rabbitmq-diagnostics check_virtual_hosts'
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl
index 1cf011d444..f84dd9a8fc 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This original One True Health Checkâ„¢ has been deprecated as too coarse-grained,
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_limit.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_limit.erl
index 5c9dc2a15b..71da9fddc5 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_limit.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_limit.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_limit).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_limits.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_limits.erl
index cd83201666..b7dc21fcaf 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_limits.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_limits.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_limits).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_login.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_login.erl
index 2a275fa7f4..be80058263 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_login.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_login.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_login).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl
index d7ee8a9ccb..6ba1404b7b 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_node).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl
index 99b9a34530..fc7128ce0f 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_node_memory).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl
index 5b027cf62f..4e4d5d2d30 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_node_memory_ets).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_nodes.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_nodes.erl
index 6727f67cf4..02bf12fedb 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_nodes.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_nodes.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_nodes).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policies.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policies.erl
index b4886e3ae7..ea13f4d126 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policies.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policies.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_operator_policies).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policy.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policy.erl
index 9a3a5e81d6..f5b4329f22 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policy.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_operator_policy.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_operator_policy).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl
index 2347c64777..29cf184b63 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_overview).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl
index 972b549610..3fd9ca61a2 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_parameter).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameters.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameters.erl
index 07ea20b6a6..dcf1870b52 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameters.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_parameters).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permission.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permission.erl
index 4942e649a6..5d4b36a919 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permission.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permission.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_permission).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions.erl
index 17cc175ddf..f5cd2c7447 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_permissions).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_user.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_user.erl
index c1c2858656..32059f0194 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_user.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_user.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_permissions_user).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_vhost.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_vhost.erl
index ee33cdf44c..6a90cc270e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_vhost.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_permissions_vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_permissions_vhost).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_policies.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_policies.erl
index cff7b92d55..ca4dbb910f 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_policies.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_policies.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_policies).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl
index 93f2b5e862..6226106afa 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_policy).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl
index bb129e4882..f81628d59c 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_queue).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_actions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_actions.erl
index cea3a54e34..bf8877d56e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_actions.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_actions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_queue_actions).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_get.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_get.erl
index 8faf48ab03..6229c12473 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_get.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_get.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_queue_get).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_purge.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_purge.erl
index 836b57b2ac..679233c401 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_purge.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_purge.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_queue_purge).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queues.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queues.erl
index d06717da0f..4f9219dc6e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queues.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queues.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_queues).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_rebalance_queues.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_rebalance_queues.erl
index 27d3903a4c..2772d9d81b 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_rebalance_queues.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_rebalance_queues.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_rebalance_queues).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_redirect.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_redirect.erl
index 4481bdd0c7..91baf9712d 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_redirect.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_redirect.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_redirect).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_reset.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_reset.erl
index 142431accf..a0eb1e7efc 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_reset.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_reset.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_reset).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl
index e679150319..19451b3b1e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2010-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2010-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% Alias for cowboy_static that accepts a list of directories
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permission.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permission.erl
index e87ee128e3..39ab5828d3 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permission.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permission.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_topic_permission).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions.erl
index 0ac0a1e359..ea3c7fb4d4 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_topic_permissions).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_user.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_user.erl
index b7fb35de06..40c742d3fb 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_user.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_user.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_topic_permissions_user).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_vhost.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_vhost.erl
index 021cc2e61b..5232e14540 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_vhost.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_topic_permissions_vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_topic_permissions_vhost).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_user.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_user.erl
index 70f95108ac..5e1de82aa6 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_user.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_user.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_user).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limit.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limit.erl
index fa60238ec4..b7ea68780a 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limit.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limit.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_user_limit).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limits.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limits.erl
index 41212609d1..136699540e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limits.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limits.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_user_limits).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_users.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_users.erl
index fcf82685c8..49d5934b93 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_users.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_users.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_users).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_users_bulk_delete.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_users_bulk_delete.erl
index bdd77b8590..8a519255a9 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_users_bulk_delete.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_users_bulk_delete.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_users_bulk_delete).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost.erl
index dad0a862ba..999497b4f4 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_vhost).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost_restart.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost_restart.erl
index 17f10cc8d9..13893c2a50 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost_restart.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhost_restart.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2011-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2011-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_vhost_restart).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhosts.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhosts.erl
index 83a9ae2493..187e014707 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhosts.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_vhosts.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_vhosts).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_whoami.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_whoami.erl
index 477c881dc8..bb39b8b32e 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_whoami.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_whoami.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_wm_whoami).
diff --git a/deps/rabbitmq_management/test/cache_SUITE.erl b/deps/rabbitmq_management/test/cache_SUITE.erl
index 62779bffad..d4e1832293 100644
--- a/deps/rabbitmq_management/test/cache_SUITE.erl
+++ b/deps/rabbitmq_management/test/cache_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(cache_SUITE).
diff --git a/deps/rabbitmq_management/test/clustering_SUITE.erl b/deps/rabbitmq_management/test/clustering_SUITE.erl
index 30a42ebc9c..881650aef0 100644
--- a/deps/rabbitmq_management/test/clustering_SUITE.erl
+++ b/deps/rabbitmq_management/test/clustering_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(clustering_SUITE).
diff --git a/deps/rabbitmq_management/test/clustering_prop_SUITE.erl b/deps/rabbitmq_management/test/clustering_prop_SUITE.erl
index f2f132d4c6..332d180881 100644
--- a/deps/rabbitmq_management/test/clustering_prop_SUITE.erl
+++ b/deps/rabbitmq_management/test/clustering_prop_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(clustering_prop_SUITE).
diff --git a/deps/rabbitmq_management/test/config_schema_SUITE.erl b/deps/rabbitmq_management/test/config_schema_SUITE.erl
index 60f2ae429f..ae974b4963 100644
--- a/deps/rabbitmq_management/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_management/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_management/test/listener_config_SUITE.erl b/deps/rabbitmq_management/test/listener_config_SUITE.erl
index e069f0f912..f07c6ef5e9 100644
--- a/deps/rabbitmq_management/test/listener_config_SUITE.erl
+++ b/deps/rabbitmq_management/test/listener_config_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(listener_config_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl
index dc322bc9fa..9cd18de1ec 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_http_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_http_health_checks_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_http_health_checks_SUITE.erl
index fafac8641a..85d9491730 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_http_health_checks_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_http_health_checks_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_http_health_checks_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl
index f760e1609c..2383295484 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_only_http_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_rabbitmqadmin_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_rabbitmqadmin_SUITE.erl
index f077b61b07..7fddea0ebe 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_rabbitmqadmin_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_rabbitmqadmin_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_rabbitmqadmin_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_runtime_parameters_util.erl b/deps/rabbitmq_management/test/rabbit_mgmt_runtime_parameters_util.erl
index 8d81231c2a..d6ef89db64 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_runtime_parameters_util.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_runtime_parameters_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_runtime_parameters_util).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_stats_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_stats_SUITE.erl
index 138ed07270..b43366dfac 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_stats_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_stats_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_stats_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_test_db_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_test_db_SUITE.erl
index f5aec756a6..9303d8f858 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_test_db_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_test_db_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_test_db_SUITE).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_test_unit_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_test_unit_SUITE.erl
index 2ae8d94f39..0d60155f6c 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_test_unit_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_test_unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_test_unit_SUITE).
diff --git a/deps/rabbitmq_management/test/stats_SUITE.erl b/deps/rabbitmq_management/test/stats_SUITE.erl
index da39114ef8..83dffed2c3 100644
--- a/deps/rabbitmq_management/test/stats_SUITE.erl
+++ b/deps/rabbitmq_management/test/stats_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(stats_SUITE).
diff --git a/deps/rabbitmq_management_agent/include/rabbit_mgmt_agent.hrl b/deps/rabbitmq_management_agent/include/rabbit_mgmt_agent.hrl
index 08883763f3..07588e349b 100644
--- a/deps/rabbitmq_management_agent/include/rabbit_mgmt_agent.hrl
+++ b/deps/rabbitmq_management_agent/include/rabbit_mgmt_agent.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(MANAGEMENT_PG_SCOPE, rabbitmq_management).
diff --git a/deps/rabbitmq_management_agent/include/rabbit_mgmt_metrics.hrl b/deps/rabbitmq_management_agent/include/rabbit_mgmt_metrics.hrl
index 4e1fbc0a4a..36fcbf94ac 100644
--- a/deps/rabbitmq_management_agent/include/rabbit_mgmt_metrics.hrl
+++ b/deps/rabbitmq_management_agent/include/rabbit_mgmt_metrics.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-type(event_type() :: queue_stats | queue_exchange_stats | vhost_stats
diff --git a/deps/rabbitmq_management_agent/include/rabbit_mgmt_records.hrl b/deps/rabbitmq_management_agent/include/rabbit_mgmt_records.hrl
index 0745c9dba1..15a3ab2ea8 100644
--- a/deps/rabbitmq_management_agent/include/rabbit_mgmt_records.hrl
+++ b/deps/rabbitmq_management_agent/include/rabbit_mgmt_records.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(context, {user,
diff --git a/deps/rabbitmq_management_agent/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ResetStatsDbCommand.erl b/deps/rabbitmq_management_agent/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ResetStatsDbCommand.erl
index ef6ac55b66..6f78d5a3aa 100644
--- a/deps/rabbitmq_management_agent/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ResetStatsDbCommand.erl
+++ b/deps/rabbitmq_management_agent/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ResetStatsDbCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.ResetStatsDbCommand').
diff --git a/deps/rabbitmq_management_agent/src/exometer_slide.erl b/deps/rabbitmq_management_agent/src/exometer_slide.erl
index d140bea4cf..09283d16fa 100644
--- a/deps/rabbitmq_management_agent/src/exometer_slide.erl
+++ b/deps/rabbitmq_management_agent/src/exometer_slide.erl
@@ -44,7 +44,7 @@
%% @end
%%
%%
-%% All modifications are (C) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% All modifications are (C) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%% The Initial Developer of the Original Code is Basho Technologies, Inc.
-module(exometer_slide).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_app.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_app.erl
index 63da294f1e..6a7fd254fc 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_app.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_agent_app).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_config.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_config.erl
index 893d602106..df215ef903 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_config.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_config.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_agent_config).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup.erl
index e7ea315edd..96a70c5db4 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_agent_sup).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup_sup.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup_sup.erl
index bd065c968e..08bab78bbb 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup_sup.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_agent_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_agent_sup_sup).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl
index 5ae2418268..d84951846f 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_data).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl
index c7f9649046..fb154cbe0d 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_data_compat).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_db_handler.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_db_handler.erl
index 1eaad7ff53..ee618fb62b 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_db_handler.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_db_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_db_handler).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl
index 6f3846de61..c480fe88c2 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_external_stats).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl
index 1afaa52f79..ffd739653a 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2018-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2018-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_ff).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl
index c8634e4e24..64e2a1dc4e 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_format).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_gc.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_gc.erl
index 8231f804a3..ff99b9f94c 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_gc.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_gc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_gc).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl
index 9ab07fd808..e4f59704ef 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_metrics_collector).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_gc.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_gc.erl
index 4e47f2a80d..58bb023c57 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_gc.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_gc.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_metrics_gc).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_storage.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_storage.erl
index 9032fe9231..ec8e231074 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_storage.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_storage.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_storage).
-behaviour(gen_server2).
diff --git a/deps/rabbitmq_management_agent/test/exometer_slide_SUITE.erl b/deps/rabbitmq_management_agent/test/exometer_slide_SUITE.erl
index cf87ebd10a..f973f44826 100644
--- a/deps/rabbitmq_management_agent/test/exometer_slide_SUITE.erl
+++ b/deps/rabbitmq_management_agent/test/exometer_slide_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(exometer_slide_SUITE).
diff --git a/deps/rabbitmq_management_agent/test/metrics_SUITE.erl b/deps/rabbitmq_management_agent/test/metrics_SUITE.erl
index e50ab3d5ec..8806e1e38e 100644
--- a/deps/rabbitmq_management_agent/test/metrics_SUITE.erl
+++ b/deps/rabbitmq_management_agent/test/metrics_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(metrics_SUITE).
-compile(export_all).
diff --git a/deps/rabbitmq_management_agent/test/rabbit_mgmt_gc_SUITE.erl b/deps/rabbitmq_management_agent/test/rabbit_mgmt_gc_SUITE.erl
index b5dc5d39bc..278df90d3c 100644
--- a/deps/rabbitmq_management_agent/test/rabbit_mgmt_gc_SUITE.erl
+++ b/deps/rabbitmq_management_agent/test/rabbit_mgmt_gc_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_gc_SUITE).
diff --git a/deps/rabbitmq_management_agent/test/rabbit_mgmt_slide_SUITE.erl b/deps/rabbitmq_management_agent/test/rabbit_mgmt_slide_SUITE.erl
index 9191cb81ac..20efd4cf8c 100644
--- a/deps/rabbitmq_management_agent/test/rabbit_mgmt_slide_SUITE.erl
+++ b/deps/rabbitmq_management_agent/test/rabbit_mgmt_slide_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mgmt_slide_SUITE).
diff --git a/deps/rabbitmq_mqtt/include/mqtt_machine.hrl b/deps/rabbitmq_mqtt/include/mqtt_machine.hrl
index 3d5ee22c33..fa625f31d1 100644
--- a/deps/rabbitmq_mqtt/include/mqtt_machine.hrl
+++ b/deps/rabbitmq_mqtt/include/mqtt_machine.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(machine_state, {client_ids = #{},
diff --git a/deps/rabbitmq_mqtt/include/mqtt_machine_v0.hrl b/deps/rabbitmq_mqtt/include/mqtt_machine_v0.hrl
index 50ac3bb236..bad074794f 100644
--- a/deps/rabbitmq_mqtt/include/mqtt_machine_v0.hrl
+++ b/deps/rabbitmq_mqtt/include/mqtt_machine_v0.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(machine_state, {client_ids = #{}}).
diff --git a/deps/rabbitmq_mqtt/include/rabbit_mqtt.hrl b/deps/rabbitmq_mqtt/include/rabbit_mqtt.hrl
index f829ecf40e..b8edb8605d 100644
--- a/deps/rabbitmq_mqtt/include/rabbit_mqtt.hrl
+++ b/deps/rabbitmq_mqtt/include/rabbit_mqtt.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(CLIENT_ID_MAXLEN, 23).
diff --git a/deps/rabbitmq_mqtt/include/rabbit_mqtt_frame.hrl b/deps/rabbitmq_mqtt/include/rabbit_mqtt_frame.hrl
index d1ac8640e4..e7b1728c48 100644
--- a/deps/rabbitmq_mqtt/include/rabbit_mqtt_frame.hrl
+++ b/deps/rabbitmq_mqtt/include/rabbit_mqtt_frame.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(PROTOCOL_NAMES, [{3, "MQIsdp"}, {4, "MQTT"}]).
diff --git a/deps/rabbitmq_mqtt/include/rabbit_mqtt_retained_msg_store.hrl b/deps/rabbitmq_mqtt/include/rabbit_mqtt_retained_msg_store.hrl
index bd91a9b00d..83811446bd 100644
--- a/deps/rabbitmq_mqtt/include/rabbit_mqtt_retained_msg_store.hrl
+++ b/deps/rabbitmq_mqtt/include/rabbit_mqtt_retained_msg_store.hrl
@@ -2,5 +2,5 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
diff --git a/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DecommissionMqttNodeCommand.erl b/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DecommissionMqttNodeCommand.erl
index 6b75e63bda..faa53eb200 100644
--- a/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DecommissionMqttNodeCommand.erl
+++ b/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DecommissionMqttNodeCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.DecommissionMqttNodeCommand').
diff --git a/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand.erl b/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand.erl
index bbacf9245f..9e76ab2cbf 100644
--- a/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand.erl
+++ b/deps/rabbitmq_mqtt/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand').
diff --git a/deps/rabbitmq_mqtt/src/mqtt_machine.erl b/deps/rabbitmq_mqtt/src/mqtt_machine.erl
index dda63a4543..b2d245f036 100644
--- a/deps/rabbitmq_mqtt/src/mqtt_machine.erl
+++ b/deps/rabbitmq_mqtt/src/mqtt_machine.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mqtt_machine).
-behaviour(ra_machine).
diff --git a/deps/rabbitmq_mqtt/src/mqtt_machine_v0.erl b/deps/rabbitmq_mqtt/src/mqtt_machine_v0.erl
index 77cea727dc..f3526adb73 100644
--- a/deps/rabbitmq_mqtt/src/mqtt_machine_v0.erl
+++ b/deps/rabbitmq_mqtt/src/mqtt_machine_v0.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mqtt_machine_v0).
-behaviour(ra_machine).
diff --git a/deps/rabbitmq_mqtt/src/mqtt_node.erl b/deps/rabbitmq_mqtt/src/mqtt_node.erl
index 3c74499ed8..91066095a5 100644
--- a/deps/rabbitmq_mqtt/src/mqtt_node.erl
+++ b/deps/rabbitmq_mqtt/src/mqtt_node.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(mqtt_node).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt.erl
index 80cb6e04ff..f28a8a0974 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_collector.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_collector.erl
index 8940cab656..b8c0896b00 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_collector.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_collector.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_collector).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_info.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_info.erl
index 5ddc57bb71..1dd6f3de0d 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_info.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_info.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2017-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_connection_info).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_sup.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_sup.erl
index 20412a1a0c..898adc7657 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_sup.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_connection_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_connection_sup).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_frame.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_frame.erl
index e82b4fa169..7b67199312 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_frame.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_frame.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_frame).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erl
index cc2b66eb41..bc38958ac6 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_internal_event_handler).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl
index d904450cb9..904eb943cc 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_processor).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl
index 7f7b8eb696..5dca2b6352 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_reader).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store.erl
index 38689c439a..e146756a86 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_retained_msg_store).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_dets.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_dets.erl
index ecc25ecf32..92e3617e17 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_dets.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_dets.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_retained_msg_store_dets).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_ets.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_ets.erl
index 1e620c9898..c8a060bc1f 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_ets.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_ets.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_retained_msg_store_ets).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_noop.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_noop.erl
index 7addbd4a09..db2dc5df6d 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_noop.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_noop.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_retained_msg_store_noop).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer.erl
index 69fad965ca..84e07dd705 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_retainer).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer_sup.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer_sup.erl
index 4d07b784dc..7122e7c08f 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer_sup.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_retainer_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_retainer_sup).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_sup.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_sup.erl
index b842105fe5..50b077810f 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_sup.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_sup).
diff --git a/deps/rabbitmq_mqtt/src/rabbit_mqtt_util.erl b/deps/rabbitmq_mqtt/src/rabbit_mqtt_util.erl
index a54e978495..6866f8d980 100644
--- a/deps/rabbitmq_mqtt/src/rabbit_mqtt_util.erl
+++ b/deps/rabbitmq_mqtt/src/rabbit_mqtt_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_mqtt_util).
diff --git a/deps/rabbitmq_mqtt/test/auth_SUITE.erl b/deps/rabbitmq_mqtt/test/auth_SUITE.erl
index b494939914..80a1948a94 100644
--- a/deps/rabbitmq_mqtt/test/auth_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/auth_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(auth_SUITE).
-compile([export_all]).
diff --git a/deps/rabbitmq_mqtt/test/cluster_SUITE.erl b/deps/rabbitmq_mqtt/test/cluster_SUITE.erl
index 72fd0bde7a..fd0e6183d1 100644
--- a/deps/rabbitmq_mqtt/test/cluster_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/cluster_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(cluster_SUITE).
-compile([export_all]).
diff --git a/deps/rabbitmq_mqtt/test/command_SUITE.erl b/deps/rabbitmq_mqtt/test/command_SUITE.erl
index 9f30f5e045..8db2034aaa 100644
--- a/deps/rabbitmq_mqtt/test/command_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(command_SUITE).
diff --git a/deps/rabbitmq_mqtt/test/config_schema_SUITE.erl b/deps/rabbitmq_mqtt/test/config_schema_SUITE.erl
index 15e965c23e..e87e796f48 100644
--- a/deps/rabbitmq_mqtt/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_mqtt/test/java_SUITE.erl b/deps/rabbitmq_mqtt/test/java_SUITE.erl
index 079caa4b1f..c9bc77ce2c 100644
--- a/deps/rabbitmq_mqtt/test/java_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/java_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(java_SUITE).
diff --git a/deps/rabbitmq_mqtt/test/java_SUITE_data/src/test/java/com/rabbitmq/mqtt/test/MqttTest.java b/deps/rabbitmq_mqtt/test/java_SUITE_data/src/test/java/com/rabbitmq/mqtt/test/MqttTest.java
index d5386090f4..9160d4f1db 100644
--- a/deps/rabbitmq_mqtt/test/java_SUITE_data/src/test/java/com/rabbitmq/mqtt/test/MqttTest.java
+++ b/deps/rabbitmq_mqtt/test/java_SUITE_data/src/test/java/com/rabbitmq/mqtt/test/MqttTest.java
@@ -2,7 +2,7 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
//
-// Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.mqtt.test;
diff --git a/deps/rabbitmq_mqtt/test/processor_SUITE.erl b/deps/rabbitmq_mqtt/test/processor_SUITE.erl
index ca49aeaa86..b2fb5418bf 100644
--- a/deps/rabbitmq_mqtt/test/processor_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/processor_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(processor_SUITE).
diff --git a/deps/rabbitmq_mqtt/test/proxy_protocol_SUITE.erl b/deps/rabbitmq_mqtt/test/proxy_protocol_SUITE.erl
index d0075bc605..ac7dcb7cfc 100644
--- a/deps/rabbitmq_mqtt/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/proxy_protocol_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(proxy_protocol_SUITE).
-compile([export_all]).
diff --git a/deps/rabbitmq_mqtt/test/rabbit_auth_backend_mqtt_mock.erl b/deps/rabbitmq_mqtt/test/rabbit_auth_backend_mqtt_mock.erl
index b19f4e22af..bc666a169b 100644
--- a/deps/rabbitmq_mqtt/test/rabbit_auth_backend_mqtt_mock.erl
+++ b/deps/rabbitmq_mqtt/test/rabbit_auth_backend_mqtt_mock.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2019-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2019-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% A mock authn/authz that records information during calls. For testing purposes only.
diff --git a/deps/rabbitmq_mqtt/test/reader_SUITE.erl b/deps/rabbitmq_mqtt/test/reader_SUITE.erl
index 08ac8aa094..9209bb8661 100644
--- a/deps/rabbitmq_mqtt/test/reader_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/reader_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(reader_SUITE).
-compile([export_all]).
diff --git a/deps/rabbitmq_mqtt/test/retainer_SUITE.erl b/deps/rabbitmq_mqtt/test/retainer_SUITE.erl
index 28ecf2da52..7e51739ea7 100644
--- a/deps/rabbitmq_mqtt/test/retainer_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/retainer_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(retainer_SUITE).
-compile([export_all]).
diff --git a/deps/rabbitmq_mqtt/test/util_SUITE.erl b/deps/rabbitmq_mqtt/test/util_SUITE.erl
index ae62d61919..22fdb5f535 100644
--- a/deps/rabbitmq_mqtt/test/util_SUITE.erl
+++ b/deps/rabbitmq_mqtt/test/util_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(util_SUITE).
-compile([export_all]).
diff --git a/deps/rabbitmq_peer_discovery_aws/README.md b/deps/rabbitmq_peer_discovery_aws/README.md
index 1aaf661b91..1382786c0d 100644
--- a/deps/rabbitmq_peer_discovery_aws/README.md
+++ b/deps/rabbitmq_peer_discovery_aws/README.md
@@ -53,4 +53,4 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) and our [development process overview](
## Copyright
-(c) 2007-2021 VMware, Inc. or its affiliates.
+(c) 2007-2022 VMware, Inc. or its affiliates.
diff --git a/deps/rabbitmq_peer_discovery_aws/priv/schema/rabbitmq_peer_discovery_aws.schema b/deps/rabbitmq_peer_discovery_aws/priv/schema/rabbitmq_peer_discovery_aws.schema
index 63e76c7a1f..a3238e270d 100644
--- a/deps/rabbitmq_peer_discovery_aws/priv/schema/rabbitmq_peer_discovery_aws.schema
+++ b/deps/rabbitmq_peer_discovery_aws/priv/schema/rabbitmq_peer_discovery_aws.schema
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% region
diff --git a/deps/rabbitmq_peer_discovery_aws/src/rabbit_peer_discovery_aws.erl b/deps/rabbitmq_peer_discovery_aws/src/rabbit_peer_discovery_aws.erl
index a668f5843d..d56216deb6 100644
--- a/deps/rabbitmq_peer_discovery_aws/src/rabbit_peer_discovery_aws.erl
+++ b/deps/rabbitmq_peer_discovery_aws/src/rabbit_peer_discovery_aws.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_aws).
diff --git a/deps/rabbitmq_peer_discovery_aws/src/rabbitmq_peer_discovery_aws.erl b/deps/rabbitmq_peer_discovery_aws/src/rabbitmq_peer_discovery_aws.erl
index 840d7e7687..ce88eb644e 100644
--- a/deps/rabbitmq_peer_discovery_aws/src/rabbitmq_peer_discovery_aws.erl
+++ b/deps/rabbitmq_peer_discovery_aws/src/rabbitmq_peer_discovery_aws.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This module exists as an alias for rabbit_peer_discovery_aws.
diff --git a/deps/rabbitmq_peer_discovery_aws/test/aws_ecs_util.erl b/deps/rabbitmq_peer_discovery_aws/test/aws_ecs_util.erl
index 2d43f6701a..6bf3524087 100644
--- a/deps/rabbitmq_peer_discovery_aws/test/aws_ecs_util.erl
+++ b/deps/rabbitmq_peer_discovery_aws/test/aws_ecs_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(aws_ecs_util).
diff --git a/deps/rabbitmq_peer_discovery_aws/test/config_schema_SUITE.erl b/deps/rabbitmq_peer_discovery_aws/test/config_schema_SUITE.erl
index 0eeb35a04c..f43ae02ac8 100644
--- a/deps/rabbitmq_peer_discovery_aws/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_aws/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_aws/test/integration_SUITE.erl b/deps/rabbitmq_peer_discovery_aws/test/integration_SUITE.erl
index cbd356ed6a..5de83a15a0 100644
--- a/deps/rabbitmq_peer_discovery_aws/test/integration_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_aws/test/integration_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(integration_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_aws/test/unit_SUITE.erl b/deps/rabbitmq_peer_discovery_aws/test/unit_SUITE.erl
index e9c3d14112..60b7af47ad 100644
--- a/deps/rabbitmq_peer_discovery_aws/test/unit_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_aws/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl b/deps/rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl
index 271ee08d82..ffd8f32757 100644
--- a/deps/rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl
+++ b/deps/rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-include_lib("rabbit_common/include/logging.hrl").
diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_cleanup.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_cleanup.erl
index 635ee08457..9e3fe44770 100644
--- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_cleanup.erl
+++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_cleanup.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_cleanup).
diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_app.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_app.erl
index b0a5e68eb5..0f04ed2cbd 100644
--- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_app.erl
+++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_common_app).
diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_sup.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_sup.erl
index aac670bbd6..f5ece1af5d 100644
--- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_sup.erl
+++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_common_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_common_sup).
diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl
index 14fcbdb843..17ba0ae225 100644
--- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl
+++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_config).
diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_httpc.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_httpc.erl
index f0c734adc4..9df57ef3a6 100644
--- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_httpc.erl
+++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_httpc.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_httpc).
diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_util.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_util.erl
index f7b3a529e0..7407ccffd5 100644
--- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_util.erl
+++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_util.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_util).
diff --git a/deps/rabbitmq_peer_discovery_common/test/config_schema_SUITE.erl b/deps/rabbitmq_peer_discovery_common/test/config_schema_SUITE.erl
index 6eaa8b3cae..0cf3a58f5c 100644
--- a/deps/rabbitmq_peer_discovery_common/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_common/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_consul/include/rabbit_peer_discovery_consul.hrl b/deps/rabbitmq_peer_discovery_consul/include/rabbit_peer_discovery_consul.hrl
index 1ddf340be5..fffbbaec9a 100644
--- a/deps/rabbitmq_peer_discovery_consul/include/rabbit_peer_discovery_consul.hrl
+++ b/deps/rabbitmq_peer_discovery_consul/include/rabbit_peer_discovery_consul.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(BACKEND_CONFIG_KEY, peer_discovery_consul).
diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl
index 9fd98f09d8..a3b6fee242 100644
--- a/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl
+++ b/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_consul).
diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul.erl
index 5ad5fc4309..c1a64488ef 100644
--- a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul.erl
+++ b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_consul).
diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_app.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_app.erl
index a44df56113..4014f34542 100644
--- a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_app.erl
+++ b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_consul_app).
diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_health_check_helper.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_health_check_helper.erl
index 6682300ee7..be939f9e3e 100644
--- a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_health_check_helper.erl
+++ b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_health_check_helper.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This gen_server starts a periodic timer on behalf of
diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_sup.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_sup.erl
index e7addf230d..9385739a47 100644
--- a/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_sup.erl
+++ b/deps/rabbitmq_peer_discovery_consul/src/rabbitmq_peer_discovery_consul_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_consul_sup).
diff --git a/deps/rabbitmq_peer_discovery_consul/test/config_schema_SUITE.erl b/deps/rabbitmq_peer_discovery_consul/test/config_schema_SUITE.erl
index 453c3f356b..0c36e01a14 100644
--- a/deps/rabbitmq_peer_discovery_consul/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_consul/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_consul/test/rabbitmq_peer_discovery_consul_SUITE.erl b/deps/rabbitmq_peer_discovery_consul/test/rabbitmq_peer_discovery_consul_SUITE.erl
index acbc7690c3..268307a6a6 100644
--- a/deps/rabbitmq_peer_discovery_consul/test/rabbitmq_peer_discovery_consul_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_consul/test/rabbitmq_peer_discovery_consul_SUITE.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_consul_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl b/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl
index 335fb3d026..0f3a7cd23e 100644
--- a/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl
+++ b/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(BACKEND_CONFIG_KEY, peer_discovery_etcd).
diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl
index 4216339d19..b5b4d53f81 100644
--- a/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_etcd).
diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd.erl
index 0b0cb5723c..2fa0b1e82c 100644
--- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_etcd).
diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl
index 9ce799389a..c3c60a0d56 100644
--- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_etcd_app).
diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl
index cfd5bbfcaa..7addc41c8d 100644
--- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_etcd_sup).
diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl
index 60855086f3..405d4c0af4 100644
--- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_etcd_v3_client).
diff --git a/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE.erl b/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE.erl
index abff997197..85caa87cb7 100644
--- a/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE_data/rabbitmq_peer_discovery_etcd.snippets b/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE_data/rabbitmq_peer_discovery_etcd.snippets
index ed1c527f14..829ae3b2df 100644
--- a/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE_data/rabbitmq_peer_discovery_etcd.snippets
+++ b/deps/rabbitmq_peer_discovery_etcd/test/config_schema_SUITE_data/rabbitmq_peer_discovery_etcd.snippets
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
[
diff --git a/deps/rabbitmq_peer_discovery_etcd/test/system_SUITE.erl b/deps/rabbitmq_peer_discovery_etcd/test/system_SUITE.erl
index bc3cc9234f..569102002c 100644
--- a/deps/rabbitmq_peer_discovery_etcd/test/system_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/test/system_SUITE.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_etcd/test/unit_SUITE.erl b/deps/rabbitmq_peer_discovery_etcd/test/unit_SUITE.erl
index 0206eb53c1..6cef145a20 100644
--- a/deps/rabbitmq_peer_discovery_etcd/test/unit_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_etcd/test/unit_SUITE.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_k8s/include/rabbit_peer_discovery_k8s.hrl b/deps/rabbitmq_peer_discovery_k8s/include/rabbit_peer_discovery_k8s.hrl
index e751843931..b963d0d2ae 100644
--- a/deps/rabbitmq_peer_discovery_k8s/include/rabbit_peer_discovery_k8s.hrl
+++ b/deps/rabbitmq_peer_discovery_k8s/include/rabbit_peer_discovery_k8s.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(CONFIG_MODULE, rabbit_peer_discovery_config).
diff --git a/deps/rabbitmq_peer_discovery_k8s/src/rabbit_peer_discovery_k8s.erl b/deps/rabbitmq_peer_discovery_k8s/src/rabbit_peer_discovery_k8s.erl
index 3eb09519ae..a96c5ad7ca 100644
--- a/deps/rabbitmq_peer_discovery_k8s/src/rabbit_peer_discovery_k8s.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/src/rabbit_peer_discovery_k8s.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_peer_discovery_k8s).
diff --git a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s.erl b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s.erl
index 9e2a6e3406..b6edfda467 100644
--- a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This module exists as an alias for rabbit_peer_discovery_k8s.
diff --git a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_app.erl b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_app.erl
index 57df5964b0..f8033d9dbc 100644
--- a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_app.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_k8s_app).
diff --git a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_node_monitor.erl b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_node_monitor.erl
index be256ed4a8..7c309f6bce 100644
--- a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_node_monitor.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_node_monitor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% This gen_server receives node monitoring events from net_kernel
diff --git a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_sup.erl b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_sup.erl
index 6652037c7f..11af79b46c 100644
--- a/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_sup.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/src/rabbitmq_peer_discovery_k8s_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_k8s_sup).
diff --git a/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE.erl b/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE.erl
index e5455fea36..d84d781c57 100644
--- a/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE_data/rabbitmq_peer_discovery_k8s.snippets b/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE_data/rabbitmq_peer_discovery_k8s.snippets
index 5c7223bd25..00b4b67ef7 100644
--- a/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE_data/rabbitmq_peer_discovery_k8s.snippets
+++ b/deps/rabbitmq_peer_discovery_k8s/test/config_schema_SUITE_data/rabbitmq_peer_discovery_k8s.snippets
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
[
diff --git a/deps/rabbitmq_peer_discovery_k8s/test/rabbitmq_peer_discovery_k8s_SUITE.erl b/deps/rabbitmq_peer_discovery_k8s/test/rabbitmq_peer_discovery_k8s_SUITE.erl
index 88fe2843f2..aa908375be 100644
--- a/deps/rabbitmq_peer_discovery_k8s/test/rabbitmq_peer_discovery_k8s_SUITE.erl
+++ b/deps/rabbitmq_peer_discovery_k8s/test/rabbitmq_peer_discovery_k8s_SUITE.erl
@@ -4,7 +4,7 @@
%%
%% The Initial Developer of the Original Code is AWeber Communications.
%% Copyright (c) 2015-2016 AWeber Communications
-%% Copyright (c) 2016-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2016-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbitmq_peer_discovery_k8s_SUITE).
diff --git a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_alarm_metrics_collector.erl b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_alarm_metrics_collector.erl
index b750aa0f6a..e17f058570 100644
--- a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_alarm_metrics_collector.erl
+++ b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_alarm_metrics_collector.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(prometheus_rabbitmq_alarm_metrics_collector).
diff --git a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
index 7c31b71b92..5bf85e591b 100644
--- a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
+++ b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(prometheus_rabbitmq_core_metrics_collector).
-export([register/0,
diff --git a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_global_metrics_collector.erl b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_global_metrics_collector.erl
index b13dfa0bd8..00be888f48 100644
--- a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_global_metrics_collector.erl
+++ b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_global_metrics_collector.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(prometheus_rabbitmq_global_metrics_collector).
diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl
index c5450c23be..d365768059 100644
--- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl
+++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prometheus_app).
diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl
index 45f5bb738d..0034bf9d91 100644
--- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl
+++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prometheus_dispatcher).
diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl
index f7f4f11720..48d4612c07 100644
--- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl
+++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prometheus_handler).
diff --git a/deps/rabbitmq_prometheus/test/config_schema_SUITE.erl b/deps/rabbitmq_prometheus/test/config_schema_SUITE.erl
index 11b2813ff1..7f8e94f2c6 100644
--- a/deps/rabbitmq_prometheus/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_prometheus/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_prometheus/test/rabbit_prometheus_http_SUITE.erl b/deps/rabbitmq_prometheus/test/rabbit_prometheus_http_SUITE.erl
index c8be5fae28..0ff94a91f6 100644
--- a/deps/rabbitmq_prometheus/test/rabbit_prometheus_http_SUITE.erl
+++ b/deps/rabbitmq_prometheus/test/rabbit_prometheus_http_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_prometheus_http_SUITE).
diff --git a/deps/rabbitmq_random_exchange/src/rabbit_exchange_type_random.erl b/deps/rabbitmq_random_exchange/src/rabbit_exchange_type_random.erl
index 724ce6c239..b90c542915 100644
--- a/deps/rabbitmq_random_exchange/src/rabbit_exchange_type_random.erl
+++ b/deps/rabbitmq_random_exchange/src/rabbit_exchange_type_random.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_exchange_type_random).
diff --git a/deps/rabbitmq_recent_history_exchange/include/rabbit_recent_history.hrl b/deps/rabbitmq_recent_history_exchange/include/rabbit_recent_history.hrl
index e9cf9beeb0..8b6adf81f9 100644
--- a/deps/rabbitmq_recent_history_exchange/include/rabbit_recent_history.hrl
+++ b/deps/rabbitmq_recent_history_exchange/include/rabbit_recent_history.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(KEEP_NB, 20).
diff --git a/deps/rabbitmq_recent_history_exchange/src/rabbit_exchange_type_recent_history.erl b/deps/rabbitmq_recent_history_exchange/src/rabbit_exchange_type_recent_history.erl
index e4068ebb77..cdc6d996bf 100644
--- a/deps/rabbitmq_recent_history_exchange/src/rabbit_exchange_type_recent_history.erl
+++ b/deps/rabbitmq_recent_history_exchange/src/rabbit_exchange_type_recent_history.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(rabbit_exchange_type_recent_history).
diff --git a/deps/rabbitmq_recent_history_exchange/test/system_SUITE.erl b/deps/rabbitmq_recent_history_exchange/test/system_SUITE.erl
index 4649a672ff..f87d6d9d1f 100644
--- a/deps/rabbitmq_recent_history_exchange/test/system_SUITE.erl
+++ b/deps/rabbitmq_recent_history_exchange/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
-module(system_SUITE).
diff --git a/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_decorator.erl b/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_decorator.erl
index 84a12896c1..441b2c9615 100644
--- a/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_decorator.erl
+++ b/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_decorator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_exchange_decorator).
diff --git a/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_type_modulus_hash.erl b/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_type_modulus_hash.erl
index 9424964f2e..567c31eee4 100644
--- a/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_type_modulus_hash.erl
+++ b/deps/rabbitmq_sharding/src/rabbit_sharding_exchange_type_modulus_hash.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_exchange_type_modulus_hash).
diff --git a/deps/rabbitmq_sharding/src/rabbit_sharding_interceptor.erl b/deps/rabbitmq_sharding/src/rabbit_sharding_interceptor.erl
index a385b76c53..e4de32e112 100644
--- a/deps/rabbitmq_sharding/src/rabbit_sharding_interceptor.erl
+++ b/deps/rabbitmq_sharding/src/rabbit_sharding_interceptor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_interceptor).
diff --git a/deps/rabbitmq_sharding/src/rabbit_sharding_policy_validator.erl b/deps/rabbitmq_sharding/src/rabbit_sharding_policy_validator.erl
index f4439d3bd8..a991f6c1ae 100644
--- a/deps/rabbitmq_sharding/src/rabbit_sharding_policy_validator.erl
+++ b/deps/rabbitmq_sharding/src/rabbit_sharding_policy_validator.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_policy_validator).
diff --git a/deps/rabbitmq_sharding/src/rabbit_sharding_shard.erl b/deps/rabbitmq_sharding/src/rabbit_sharding_shard.erl
index 16a4d1ccd7..43911667a3 100644
--- a/deps/rabbitmq_sharding/src/rabbit_sharding_shard.erl
+++ b/deps/rabbitmq_sharding/src/rabbit_sharding_shard.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_shard).
diff --git a/deps/rabbitmq_sharding/src/rabbit_sharding_util.erl b/deps/rabbitmq_sharding/src/rabbit_sharding_util.erl
index 4d5b7aea2f..c5b4d99c54 100644
--- a/deps/rabbitmq_sharding/src/rabbit_sharding_util.erl
+++ b/deps/rabbitmq_sharding/src/rabbit_sharding_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_util).
diff --git a/deps/rabbitmq_sharding/test/rabbit_hash_exchange_SUITE.erl b/deps/rabbitmq_sharding/test/rabbit_hash_exchange_SUITE.erl
index 6235a7e910..23de157fcf 100644
--- a/deps/rabbitmq_sharding/test/rabbit_hash_exchange_SUITE.erl
+++ b/deps/rabbitmq_sharding/test/rabbit_hash_exchange_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_hash_exchange_SUITE).
diff --git a/deps/rabbitmq_sharding/test/rabbit_sharding_SUITE.erl b/deps/rabbitmq_sharding/test/rabbit_sharding_SUITE.erl
index 3d1ab24eb7..bd933b4245 100644
--- a/deps/rabbitmq_sharding/test/rabbit_sharding_SUITE.erl
+++ b/deps/rabbitmq_sharding/test/rabbit_sharding_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_sharding_SUITE).
diff --git a/deps/rabbitmq_shovel/include/rabbit_shovel.hrl b/deps/rabbitmq_shovel/include/rabbit_shovel.hrl
index 5c6e18ffaa..7518aa6871 100644
--- a/deps/rabbitmq_shovel/include/rabbit_shovel.hrl
+++ b/deps/rabbitmq_shovel/include/rabbit_shovel.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(endpoint,
diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl
index 1f8c937b48..5b02d0f1ee 100644
--- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl
+++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand').
diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ShovelStatusCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ShovelStatusCommand.erl
index 3622548c62..66dc70fca2 100644
--- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ShovelStatusCommand.erl
+++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ShovelStatusCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.ShovelStatusCommand').
diff --git a/deps/rabbitmq_shovel/src/rabbit_amqp091_shovel.erl b/deps/rabbitmq_shovel/src/rabbit_amqp091_shovel.erl
index 1f50abd05c..9b15d50691 100644
--- a/deps/rabbitmq_shovel/src/rabbit_amqp091_shovel.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_amqp091_shovel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp091_shovel).
diff --git a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl
index 73b47ca809..b4414d18dd 100644
--- a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_amqp10_shovel).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel.erl b/deps/rabbitmq_shovel/src/rabbit_shovel.erl
index 61035b0f89..649fd89d57 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_behaviour.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_behaviour.erl
index 9ff6d4082c..8d714021db 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_behaviour.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_behaviour.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_behaviour).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_config.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_config.erl
index 6b03e0bf1f..bc294569df 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_config.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_config.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_config).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
index 52d061f019..ad3c894f89 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_dyn_worker_sup).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl
index a448ab9856..c971c0b5f1 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_dyn_worker_sup_sup).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_locks.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_locks.erl
index 4c1e438413..f768cc88c5 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_locks.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_locks.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_locks).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
index 06753dbd34..c39c90eb1f 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_parameters).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_sup.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_sup.erl
index 2e18a8db83..5a55ad7982 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_sup.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_sup).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
index ef2ce4f42f..2ea5908916 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_util).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_worker.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_worker.erl
index dfee63c2f4..79c348ec81 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_worker.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_worker.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_worker).
diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_worker_sup.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_worker_sup.erl
index f409bf0aff..a05a9b8d36 100644
--- a/deps/rabbitmq_shovel/src/rabbit_shovel_worker_sup.erl
+++ b/deps/rabbitmq_shovel/src/rabbit_shovel_worker_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_worker_sup).
diff --git a/deps/rabbitmq_shovel/test/amqp10_SUITE.erl b/deps/rabbitmq_shovel/test/amqp10_SUITE.erl
index eeea656c34..eaa23944ef 100644
--- a/deps/rabbitmq_shovel/test/amqp10_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/amqp10_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_SUITE).
diff --git a/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl b/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl
index 12f5fad782..e913adaba1 100644
--- a/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_dynamic_SUITE).
diff --git a/deps/rabbitmq_shovel/test/amqp10_shovel_SUITE.erl b/deps/rabbitmq_shovel/test/amqp10_shovel_SUITE.erl
index 955ba949c1..41d088fdcf 100644
--- a/deps/rabbitmq_shovel/test/amqp10_shovel_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/amqp10_shovel_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp10_shovel_SUITE).
diff --git a/deps/rabbitmq_shovel/test/config_SUITE.erl b/deps/rabbitmq_shovel/test/config_SUITE.erl
index 2f0e2f8cdd..df43e8f7c1 100644
--- a/deps/rabbitmq_shovel/test/config_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/config_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_SUITE).
diff --git a/deps/rabbitmq_shovel/test/configuration_SUITE.erl b/deps/rabbitmq_shovel/test/configuration_SUITE.erl
index 0218af7677..59ff7500e8 100644
--- a/deps/rabbitmq_shovel/test/configuration_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/configuration_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(configuration_SUITE).
diff --git a/deps/rabbitmq_shovel/test/delete_shovel_command_SUITE.erl b/deps/rabbitmq_shovel/test/delete_shovel_command_SUITE.erl
index 6176a49dd3..230f4a9171 100644
--- a/deps/rabbitmq_shovel/test/delete_shovel_command_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/delete_shovel_command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(delete_shovel_command_SUITE).
diff --git a/deps/rabbitmq_shovel/test/dynamic_SUITE.erl b/deps/rabbitmq_shovel/test/dynamic_SUITE.erl
index 2206763e6f..9959cbeb18 100644
--- a/deps/rabbitmq_shovel/test/dynamic_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/dynamic_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(dynamic_SUITE).
diff --git a/deps/rabbitmq_shovel/test/parameters_SUITE.erl b/deps/rabbitmq_shovel/test/parameters_SUITE.erl
index ee40614983..b083aba048 100644
--- a/deps/rabbitmq_shovel/test/parameters_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/parameters_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(parameters_SUITE).
diff --git a/deps/rabbitmq_shovel/test/shovel_status_command_SUITE.erl b/deps/rabbitmq_shovel/test/shovel_status_command_SUITE.erl
index b2fc593f43..f278b9ff93 100644
--- a/deps/rabbitmq_shovel/test/shovel_status_command_SUITE.erl
+++ b/deps/rabbitmq_shovel/test/shovel_status_command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(shovel_status_command_SUITE).
diff --git a/deps/rabbitmq_shovel/test/shovel_test_utils.erl b/deps/rabbitmq_shovel/test/shovel_test_utils.erl
index 7e14d78552..5a93ade264 100644
--- a/deps/rabbitmq_shovel/test/shovel_test_utils.erl
+++ b/deps/rabbitmq_shovel/test/shovel_test_utils.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(shovel_test_utils).
diff --git a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
index 9b4f4265ca..1bbf893473 100644
--- a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
+++ b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_shovel_mgmt).
diff --git a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.hrl b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.hrl
new file mode 100644
index 0000000000..8565ab9724
--- /dev/null
+++ b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.hrl
@@ -0,0 +1,8 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-define(SHOVEL_CALLS_TIMEOUT_MS, 25000). \ No newline at end of file
diff --git a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl
new file mode 100644
index 0000000000..5565d66fbd
--- /dev/null
+++ b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl
@@ -0,0 +1,66 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module(rabbit_shovel_mgmt_util).
+
+-export([status/2]).
+
+-import(rabbit_misc, [pget/2]).
+
+-include_lib("rabbitmq_management_agent/include/rabbit_mgmt_records.hrl").
+-include_lib("amqp_client/include/amqp_client.hrl").
+-include_lib("rabbit_shovel_mgmt.hrl").
+
+%% Allow users to see things in the vhosts they are authorised. But
+%% static shovels do not have a vhost, so only allow admins (not
+%% monitors) to see them.
+filter_vhost_user(List, _ReqData, #context{user = User = #user{tags = Tags}}) ->
+ VHosts = rabbit_mgmt_util:list_login_vhosts_names(User, undefined),
+ [I || I <- List, case pget(vhost, I) of
+ undefined -> lists:member(administrator, Tags);
+ VHost -> lists:member(VHost, VHosts)
+ end].
+
+status(ReqData, Context) ->
+ filter_vhost_user(
+ lists:append([status(Node) || Node <- [node() | nodes()]]),
+ ReqData, Context).
+
+status(Node) ->
+ case rpc:call(Node, rabbit_shovel_status, status, [], ?SHOVEL_CALLS_TIMEOUT_MS) of
+ {badrpc, {'EXIT', _}} ->
+ [];
+ Status ->
+ [format(Node, I) || I <- Status]
+ end.
+
+format(Node, {Name, Type, Info, TS}) ->
+ [{node, Node}, {timestamp, format_ts(TS)}] ++
+ format_name(Type, Name) ++
+ format_info(Info).
+
+format_name(static, Name) -> [{name, Name},
+ {type, static}];
+format_name(dynamic, {VHost, Name}) -> [{name, Name},
+ {vhost, VHost},
+ {type, dynamic}].
+
+format_info(starting) ->
+ [{state, starting}];
+
+format_info({running, Props}) ->
+ [{state, running}] ++ Props;
+
+format_info({terminated, Reason}) ->
+ [{state, terminated},
+ {reason, print("~p", [Reason])}].
+
+format_ts({{Y, M, D}, {H, Min, S}}) ->
+ print("~w-~2.2.0w-~2.2.0w ~w:~2.2.0w:~2.2.0w", [Y, M, D, H, Min, S]).
+
+print(Fmt, Val) ->
+ list_to_binary(io_lib:format(Fmt, Val)). \ No newline at end of file
diff --git a/deps/rabbitmq_shovel_management/test/http_SUITE.erl b/deps/rabbitmq_shovel_management/test/http_SUITE.erl
index 7cd9f3e049..0882c8eafd 100644
--- a/deps/rabbitmq_shovel_management/test/http_SUITE.erl
+++ b/deps/rabbitmq_shovel_management/test/http_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(http_SUITE).
diff --git a/deps/rabbitmq_stomp/include/rabbit_stomp.hrl b/deps/rabbitmq_stomp/include/rabbit_stomp.hrl
index 8952a4883f..7d8a476e79 100644
--- a/deps/rabbitmq_stomp/include/rabbit_stomp.hrl
+++ b/deps/rabbitmq_stomp/include/rabbit_stomp.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(stomp_configuration, {default_login,
diff --git a/deps/rabbitmq_stomp/include/rabbit_stomp_frame.hrl b/deps/rabbitmq_stomp/include/rabbit_stomp_frame.hrl
index bac0652141..7e1461699e 100644
--- a/deps/rabbitmq_stomp/include/rabbit_stomp_frame.hrl
+++ b/deps/rabbitmq_stomp/include/rabbit_stomp_frame.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-record(stomp_frame, {command, headers, body_iolist}).
diff --git a/deps/rabbitmq_stomp/include/rabbit_stomp_headers.hrl b/deps/rabbitmq_stomp/include/rabbit_stomp_headers.hrl
index a91189cb4a..4b41b71def 100644
--- a/deps/rabbitmq_stomp/include/rabbit_stomp_headers.hrl
+++ b/deps/rabbitmq_stomp/include/rabbit_stomp_headers.hrl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-define(HEADER_ACCEPT_VERSION, "accept-version").
diff --git a/deps/rabbitmq_stomp/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand.erl b/deps/rabbitmq_stomp/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand.erl
index 34727130ab..573d98074e 100644
--- a/deps/rabbitmq_stomp/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand.erl
+++ b/deps/rabbitmq_stomp/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand').
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp.erl b/deps/rabbitmq_stomp/src/rabbit_stomp.erl
index 513530e4ac..68ae2ba480 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_client_sup.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_client_sup.erl
index 6548351a4f..924b284040 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_client_sup.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_client_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_client_sup).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_connection_info.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_connection_info.erl
index 3d4d46585a..1129e1ad1d 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_connection_info.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_connection_info.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_connection_info).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_frame.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_frame.erl
index 841b2d2c3b..845cef368c 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_frame.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_frame.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_frame).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_internal_event_handler.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_internal_event_handler.erl
index e225bdc12c..3cc1034a57 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_internal_event_handler.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_internal_event_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_internal_event_handler).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
index 4cbdaf10ba..8c62595b5a 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_processor).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_reader.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_reader.erl
index 7787e7a372..68d89be4b8 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_reader.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_reader.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_reader).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_sup.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_sup.erl
index 0036dbf151..23789e8faa 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_sup.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_sup).
diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl
index bdccbc7934..4f3b4f612c 100644
--- a/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl
+++ b/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_util).
diff --git a/deps/rabbitmq_stomp/test/command_SUITE.erl b/deps/rabbitmq_stomp/test/command_SUITE.erl
index f4f8a5b9d0..bb9f8cc6f1 100644
--- a/deps/rabbitmq_stomp/test/command_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/command_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(command_SUITE).
diff --git a/deps/rabbitmq_stomp/test/config_schema_SUITE.erl b/deps/rabbitmq_stomp/test/config_schema_SUITE.erl
index 06d5be22bc..69a92954c7 100644
--- a/deps/rabbitmq_stomp/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_stomp/test/connections_SUITE.erl b/deps/rabbitmq_stomp/test/connections_SUITE.erl
index cc57ec9283..0a50a8c1fc 100644
--- a/deps/rabbitmq_stomp/test/connections_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/connections_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(connections_SUITE).
diff --git a/deps/rabbitmq_stomp/test/frame_SUITE.erl b/deps/rabbitmq_stomp/test/frame_SUITE.erl
index 93f21c22ee..55c20f6c61 100644
--- a/deps/rabbitmq_stomp/test/frame_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/frame_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(frame_SUITE).
diff --git a/deps/rabbitmq_stomp/test/proxy_protocol_SUITE.erl b/deps/rabbitmq_stomp/test/proxy_protocol_SUITE.erl
index efb48c8dc9..d924588f29 100644
--- a/deps/rabbitmq_stomp/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/proxy_protocol_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(proxy_protocol_SUITE).
diff --git a/deps/rabbitmq_stomp/test/python_SUITE.erl b/deps/rabbitmq_stomp/test/python_SUITE.erl
index 84ceefe1ec..b044ace342 100644
--- a/deps/rabbitmq_stomp/test/python_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/python_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(python_SUITE).
diff --git a/deps/rabbitmq_stomp/test/src/rabbit_stomp_client.erl b/deps/rabbitmq_stomp/test/src/rabbit_stomp_client.erl
index 38975303bc..10f24b51dc 100644
--- a/deps/rabbitmq_stomp/test/src/rabbit_stomp_client.erl
+++ b/deps/rabbitmq_stomp/test/src/rabbit_stomp_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% The stupidest client imaginable, just for testing.
diff --git a/deps/rabbitmq_stomp/test/src/rabbit_stomp_publish_test.erl b/deps/rabbitmq_stomp/test/src/rabbit_stomp_publish_test.erl
index 3980a22089..0d5c8c4fc4 100644
--- a/deps/rabbitmq_stomp/test/src/rabbit_stomp_publish_test.erl
+++ b/deps/rabbitmq_stomp/test/src/rabbit_stomp_publish_test.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stomp_publish_test).
diff --git a/deps/rabbitmq_stomp/test/system_SUITE.erl b/deps/rabbitmq_stomp/test/system_SUITE.erl
index e7e2e80a92..dfed1cb7c2 100644
--- a/deps/rabbitmq_stomp/test/system_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_stomp/test/topic_SUITE.erl b/deps/rabbitmq_stomp/test/topic_SUITE.erl
index 40dce2ad2c..281fb8a2c9 100644
--- a/deps/rabbitmq_stomp/test/topic_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/topic_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(topic_SUITE).
diff --git a/deps/rabbitmq_stomp/test/util_SUITE.erl b/deps/rabbitmq_stomp/test/util_SUITE.erl
index e365289aa6..0b04d9183c 100644
--- a/deps/rabbitmq_stomp/test/util_SUITE.erl
+++ b/deps/rabbitmq_stomp/test/util_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(util_SUITE).
diff --git a/deps/rabbitmq_stream/README.adoc b/deps/rabbitmq_stream/README.adoc
index ddec85887c..276710e105 100644
--- a/deps/rabbitmq_stream/README.adoc
+++ b/deps/rabbitmq_stream/README.adoc
@@ -35,4 +35,4 @@ Released under the link:LICENSE-MPL-RabbitMQ[MPL 2.0].
== Copyright
-(c) 2020-2021 VMware, Inc. or its affiliates.
+(c) 2020-2022 VMware, Inc. or its affiliates.
diff --git a/deps/rabbitmq_stream/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStreamConnectionsCommand.erl b/deps/rabbitmq_stream/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStreamConnectionsCommand.erl
index f9e49310cf..0334848770 100644
--- a/deps/rabbitmq_stream/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStreamConnectionsCommand.erl
+++ b/deps/rabbitmq_stream/src/Elixir.RabbitMQ.CLI.Ctl.Commands.ListStreamConnectionsCommand.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is GoPivotal, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
-module('Elixir.RabbitMQ.CLI.Ctl.Commands.ListStreamConnectionsCommand').
diff --git a/deps/rabbitmq_stream/src/rabbit_stream.erl b/deps/rabbitmq_stream/src/rabbit_stream.erl
index 6d27dcbc7d..24b92c3344 100644
--- a/deps/rabbitmq_stream/src/rabbit_stream.erl
+++ b/deps/rabbitmq_stream/src/rabbit_stream.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream).
diff --git a/deps/rabbitmq_stream/src/rabbit_stream_connection_sup.erl b/deps/rabbitmq_stream/src/rabbit_stream_connection_sup.erl
index a6f99b56d9..cf68aa307c 100644
--- a/deps/rabbitmq_stream/src/rabbit_stream_connection_sup.erl
+++ b/deps/rabbitmq_stream/src/rabbit_stream_connection_sup.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_connection_sup).
diff --git a/deps/rabbitmq_stream/src/rabbit_stream_metrics.erl b/deps/rabbitmq_stream/src/rabbit_stream_metrics.erl
index 09616146e8..5096f6500d 100644
--- a/deps/rabbitmq_stream/src/rabbit_stream_metrics.erl
+++ b/deps/rabbitmq_stream/src/rabbit_stream_metrics.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_metrics).
diff --git a/deps/rabbitmq_stream/src/rabbit_stream_metrics_gc.erl b/deps/rabbitmq_stream/src/rabbit_stream_metrics_gc.erl
index bba4efb430..739995d9b3 100644
--- a/deps/rabbitmq_stream/src/rabbit_stream_metrics_gc.erl
+++ b/deps/rabbitmq_stream/src/rabbit_stream_metrics_gc.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_metrics_gc).
diff --git a/deps/rabbitmq_stream/src/rabbit_stream_sup.erl b/deps/rabbitmq_stream/src/rabbit_stream_sup.erl
index dc9d528fe8..92bec93a82 100644
--- a/deps/rabbitmq_stream/src/rabbit_stream_sup.erl
+++ b/deps/rabbitmq_stream/src/rabbit_stream_sup.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_sup).
diff --git a/deps/rabbitmq_stream/src/rabbit_stream_utils.erl b/deps/rabbitmq_stream/src/rabbit_stream_utils.erl
index 92d0bff8af..61033c6cf9 100644
--- a/deps/rabbitmq_stream/src/rabbit_stream_utils.erl
+++ b/deps/rabbitmq_stream/src/rabbit_stream_utils.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_utils).
diff --git a/deps/rabbitmq_stream/test/commands_SUITE.erl b/deps/rabbitmq_stream/test/commands_SUITE.erl
index c2652b4ad0..76c62dc851 100644
--- a/deps/rabbitmq_stream/test/commands_SUITE.erl
+++ b/deps/rabbitmq_stream/test/commands_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(commands_SUITE).
diff --git a/deps/rabbitmq_stream/test/config_schema_SUITE.erl b/deps/rabbitmq_stream/test/config_schema_SUITE.erl
index fe2daa2da0..d4995d5220 100644
--- a/deps/rabbitmq_stream/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_stream/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl b/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl
index bb40d7d9bf..6152dd2674 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_SUITE).
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/ClusterSizeTest.java b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/ClusterSizeTest.java
index 6ecf2b4ae4..f8a7e72399 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/ClusterSizeTest.java
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/ClusterSizeTest.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/FailureTest.java b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/FailureTest.java
index bf47ad01ee..55ccea1f6b 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/FailureTest.java
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/FailureTest.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/Host.java b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/Host.java
index a816805041..1b4b5bd970 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/Host.java
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/Host.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/LeaderLocatorTest.java b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/LeaderLocatorTest.java
index 7d387c09c2..f888a48296 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/LeaderLocatorTest.java
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/LeaderLocatorTest.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/StreamTest.java b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/StreamTest.java
index b02057ba35..e4d06c9025 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/StreamTest.java
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/StreamTest.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java
index 03015a0c44..10b51e78d2 100644
--- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java
+++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_stream/test/rabbit_stream_manager_SUITE.erl b/deps/rabbitmq_stream/test/rabbit_stream_manager_SUITE.erl
new file mode 100644
index 0000000000..529d78220b
--- /dev/null
+++ b/deps/rabbitmq_stream/test/rabbit_stream_manager_SUITE.erl
@@ -0,0 +1,180 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module(rabbit_stream_manager_SUITE).
+
+-include_lib("eunit/include/eunit.hrl").
+-include_lib("common_test/include/ct.hrl").
+
+-compile(export_all).
+
+all() ->
+ [{group, non_parallel_tests}].
+
+groups() ->
+ [{non_parallel_tests, [], [manage_super_stream, lookup_leader]}].
+
+%% -------------------------------------------------------------------
+%% Testsuite setup/teardown.
+%% -------------------------------------------------------------------
+
+init_per_suite(Config) ->
+ case rabbit_ct_helpers:is_mixed_versions() of
+ true ->
+ {skip, "mixed version clusters are not supported"};
+ _ ->
+ rabbit_ct_helpers:log_environment(),
+ Config
+ end.
+
+end_per_suite(Config) ->
+ Config.
+
+init_per_group(_, Config) ->
+ Config1 =
+ rabbit_ct_helpers:set_config(Config, [{rmq_nodes_clustered, false}]),
+ Config2 =
+ rabbit_ct_helpers:set_config(Config1,
+ {rabbitmq_ct_tls_verify, verify_none}),
+ Config3 =
+ rabbit_ct_helpers:set_config(Config2, {rabbitmq_stream, verify_none}),
+ rabbit_ct_helpers:run_setup_steps(Config3,
+ [fun(StepConfig) ->
+ rabbit_ct_helpers:merge_app_env(StepConfig,
+ {rabbit,
+ [{core_metrics_gc_interval,
+ 1000}]})
+ end,
+ fun(StepConfig) ->
+ rabbit_ct_helpers:merge_app_env(StepConfig,
+ {rabbitmq_stream,
+ [{connection_negotiation_step_timeout,
+ 500}]})
+ end]
+ ++ rabbit_ct_broker_helpers:setup_steps()).
+
+end_per_group(_, Config) ->
+ rabbit_ct_helpers:run_steps(Config,
+ rabbit_ct_broker_helpers:teardown_steps()).
+
+init_per_testcase(Testcase, Config) ->
+ rabbit_ct_helpers:testcase_started(Config, Testcase).
+
+end_per_testcase(Testcase, Config) ->
+ rabbit_ct_helpers:testcase_finished(Config, Testcase).
+
+%% -------------------------------------------------------------------
+%% Testcases.
+%% -------------------------------------------------------------------
+
+lookup_leader(Config) ->
+ Stream = <<"stream_manager_lookup_leader_stream">>,
+ ?assertMatch({ok, _}, create_stream(Config, Stream)),
+
+ {ok, Pid} = lookup_leader(Config, Stream),
+ ?assert(is_pid(Pid)),
+
+ ?assertEqual({error, not_found}, lookup_leader(Config, <<"foo">>)),
+
+ ?assertEqual({ok, deleted}, delete_stream(Config, Stream)).
+
+manage_super_stream(Config) ->
+ % create super stream
+ ?assertEqual(ok,
+ create_super_stream(Config,
+ <<"invoices">>,
+ [<<"invoices-0">>, <<"invoices-1">>,
+ <<"invoices-2">>],
+ [<<"0">>, <<"1">>, <<"2">>])),
+ % get the correct partitions
+ ?assertEqual({ok,
+ [<<"invoices-0">>, <<"invoices-1">>, <<"invoices-2">>]},
+ partitions(Config, <<"invoices">>)),
+
+ [?assertEqual({ok, [Partition]},
+ route(Config, RoutingKey, <<"invoices">>))
+ || {Partition, RoutingKey}
+ <- [{<<"invoices-0">>, <<"0">>}, {<<"invoices-1">>, <<"1">>},
+ {<<"invoices-2">>, <<"2">>}]],
+
+ % get an error if trying to re-create it
+ ?assertMatch({error, _},
+ create_super_stream(Config,
+ <<"invoices">>,
+ [<<"invoices-0">>, <<"invoices-1">>,
+ <<"invoices-2">>],
+ [<<"0">>, <<"1">>, <<"2">>])),
+
+ % can delete it
+ ?assertEqual(ok, delete_super_stream(Config, <<"invoices">>)),
+
+ % create a stream with the same name as a potential partition
+ ?assertMatch({ok, _}, create_stream(Config, <<"invoices-1">>)),
+
+ % cannot create the super stream because a partition already exists
+ ?assertMatch({error, _},
+ create_super_stream(Config,
+ <<"invoices">>,
+ [<<"invoices-0">>, <<"invoices-1">>,
+ <<"invoices-2">>],
+ [<<"0">>, <<"1">>, <<"2">>])),
+
+ ok.
+
+create_super_stream(Config, Name, Partitions, RKs) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ create_super_stream,
+ [<<"/">>,
+ Name,
+ Partitions,
+ #{},
+ RKs,
+ <<"guest">>]).
+
+delete_super_stream(Config, Name) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ delete_super_stream,
+ [<<"/">>, Name, <<"guest">>]).
+
+create_stream(Config, Name) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ create,
+ [<<"/">>, Name, [], <<"guest">>]).
+
+delete_stream(Config, Name) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ delete,
+ [<<"/">>, Name, <<"guest">>]).
+
+lookup_leader(Config, Name) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ lookup_leader,
+ [<<"/">>, Name]).
+
+partitions(Config, Name) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ partitions,
+ [<<"/">>, Name]).
+
+route(Config, RoutingKey, SuperStream) ->
+ rabbit_ct_broker_helpers:rpc(Config,
+ 0,
+ rabbit_stream_manager,
+ route,
+ [RoutingKey, <<"/">>, SuperStream]).
diff --git a/deps/rabbitmq_stream_common/README.adoc b/deps/rabbitmq_stream_common/README.adoc
index 4260d12d44..96fe3d9b01 100644
--- a/deps/rabbitmq_stream_common/README.adoc
+++ b/deps/rabbitmq_stream_common/README.adoc
@@ -20,4 +20,4 @@ Released under the link:LICENSE-MPL-RabbitMQ[MPL 2.0].
== Copyright
-(c) 2020-2021 VMware, Inc. or its affiliates. \ No newline at end of file
+(c) 2020-2022 VMware, Inc. or its affiliates. \ No newline at end of file
diff --git a/deps/rabbitmq_stream_management/README.adoc b/deps/rabbitmq_stream_management/README.adoc
index 54c691dd16..88f6258b70 100644
--- a/deps/rabbitmq_stream_management/README.adoc
+++ b/deps/rabbitmq_stream_management/README.adoc
@@ -20,4 +20,4 @@ Released under the link:LICENSE-MPL-RabbitMQ[MPL 2.0].
== Copyright
-(c) 2020-2021 VMware, Inc. or its affiliates. \ No newline at end of file
+(c) 2020-2022 VMware, Inc. or its affiliates. \ No newline at end of file
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_connection_consumers_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_connection_consumers_mgmt.erl
index ce771ce48c..f6f4e182db 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_connection_consumers_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_connection_consumers_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_connection_consumers_mgmt).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_connection_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_connection_mgmt.erl
index 5134c3aca6..344647a882 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_connection_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_connection_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_connection_mgmt).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_connection_publishers_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_connection_publishers_mgmt.erl
index 9f38290d02..53f7ed1609 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_connection_publishers_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_connection_publishers_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_connection_publishers_mgmt).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_connections_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_connections_mgmt.erl
index c1ecce0fb6..724336d0de 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_connections_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_connections_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_connections_mgmt).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_connections_vhost_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_connections_vhost_mgmt.erl
index b13c3c2481..e7b08ef262 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_connections_vhost_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_connections_vhost_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_connections_vhost_mgmt).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_consumers_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_consumers_mgmt.erl
index 465354e3f9..e3ad89f522 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_consumers_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_consumers_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_consumers_mgmt).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_management_utils.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_management_utils.erl
index 570bc84dee..0cd504202e 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_management_utils.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_management_utils.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_management_utils).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_mgmt_db.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_mgmt_db.erl
index 64f687a278..b895c538e3 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_mgmt_db.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_mgmt_db.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_mgmt_db).
diff --git a/deps/rabbitmq_stream_management/src/rabbit_stream_publishers_mgmt.erl b/deps/rabbitmq_stream_management/src/rabbit_stream_publishers_mgmt.erl
index ffcb57956f..ae1eba1c5b 100644
--- a/deps/rabbitmq_stream_management/src/rabbit_stream_publishers_mgmt.erl
+++ b/deps/rabbitmq_stream_management/src/rabbit_stream_publishers_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_stream_publishers_mgmt).
diff --git a/deps/rabbitmq_stream_management/test/http_SUITE.erl b/deps/rabbitmq_stream_management/test/http_SUITE.erl
index 83f288c0c6..50d0bbe0f3 100644
--- a/deps/rabbitmq_stream_management/test/http_SUITE.erl
+++ b/deps/rabbitmq_stream_management/test/http_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(http_SUITE).
diff --git a/deps/rabbitmq_stream_management/test/http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java b/deps/rabbitmq_stream_management/test/http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java
index 51a84f04f4..170a3a9984 100644
--- a/deps/rabbitmq_stream_management/test/http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java
+++ b/deps/rabbitmq_stream_management/test/http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java
@@ -11,7 +11,7 @@
// The Original Code is RabbitMQ.
//
// The Initial Developer of the Original Code is Pivotal Software, Inc.
-// Copyright (c) 2020-2021 VMware, Inc. or its affiliates. All rights reserved.
+// Copyright (c) 2020-2022 VMware, Inc. or its affiliates. All rights reserved.
//
package com.rabbitmq.stream;
diff --git a/deps/rabbitmq_top/src/rabbit_top_app.erl b/deps/rabbitmq_top/src/rabbit_top_app.erl
index 8cb2fc0e57..9964a6104a 100644
--- a/deps/rabbitmq_top/src/rabbit_top_app.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_app).
diff --git a/deps/rabbitmq_top/src/rabbit_top_extension.erl b/deps/rabbitmq_top/src/rabbit_top_extension.erl
index dadc423a92..8b8ff87626 100644
--- a/deps/rabbitmq_top/src/rabbit_top_extension.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_extension.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_extension).
diff --git a/deps/rabbitmq_top/src/rabbit_top_sup.erl b/deps/rabbitmq_top/src/rabbit_top_sup.erl
index f5d9d2847d..5fe322503c 100644
--- a/deps/rabbitmq_top/src/rabbit_top_sup.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_sup).
diff --git a/deps/rabbitmq_top/src/rabbit_top_util.erl b/deps/rabbitmq_top/src/rabbit_top_util.erl
index f5517cf70b..af6dc046b0 100644
--- a/deps/rabbitmq_top/src/rabbit_top_util.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_util).
diff --git a/deps/rabbitmq_top/src/rabbit_top_wm_ets_tables.erl b/deps/rabbitmq_top/src/rabbit_top_wm_ets_tables.erl
index 7ea279f310..666f178acc 100644
--- a/deps/rabbitmq_top/src/rabbit_top_wm_ets_tables.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_wm_ets_tables.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_wm_ets_tables).
diff --git a/deps/rabbitmq_top/src/rabbit_top_wm_process.erl b/deps/rabbitmq_top/src/rabbit_top_wm_process.erl
index c69dacfee8..01d5e6a80a 100644
--- a/deps/rabbitmq_top/src/rabbit_top_wm_process.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_wm_process.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_wm_process).
diff --git a/deps/rabbitmq_top/src/rabbit_top_wm_processes.erl b/deps/rabbitmq_top/src/rabbit_top_wm_processes.erl
index 67638a8c18..dca88a29d7 100644
--- a/deps/rabbitmq_top/src/rabbit_top_wm_processes.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_wm_processes.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_wm_processes).
diff --git a/deps/rabbitmq_top/src/rabbit_top_worker.erl b/deps/rabbitmq_top/src/rabbit_top_worker.erl
index e2ed3ef56b..c44b38ef33 100644
--- a/deps/rabbitmq_top/src/rabbit_top_worker.erl
+++ b/deps/rabbitmq_top/src/rabbit_top_worker.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_top_worker).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_app.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_app.erl
index 47517e5e0c..c07ac114c2 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_app.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_app).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_consumer.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_consumer.erl
index 7ebe4d0a7a..79ed743be4 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_consumer.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_consumer.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_consumer).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_consumer_sup.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_consumer_sup.erl
index 984bff0f14..7b77751b57 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_consumer_sup.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_consumer_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_consumer_sup).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_files.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_files.erl
index 882c802ed1..e21c9b9cfb 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_files.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_files.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_files).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_mgmt.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_mgmt.erl
index b16456213f..c439c04ae1 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_mgmt.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_mgmt.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_mgmt).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_sup.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_sup.erl
index df764c4257..65a8afeafe 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_sup.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_sup).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_traces.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_traces.erl
index deac0eeb06..6478cc1e0f 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_traces.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_traces.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_traces).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_util.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_util.erl
index 0f80019de9..4324b994b9 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_util.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_util).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_file.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_file.erl
index ed23c6900d..613b387c3f 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_file.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_file.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_wm_file).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_files.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_files.erl
index 6d87360934..b584c567a3 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_files.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_files.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_wm_files).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_trace.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_trace.erl
index f1af706ce4..73f23a0ae6 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_trace.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_trace.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_wm_trace).
diff --git a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_traces.erl b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_traces.erl
index 98a3c7698d..6fa1262827 100644
--- a/deps/rabbitmq_tracing/src/rabbit_tracing_wm_traces.erl
+++ b/deps/rabbitmq_tracing/src/rabbit_tracing_wm_traces.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_wm_traces).
diff --git a/deps/rabbitmq_tracing/test/rabbit_tracing_SUITE.erl b/deps/rabbitmq_tracing/test/rabbit_tracing_SUITE.erl
index 1696bd9ae5..34b440173a 100644
--- a/deps/rabbitmq_tracing/test/rabbit_tracing_SUITE.erl
+++ b/deps/rabbitmq_tracing/test/rabbit_tracing_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_tracing_SUITE).
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
index 26806af821..f4b14034af 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trust_store).
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store_app.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store_app.erl
index a5ca630f07..40d8ea7669 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store_app.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trust_store_app).
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store_certificate_provider.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store_certificate_provider.erl
index cb45f21a74..9f13adac8a 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store_certificate_provider.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store_certificate_provider.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trust_store_certificate_provider).
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store_file_provider.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store_file_provider.erl
index 0adad0005f..14ecf843cf 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store_file_provider.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store_file_provider.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trust_store_file_provider).
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl
index 6c0838b8b7..74130f077a 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trust_store_http_provider).
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store_sup.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store_sup.erl
index 2b8a975be3..ed74c57828 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store_sup.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_trust_store_sup).
diff --git a/deps/rabbitmq_trust_store/test/config_schema_SUITE.erl b/deps/rabbitmq_trust_store/test/config_schema_SUITE.erl
index 27271d43e3..a495b37789 100644
--- a/deps/rabbitmq_trust_store/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_trust_store/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_trust_store/test/system_SUITE.erl b/deps/rabbitmq_trust_store/test/system_SUITE.erl
index e1940b7859..d0e1fa9409 100644
--- a/deps/rabbitmq_trust_store/test/system_SUITE.erl
+++ b/deps/rabbitmq_trust_store/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_middleware.erl b/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_middleware.erl
index 836df9b03f..be4b600afb 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_middleware.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_middleware.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_cowboy_middleware).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_redirect.erl b/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_redirect.erl
index 3844aad072..ea4a3ad295 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_redirect.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_redirect.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_cowboy_redirect).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_stream_h.erl b/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_stream_h.erl
index b71baca1de..fb6bb95a3c 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_stream_h.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_cowboy_stream_h.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_cowboy_stream_h).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch.erl
index 0f86f4566d..5d3ab9b6af 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_app.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_app.erl
index ff0eff8686..d8f83f8223 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_app.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_app).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_listing_handler.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_listing_handler.erl
index 10cef26004..0080e2904a 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_listing_handler.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_listing_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_listing_handler).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_registry.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_registry.erl
index 2782369528..47f9a8bbb5 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_registry.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_registry.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_registry).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_sup.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_sup.erl
index 309cd8cd22..96b5e18f32 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_sup.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_sup).
diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_util.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_util.erl
index d15d3f6000..cf6fe24026 100644
--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_util.erl
+++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_util).
diff --git a/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_SUITE.erl b/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_SUITE.erl
index 115c0cfbac..3a3fe0fef7 100644
--- a/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_SUITE.erl
+++ b/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_SUITE).
diff --git a/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_unit_SUITE.erl b/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_unit_SUITE.erl
index ca0043acc9..17fabb840b 100644
--- a/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_unit_SUITE.erl
+++ b/deps/rabbitmq_web_dispatch/test/rabbit_web_dispatch_unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_dispatch_unit_SUITE).
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_app.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_app.erl
index ba6c8919b6..1c2c1a7d0e 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_app.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_app).
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_info.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_info.erl
index 7a8dccac57..853759afc0 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_info.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_info.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_connection_info).
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_sup.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_sup.erl
index 53ed3b9a09..51e8a41c02 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_sup.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_connection_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_connection_sup).
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl
index af568777ec..cf1da98911 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_handler).
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_middleware.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_middleware.erl
index 840f45265a..3d887f0188 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_middleware.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_middleware.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_middleware).
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_stream_handler.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_stream_handler.erl
index 3a3d343600..b57dbd7e74 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_stream_handler.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_stream_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_stream_handler).
diff --git a/deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl b/deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl
index 410239d493..0a1476216d 100644
--- a/deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl b/deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl
index 423e12cdf0..cd7540d8a3 100644
--- a/deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(proxy_protocol_SUITE).
diff --git a/deps/rabbitmq_web_mqtt/test/src/rabbit_ws_test_util.erl b/deps/rabbitmq_web_mqtt/test/src/rabbit_ws_test_util.erl
index f72d6fab69..7bcf99dc39 100644
--- a/deps/rabbitmq_web_mqtt/test/src/rabbit_ws_test_util.erl
+++ b/deps/rabbitmq_web_mqtt/test/src/rabbit_ws_test_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ws_test_util).
diff --git a/deps/rabbitmq_web_mqtt/test/src/rfc6455_client.erl b/deps/rabbitmq_web_mqtt/test/src/rfc6455_client.erl
index ce486dca38..433d80c5de 100644
--- a/deps/rabbitmq_web_mqtt/test/src/rfc6455_client.erl
+++ b/deps/rabbitmq_web_mqtt/test/src/rfc6455_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rfc6455_client).
diff --git a/deps/rabbitmq_web_mqtt/test/system_SUITE.erl b/deps/rabbitmq_web_mqtt/test/system_SUITE.erl
index d4fe382b7a..f835d6c317 100644
--- a/deps/rabbitmq_web_mqtt/test/system_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/system_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(system_SUITE).
diff --git a/deps/rabbitmq_web_mqtt_examples/src/rabbit_web_mqtt_examples_app.erl b/deps/rabbitmq_web_mqtt_examples/src/rabbit_web_mqtt_examples_app.erl
index 3f6930416a..3abbdba0f0 100644
--- a/deps/rabbitmq_web_mqtt_examples/src/rabbit_web_mqtt_examples_app.erl
+++ b/deps/rabbitmq_web_mqtt_examples/src/rabbit_web_mqtt_examples_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_mqtt_examples_app).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_app.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_app.erl
index ee5324acbd..0e1aa68a29 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_app.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_app).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl
index 771653fa84..6de898b247 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_connection_sup).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_handler.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_handler.erl
index ebec3da671..a3bf62200a 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_handler.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_handler).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_internal_event_handler.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_internal_event_handler.erl
index 1d0e274cd2..f8ff5d69fd 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_internal_event_handler.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_internal_event_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_internal_event_handler).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_listener.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_listener.erl
index fd4141c46b..afa931c483 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_listener.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_listener.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_listener).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_middleware.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_middleware.erl
index 2fcdee2f2a..119205e21c 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_middleware.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_middleware.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_middleware).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_stream_handler.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_stream_handler.erl
index fbaad3f4dc..13c3df27d5 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_stream_handler.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_stream_handler.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_stream_handler).
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_sup.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_sup.erl
index e4468728d0..e900ccaf2e 100644
--- a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_sup.erl
+++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_sup.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_sup).
diff --git a/deps/rabbitmq_web_stomp/test/amqp_stomp_SUITE.erl b/deps/rabbitmq_web_stomp/test/amqp_stomp_SUITE.erl
index 4d0bf6fecf..6d7320ba2c 100644
--- a/deps/rabbitmq_web_stomp/test/amqp_stomp_SUITE.erl
+++ b/deps/rabbitmq_web_stomp/test/amqp_stomp_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(amqp_stomp_SUITE).
diff --git a/deps/rabbitmq_web_stomp/test/config_schema_SUITE.erl b/deps/rabbitmq_web_stomp/test/config_schema_SUITE.erl
index 6a6bec7a1a..6872099a96 100644
--- a/deps/rabbitmq_web_stomp/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_web_stomp/test/config_schema_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(config_schema_SUITE).
diff --git a/deps/rabbitmq_web_stomp/test/cowboy_websocket_SUITE.erl b/deps/rabbitmq_web_stomp/test/cowboy_websocket_SUITE.erl
index 3d54ccf58a..2844bd897c 100644
--- a/deps/rabbitmq_web_stomp/test/cowboy_websocket_SUITE.erl
+++ b/deps/rabbitmq_web_stomp/test/cowboy_websocket_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(cowboy_websocket_SUITE).
diff --git a/deps/rabbitmq_web_stomp/test/proxy_protocol_SUITE.erl b/deps/rabbitmq_web_stomp/test/proxy_protocol_SUITE.erl
index 13b0aa5b0a..c140751b6e 100644
--- a/deps/rabbitmq_web_stomp/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbitmq_web_stomp/test/proxy_protocol_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(proxy_protocol_SUITE).
diff --git a/deps/rabbitmq_web_stomp/test/raw_websocket_SUITE.erl b/deps/rabbitmq_web_stomp/test/raw_websocket_SUITE.erl
index bc0f15db74..0facdd0985 100644
--- a/deps/rabbitmq_web_stomp/test/raw_websocket_SUITE.erl
+++ b/deps/rabbitmq_web_stomp/test/raw_websocket_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(raw_websocket_SUITE).
diff --git a/deps/rabbitmq_web_stomp/test/src/rabbit_ws_test_util.erl b/deps/rabbitmq_web_stomp/test/src/rabbit_ws_test_util.erl
index 9561948ece..1c553fd179 100644
--- a/deps/rabbitmq_web_stomp/test/src/rabbit_ws_test_util.erl
+++ b/deps/rabbitmq_web_stomp/test/src/rabbit_ws_test_util.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_ws_test_util).
diff --git a/deps/rabbitmq_web_stomp/test/src/rfc6455_client.erl b/deps/rabbitmq_web_stomp/test/src/rfc6455_client.erl
index 8d6e43b2d3..50ec1f2fa2 100644
--- a/deps/rabbitmq_web_stomp/test/src/rfc6455_client.erl
+++ b/deps/rabbitmq_web_stomp/test/src/rfc6455_client.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rfc6455_client).
diff --git a/deps/rabbitmq_web_stomp/test/src/stomp.erl b/deps/rabbitmq_web_stomp/test/src/stomp.erl
index c9cef3f23e..1428965df2 100644
--- a/deps/rabbitmq_web_stomp/test/src/stomp.erl
+++ b/deps/rabbitmq_web_stomp/test/src/stomp.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(stomp).
diff --git a/deps/rabbitmq_web_stomp/test/unit_SUITE.erl b/deps/rabbitmq_web_stomp/test/unit_SUITE.erl
index 7902f1ce9a..65d6dd7c84 100644
--- a/deps/rabbitmq_web_stomp/test/unit_SUITE.erl
+++ b/deps/rabbitmq_web_stomp/test/unit_SUITE.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(unit_SUITE).
diff --git a/deps/rabbitmq_web_stomp_examples/src/rabbit_web_stomp_examples_app.erl b/deps/rabbitmq_web_stomp_examples/src/rabbit_web_stomp_examples_app.erl
index a08473cc6b..8fff8c1f5b 100644
--- a/deps/rabbitmq_web_stomp_examples/src/rabbit_web_stomp_examples_app.erl
+++ b/deps/rabbitmq_web_stomp_examples/src/rabbit_web_stomp_examples_app.erl
@@ -2,7 +2,7 @@
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
-%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
+%% Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
-module(rabbit_web_stomp_examples_app).