Skip to content

Support durable exchanges in mod_event_pusher_rabbit - #4582

Merged
mdbrnowski merged 6 commits into
masterfrom
rabbit-durable-exchange
Nov 28, 2025
Merged

mdbrnowski merged 6 commits into
masterfrom
rabbit-durable-exchange

Conversation

@chrzaszcz

@chrzaszcz chrzaszcz commented Nov 27, 2025 •

Copy link
Copy Markdown
Member

Thanks to @niecore for the initial contribution.

Apart from the new option, there are following changes in this PR:

  • Config parser tests with some improvements.
  • Update of RabbitMQ server and the client libraries.
  • Usage of the HTTP API to list exchanges and queues.
  • Documentation. It is a bit repetitive, and we could reorganize the sections about exchanges in the future.

See the commit messages for details.

@chrzaszcz
chrzaszcz force-pushed the rabbit-durable-exchange branch from f83656d to ba81703 Compare November 27, 2025 17:08
@mongoose-im

This comment was marked as outdated.

@mongoose-im

This comment was marked as outdated.

@mongoose-im

This comment was marked as outdated.

@codecov

codecov Bot commented Nov 27, 2025 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.66%. Comparing base (8016f27) to head (f159c2f).
⚠️ Report is 20 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4582      +/-   ##
==========================================
- Coverage   86.02%   85.66%   -0.36%     
==========================================
  Files         565      565              
  Lines       33905    33905              
==========================================
- Hits        29167    29046     -121     
- Misses       4738     4859     +121     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mongoose-im

This comment was marked as outdated.

@chrzaszcz
chrzaszcz force-pushed the rabbit-durable-exchange branch from 8924b8b to 83bf228 Compare November 28, 2025 09:05
Also:
  - Set some custom options in modules.toml, because the options were
    all defaults.
  - Use config/2 instead of repeating defaults.
    This could be used in many more places, but I wanted to limit the
    extent of the changes.
The API is needed to get detailed information e.g. about exchanges.
The goal is to test both durable and non-durable ones.
Exchange verification required use of the HTTP API.

Also:
- Replace wait_for timeout with defaults,
  because they are very similar,
  and actually the timeout was incorrectly divided by 1000.
- Wait for the deletion of the temporary queue.
  Apparently, this is async and can fail on CI.
@chrzaszcz
chrzaszcz force-pushed the rabbit-durable-exchange branch from 83bf228 to f159c2f Compare November 28, 2025 09:11
@mongoose-im

This comment was marked as outdated.

@mongoose-im

mongoose-im commented Nov 28, 2025 •

Copy link
Copy Markdown
Collaborator

dynamic_domains_mssql_mnesia_28 / odbc_mssql_mnesia / f159c2f
Reports root


elasticsearch_and_cassandra_28 / elasticsearch_and_cassandra_mnesia / f159c2f
Reports root/ big
OK: 683 / Failed: 0 / User-skipped: 72 / Auto-skipped: 0

mam_SUITE:cassandra_muc_all:muc06:muc_message_with_stanzaid
{failed,
  {mam_SUITE,end_per_testcase,
    {'EXIT',
      {{room_archive_size,0,[{times,200,1}],undefined},
       [{wait_helper,do_wait_until,1,
          [{file,
             "/home/circleci/project/big_tests/_build/default/lib/wait_helper/src/wait_helper.erl"},
           {line,127}]},
        {mam_helper,wait_for_room_archive_size,3,
          [{file,
             "/home/circleci/project/big_tests/tests/mam_helper.erl"},
           {line,779}]},
        {mam_helper,clean_room_archive,1,
          [{file,
             "/home/circleci/project/big_tests/tests/mam_helper.erl"},
           {line,723}]},
        {mam_helper,destroy_room,1,
          [{file,
             "/home/circleci/project/big_tests/tests/mam_helper.erl"},
           {line,716}]},
        {mam_SUITE,end_per_testcase,2,
          [{file,
             "/home/circleci/project/big_tests/tests/mam_SUITE.erl"},
           {line,992}]},
        {test_server,do_end_per_testcase,4,
          [{file,"test_server.erl"},{line,1640}]},
        {test_server,run_test_case_eval1,6,
          [{file,"test_server.erl"},{line,1348}]},
        {test_server,run_test_case_eval,9,
          [{file,"test_server.erl"},{line,1237}]}]}}}}

Report log


small_tests_28 / small_tests / f159c2f
Reports root / small


small_tests_27 / small_tests / f159c2f
Reports root / small


small_tests_28_arm64 / small_tests / f159c2f
Reports root / small


ldap_mnesia_27 / ldap_mnesia / f159c2f
Reports root/ big
OK: 2351 / Failed: 0 / User-skipped: 1359 / Auto-skipped: 0


ldap_mnesia_28 / ldap_mnesia / f159c2f
Reports root/ big
OK: 2351 / Failed: 0 / User-skipped: 1359 / Auto-skipped: 0


dynamic_domains_pgsql_mnesia_27 / pgsql_mnesia / f159c2f
Reports root/ big
OK: 5214 / Failed: 0 / User-skipped: 122 / Auto-skipped: 0


dynamic_domains_mysql_redis_28 / mysql_redis / f159c2f
Reports root/ big
OK: 5179 / Failed: 0 / User-skipped: 157 / Auto-skipped: 0


internal_mnesia_28 / internal_mnesia / f159c2f
Reports root/ big
OK: 2492 / Failed: 0 / User-skipped: 1218 / Auto-skipped: 0


dynamic_domains_pgsql_mnesia_28 / pgsql_mnesia / f159c2f
Reports root/ big
OK: 5214 / Failed: 0 / User-skipped: 122 / Auto-skipped: 0


pgsql_mnesia_27 / pgsql_mnesia / f159c2f
Reports root/ big
OK: 5607 / Failed: 0 / User-skipped: 135 / Auto-skipped: 0


mysql_redis_28 / mysql_redis / f159c2f
Reports root/ big
OK: 5593 / Failed: 0 / User-skipped: 149 / Auto-skipped: 0


cockroachdb_cets_28 / cockroachdb_cets / f159c2f
Reports root/ big
OK: 5312 / Failed: 4 / User-skipped: 195 / Auto-skipped: 0

pubsub_SUITE:dag+last_item_cache:send_last_published_item_no_items_test
{error,
  {timeout_when_waiting_for_stanza,
    [{escalus_client,wait_for_stanza,
       [{client,
          <<"alice_send_last_published_item_no_items_test_3671@localhost/res1">>,
          escalus_tcp,<0.115300.0>,
          [{event_manager,<0.115281.0>},
           {server,<<"localhost">>},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3671">>},
           {resource,<<"res1">>}],
          [{event_client,
             [{event_manager,<0.115281.0>},
            {server,<<"localhost">>},
            {username,
              <<"alicE_send_last_published_item_no_items_test_3671">>},
            {resource,<<"res1">>}]},
           {resource,<<"res1">>},
           {username,
             <<"alice_send_last_published_item_no_items_test_3671">>},
           {server,<<"localhost">>},
           {host,<<"localhost">>},
           {port,5222},
           {auth,fun escalus_auth:auth_plain/2},
           {wspath,undefined},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3671">>},
           {server,<<"localhost">>},
           {password,<<"matygrysa">>},
           {stream_id,<<"78e4ab309bcb9908">>}]},
        5000],
       [{file,
          "/home/circleci/project/big_tests/_build/default/lib/escalus/src/escalus_client.erl"},
        {line,136}]},
     {pubsub_tools,receive_response,3,
       [{file,"/home/circleci/project/big_tests/tests/pubsub_tools.erl"},
        {line,444}]},
     {pubsub_tools,receive_and_c...

Report log

pubsub_SUITE:dag+last_item_cache:send_last_published_item_no_items_test
{error,
  {timeout_when_waiting_for_stanza,
    [{escalus_client,wait_for_stanza,
       [{client,
          <<"alice_send_last_published_item_no_items_test_3674@localhost/res1">>,
          escalus_tcp,<0.115378.0>,
          [{event_manager,<0.115358.0>},
           {server,<<"localhost">>},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3674">>},
           {resource,<<"res1">>}],
          [{event_client,
             [{event_manager,<0.115358.0>},
            {server,<<"localhost">>},
            {username,
              <<"alicE_send_last_published_item_no_items_test_3674">>},
            {resource,<<"res1">>}]},
           {resource,<<"res1">>},
           {username,
             <<"alice_send_last_published_item_no_items_test_3674">>},
           {server,<<"localhost">>},
           {host,<<"localhost">>},
           {port,5222},
           {auth,fun escalus_auth:auth_plain/2},
           {wspath,undefined},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3674">>},
           {server,<<"localhost">>},
           {password,<<"matygrysa">>},
           {stream_id,<<"31c60e32803fdddb">>}]},
        5000],
       [{file,
          "/home/circleci/project/big_tests/_build/default/lib/escalus/src/escalus_client.erl"},
        {line,136}]},
     {pubsub_tools,receive_response,3,
       [{file,"/home/circleci/project/big_tests/tests/pubsub_tools.erl"},
        {line,444}]},
     {pubsub_tools,receive_and_c...

Report log

pubsub_SUITE:dag+last_item_cache:send_last_published_item_no_items_test
{error,
  {timeout_when_waiting_for_stanza,
    [{escalus_client,wait_for_stanza,
       [{client,
          <<"alice_send_last_published_item_no_items_test_3679@localhost/res1">>,
          escalus_tcp,<0.115456.0>,
          [{event_manager,<0.115453.0>},
           {server,<<"localhost">>},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3679">>},
           {resource,<<"res1">>}],
          [{event_client,
             [{event_manager,<0.115453.0>},
            {server,<<"localhost">>},
            {username,
              <<"alicE_send_last_published_item_no_items_test_3679">>},
            {resource,<<"res1">>}]},
           {resource,<<"res1">>},
           {username,
             <<"alice_send_last_published_item_no_items_test_3679">>},
           {server,<<"localhost">>},
           {host,<<"localhost">>},
           {port,5222},
           {auth,fun escalus_auth:auth_plain/2},
           {wspath,undefined},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3679">>},
           {server,<<"localhost">>},
           {password,<<"matygrysa">>},
           {stream_id,<<"254ab679b36fd6c4">>}]},
        5000],
       [{file,
          "/home/circleci/project/big_tests/_build/default/lib/escalus/src/escalus_client.erl"},
        {line,136}]},
     {pubsub_tools,receive_response,3,
       [{file,"/home/circleci/project/big_tests/tests/pubsub_tools.erl"},
        {line,444}]},
     {pubsub_tools,receive_and_c...

Report log

pubsub_SUITE:dag+last_item_cache:send_last_published_item_no_items_test
{error,
  {timeout_when_waiting_for_stanza,
    [{escalus_client,wait_for_stanza,
       [{client,
          <<"alice_send_last_published_item_no_items_test_3681@localhost/res1">>,
          escalus_tcp,<0.115532.0>,
          [{event_manager,<0.115521.0>},
           {server,<<"localhost">>},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3681">>},
           {resource,<<"res1">>}],
          [{event_client,
             [{event_manager,<0.115521.0>},
            {server,<<"localhost">>},
            {username,
              <<"alicE_send_last_published_item_no_items_test_3681">>},
            {resource,<<"res1">>}]},
           {resource,<<"res1">>},
           {username,
             <<"alice_send_last_published_item_no_items_test_3681">>},
           {server,<<"localhost">>},
           {host,<<"localhost">>},
           {port,5222},
           {auth,fun escalus_auth:auth_plain/2},
           {wspath,undefined},
           {username,
             <<"alicE_send_last_published_item_no_items_test_3681">>},
           {server,<<"localhost">>},
           {password,<<"matygrysa">>},
           {stream_id,<<"37b53f3ac21c38b0">>}]},
        5000],
       [{file,
          "/home/circleci/project/big_tests/_build/default/lib/escalus/src/escalus_client.erl"},
        {line,136}]},
     {pubsub_tools,receive_response,3,
       [{file,"/home/circleci/project/big_tests/tests/pubsub_tools.erl"},
        {line,444}]},
     {pubsub_tools,receive_and_c...

Report log


pgsql_mnesia_28 / pgsql_mnesia / f159c2f
Reports root/ big
OK: 5607 / Failed: 0 / User-skipped: 135 / Auto-skipped: 0


mssql_mnesia_28 / odbc_mssql_mnesia / f159c2f
Reports root/ big
OK: 5573 / Failed: 0 / User-skipped: 139 / Auto-skipped: 30

service_mongoose_system_metrics_SUITE:init_per_suite
{fail,[{validate_node_failed,mongooseim_not_running,reg1@localhost}]}

Report log

shutdown_SUITE:init_per_suite
{fail,[{validate_node_failed,mongooseim_not_running,reg1@localhost}]}

Report log

system_probes_SUITE:init_per_suite
{fail,[{validate_node_failed,mongooseim_not_running,reg1@localhost}]}

Report log


mssql_mnesia_28 / odbc_mssql_mnesia / f159c2f
Reports root/ big
OK: 132 / Failed: 0 / User-skipped: 0 / Auto-skipped: 0


elasticsearch_and_cassandra_28 / elasticsearch_and_cassandra_mnesia / f159c2f
Reports root/ big
OK: 634 / Failed: 0 / User-skipped: 56 / Auto-skipped: 0


dynamic_domains_mssql_mnesia_28 / odbc_mssql_mnesia / f159c2f
Reports root/ big
OK: 5209 / Failed: 0 / User-skipped: 127 / Auto-skipped: 0

@chrzaszcz
chrzaszcz marked this pull request as ready for review November 28, 2025 10:18

@mdbrnowski mdbrnowski left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@mdbrnowski
mdbrnowski merged commit 1bb6b68 into master Nov 28, 2025
4 checks passed
@mdbrnowski
mdbrnowski deleted the rabbit-durable-exchange branch November 28, 2025 11:54
@pawlooss1 pawlooss1 added this to the 6.5.0 milestone Dec 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants