{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":924551,"defaultBranch":"main","name":"rabbitmq-server","ownerLogin":"rabbitmq","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-09-20T10:29:16.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/96669?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1717298932.0","currentOid":""},"activityList":{"items":[{"before":"1dae7d6a807f8926067d5ecc8468bb0d427c9de7","after":"ae9ce6c9fa30ab2fccac9e47c4ee5ff325a530a4","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-03T11:30:24.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Introduce outbound RabbitMQ internal AMQP flow control\n\n ## What?\n\nIntroduce RabbitMQ internal flow control for messages sent to AMQP\nclients.\n\nPrior this PR, when an AMQP client granted a large amount of link\ncredit (e.g. 100k) to the sending queue, the sending queue sent\nthat amount of messages to the session process no matter what.\nThis becomes problematic for memory usage when the session process\ncannot send out messages fast enough to the AMQP client, especially if\n1. The writer proc cannot send fast enough. This can happen when\nthe AMQP client does not receive fast enough and causes TCP\nback-pressure to the server. Or\n2. The server session proc is limited by remote-incoming-window.\n\nBoth scenarios are now added as test cases.\nTests\n* tcp_back_pressure_rabbitmq_internal_flow_quorum_queue\n* tcp_back_pressure_rabbitmq_internal_flow_classic_queue\ncover scenario 1.\n\nTests\n* incoming_window_closed_rabbitmq_internal_flow_quorum_queue\n* incoming_window_closed_rabbitmq_internal_flow_classic_queue\ncover scenario 2.\n\nThis PR sends messages from queues to AMQP clients in a more controlled\nmanner.\n\nTo illustrate:\n```\nmake run-broker PLUGINS=\"rabbitmq_management\" RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=\"+S 4\"\nobserver_cli:start()\nmq\n```\nwhere `mq` sorts by message queue length.\nCreate a stream:\n```\ndeps/rabbitmq_management/bin/rabbitmqadmin declare queue name=s1 queue_type=stream durable=true\n```\nNext, send and receive from the Stream via AMQP.\nGrant a large number of link credit to the sending stream:\n```\ndocker run -it --rm --add-host host.docker.internal:host-gateway ssorj/quiver:latest\nbash-5.1# quiver --version\nquiver 0.4.0-SNAPSHOT\nbash-5.1# quiver //host.docker.internal//queue/s1 --durable -d 30s --credit 100000\n```\n\n**Before** to this PR:\n```\nRESULTS\n\nCount ............................................... 100,696 messages\nDuration ............................................... 30.0 seconds\nSender rate ......................................... 120,422 messages/s\nReceiver rate ......................................... 3,363 messages/s\nEnd-to-end rate ....................................... 3,359 messages/s\n```\nWe observe that all 100k link credit worth of messages are buffered in the\nwriter proc's mailbox:\n```\n|No | Pid | MsgQueue |Name or Initial Call | Memory | Reductions |Current Function |\n|1 |<0.845.0> |100001 |rabbit_amqp_writer:init/1 | 126.0734 MB| 466633491 |prim_inet:send/5 |\n```\n\n**After** to this PR:\n```\nRESULTS\n\nCount ............................................. 2,973,440 messages\nDuration ............................................... 30.0 seconds\nSender rate ......................................... 123,322 messages/s\nReceiver rate ........................................ 99,250 messages/s\nEnd-to-end rate ...................................... 99,148 messages/s\n```\nWe observe that the message queue lengths of both writer and session\nprocs are low.\n\n ## How?\n\nOur goal is to have queues send out messages in a controlled manner\nwithout overloading RabbitMQ itself.\nWe want RabbitMQ internal flow control between:\n```\nAMQP writer proc <--- session proc <--- queue proc\n```\nA similar concept exists for classic queues sending via AMQP 0.9.1.\nWe want an approach that applies to AMQP and works generic for all queue\ntypes.\n\nFor the interaction between AMQP writer proc and session proc we use a\nsimple credit based approach reusing module `credit_flow`.\n\nFor the interaction between session proc and queue proc, the following options\nexist:\n\n ### Option 1\nThe session process provides expliclity feedback to the queue after it\nhas sent N messages.\nThis approach is implemented in\nhttps://github.com/ansd/rabbitmq-server/tree/amqp-flow-control-poc-1\nand works well.\nA new `rabbit_queue_type:sent/4` API was added which lets the queue proc know\nthat it can send further messages to the session proc.\n\nPros:\n* Will work equally well for AMQP 0.9.1, e.g. when quorum queues send messages\n in auto ack mode to AMQP 0.9.1 clients.\n* Simple for the session proc\n\nCons:\n* Sligthly added complexity in every queue type implementation\n* Multiple Ra commands (settle, credit, sent) to decide when a quorum\n queue sends more messages.\n\n ### Option 2\nA dual link approach where two AMQP links exists between\n```\nAMQP client <---link--> session proc <---link---> queue proc\n```\nWhen the client grants a large amount of credits, the session proc will\ntop up credits to the queue proc periodically in smaller batches.\n\nPros:\n* No queue type modifications required.\n* Re-uses AMQP link flow control\n\nCons:\n* Significant added complexity in the session proc. A client can\n dynamically decrease or increase credits and dynamically change the drain\n mode while the session tops up credit to the queue.\n\n ### Option 3\nCredit is a 32 bit unsigned integer.\nThe spec mandates that the receiver independently chooses a credit.\nNothing in the spec prevents the receiver to choose a credit of 1 billion.\nHowever the credit value is merely a **maximum**:\n> The link-credit variable defines the current maximum legal amount that the delivery-count can be increased by.\n\nTherefore, the server is not required to send all available messages to this\nreceiver.\n\nFor delivery-count:\n> Only the sender MAY independently modify this field.\n\n\"independently\" could be interpreted as the sender could add to the delivery-count\nirrespective of what the client chose for drain and link-credit.\n\nOption 3: The queue proc could at credit time already consume credit\nand advance the delivery-count if credit is too large before checking out any messages.\nFor example if credit is 100k, but the queue only wants to send 1k, the queue could\nconsume 99k of credits and advance the delivery-count, and subsequently send maximum 1k messages.\nIf the queue advanced the delivery-count, RabbitMQ must send a FLOW to the receiver,\notherwise the receiver wouldn’t know that it ran out of link-credit.\n\nPros:\n* Very simple\n\nCons:\n* Possibly unexpected behaviour for receiving AMQP clients\n* Possibly poor end-to-end throughput in auto-ack mode because the queue\n would send a batch of messages followed by a FLOW containing the advanced\n delivery-count. Only therafter the client will learn that it ran out of\n credits and top-up again. This feels like synchronously pulling a batch\n of messages. In contrast, option 2 sends out more messages as soon as\n the previous messages left RabbitMQ without requiring again a credit top\n up from the receiver.\n* drain mode with large credits requires the queue to send all available\n messages and only thereafter advance the delivery-count. Therefore,\n drain mode breaks option 3 somewhat.\n\n ### Option 4\nSession proc drops message payload when its outgoing-pending queue gets\ntoo large and re-reads payloads from the queue once the message can be\nsent (see `get_checked_out` Ra command for quorum queues).\n\nCons:\n* Would need to be implemented for every queue type, especially classic queues\n* Doesn't limit the amount of message metadata in the session proc's\n outgoing-pending queue\n\n ### Decision: Option 2\nThis commit implements option 2 to avoid any queue type modification.\nAt most one credit request is in-flight between session process and\nqueue process for a given queue consumer.\nIf the AMQP client sends another FLOW in between, the session proc\nstashes the FLOW until it processes the previous credit reply.\n\nA delivery is only sent from the outgoing-pending queue if the\nsession proc is not blocked by\n1. writer proc, or\n2. remote-incoming-window\n\nThe credit reply is placed into the outgoing-pending queue.\nThis ensures that the session proc will only top up the next batch of\ncredits if sufficient messages were sent out to the writer proc.\n\nA future commit could additionally have each queue limit the number of\nunacked messages for a given AMQP consumer, or alternatively make use\nof session outgoing-window.","shortMessageHtmlLink":"Introduce outbound RabbitMQ internal AMQP flow control"}},{"before":"802fa50b35cc573f520d7ac923a5bf08cddf2abe","after":"1dae7d6a807f8926067d5ecc8468bb0d427c9de7","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-03T11:27:14.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Introduce outbound RabbitMQ internal AMQP flow control\n\n ## What?\n\nIntroduce RabbitMQ internal flow control for messages sent to AMQP\nclients.\n\nPrior this PR, when an AMQP client granted a large amount of link\ncredit (e.g. 100k) to the sending queue, the sending queue sent\nthat amount of messages to the session process no matter what.\nThis becomes problematic for memory usage when the session process\ncannot send out messages fast enough to the AMQP client, especially if\n1. The writer proc cannot send fast enough. This can happen when\nthe AMQP client does not receive fast enough and causes TCP\nback-pressure to the server. Or\n2. The server session proc is limited by remote-incoming-window.\n\nBoth scenarios are now added as test cases.\nTests\n* tcp_back_pressure_rabbitmq_internal_flow_quorum_queue\n* tcp_back_pressure_rabbitmq_internal_flow_classic_queue\ncover scenario 1.\n\nTests\n* incoming_window_closed_rabbitmq_internal_flow_quorum_queue\n* incoming_window_closed_rabbitmq_internal_flow_classic_queue\ncover scenario 2.\n\nThis PR sends messages from queues to AMQP clients in a more controlled\nmanner.\n\nTo illustrate:\n```\nmake run-broker PLUGINS=\"rabbitmq_management\" RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=\"+S 4\"\nobserver_cli:start()\nmq\n```\nwhere `mq` sorts by message queue length.\nCreate a stream:\n```\ndeps/rabbitmq_management/bin/rabbitmqadmin declare queue name=s1 queue_type=stream durable=true\n```\nNext, send and receive from the Stream via AMQP.\nGrant a large number of link credit to the sending stream:\n```\ndocker run -it --rm --add-host host.docker.internal:host-gateway ssorj/quiver:latest\nbash-5.1# quiver --version\nquiver 0.4.0-SNAPSHOT\nbash-5.1# quiver //host.docker.internal//queue/s1 --durable -d 30s --credit 100000\n```\n\n**Before** to this PR:\n```\nRESULTS\n\nCount ............................................... 100,696 messages\nDuration ............................................... 30.0 seconds\nSender rate ......................................... 120,422 messages/s\nReceiver rate ......................................... 3,363 messages/s\nEnd-to-end rate ....................................... 3,359 messages/s\n```\nWe observe that all 100k link credit worth of messages are buffered in the\nwriter proc's mailbox:\n```\n|No | Pid | MsgQueue |Name or Initial Call | Memory | Reductions |Current Function |\n|1 |<0.845.0> |100001 |rabbit_amqp_writer:init/1 | 126.0734 MB| 466633491 |prim_inet:send/5 |\n```\n\n**After** to this PR:\n```\nRESULTS\n\nCount ............................................. 2,973,440 messages\nDuration ............................................... 30.0 seconds\nSender rate ......................................... 123,322 messages/s\nReceiver rate ........................................ 99,250 messages/s\nEnd-to-end rate ...................................... 99,148 messages/s\n```\nWe observe that the message queue lengths of both writer and session\nprocs are low.\n\n ## How?\n\nOur goal is to have queues send out messages in a controlled manner\nwithout overloading RabbitMQ itself.\nWe want RabbitMQ internal flow control between:\n```\nAMQP writer proc <--- session proc <--- queue proc\n```\nA similar concept exists for classic queues sending via AMQP 0.9.1.\nWe want an approach that applies to AMQP and works generic for all queue\ntypes.\n\nFor the interaction between AMQP writer proc and session proc we use a\nsimple credit based approach reusing module `credit_flow`.\n\nFor the interaction between session proc and queue proc, the following options\nexist:\n\n ### Option 1\nThe session process provides expliclity feedback to the queue after it\nhas sent N messages.\nThis approach is implemented in\nhttps://github.com/ansd/rabbitmq-server/tree/amqp-flow-control-poc-1\nand works well.\nA new `rabbit_queue_type:sent/4` API was added which lets the queue proc know\nthat it can send further messages to the session proc.\n\nPros:\n* Will work equally well for AMQP 0.9.1, e.g. when quorum queues send messages\n in auto ack mode to AMQP 0.9.1 clients.\n* Simple for the session proc\n\nCons:\n* Sligthly added complexity in every queue type implementation\n* Multiple Ra commands (settle, credit, sent) to decide when a quorum\n queue sends more messages.\n\n ### Option 2\nA dual link approach where two AMQP links exists between\n```\nAMQP client <---link--> session proc <---link---> queue proc\n```\nWhen the client grants a large amount of credits, the session proc will\ntop up credits to the queue proc periodically in smaller batches.\n\nPros:\n* No queue type modifications required.\n* Re-uses AMQP link flow control\n\nCons:\n* Significant added complexity in the session proc. A client can\n dynamically decrease or increase credits and dynamically change the drain\n mode while the session tops up credit to the queue.\n\n ### Option 3\nCredit is a 32 bit unsigned integer.\nThe spec mandates that the receiver independently chooses a credit.\nNothing in the spec prevents the receiver to choose a credit of 1 billion.\nHowever the credit value is merely a **maximum**:\n> The link-credit variable defines the current maximum legal amount that the delivery-count can be increased by.\n\nTherefore, the server is not required to send all available messages to this\nreceiver.\n\nFor delivery-count:\n> Only the sender MAY independently modify this field.\n\n\"independently\" could be interpreted as the sender could add to the delivery-count\nirrespective of what the client chose for drain and link-credit.\n\nOption 3: The queue proc could at credit time already consume credit\nand advance the delivery-count if credit is too large before checking out any messages.\nFor example if credit is 100k, but the queue only wants to send 1k, the queue could\nconsume 99k of credits and advance the delivery-count, and subsequently send maximum 1k messages.\nIf the queue advanced the delivery-count, RabbitMQ must send a FLOW to the receiver,\notherwise the receiver wouldn’t know that it ran out of link-credit.\n\nPros:\n* Very simple\n\nCons:\n* Possibly unexpected behaviour for receiving AMQP clients\n* Possibly poor end-to-end throughput in auto-ack mode because the queue\n would send a batch of messages followed by a FLOW containing the advanced\n delivery-count. Only therafter the client will learn that it ran out of\n credits and top-up again. This feels like synchronously pulling a batch\n of messages. In contrast, option 2 sends out more messages as soon as\n the previous messages left RabbitMQ without requiring again a credit top\n up from the receiver.\n* drain mode with large credits requires the queue to send all available\n messages and only thereafter advance the delivery-count. Therefore,\n drain mode breaks option 3 somewhat.\n\n ### Option 4\nSession proc drops message payload when its outgoing-pending queue gets\ntoo large and re-reads payloads from the queue once the message can be\nsent (see `get_checked_out` Ra command for quorum queues).\n\nCons:\n* Would need to be implemented for every queue type, especially classic queues\n* Doesn't limit the amount of message metadata in the session proc's\n outgoing-pending queue\n\n ### Decision: Option 2\nThis commit implements option 2 to avoid any queue type modification.\nAt most one credit request is in-flight between session process and\nqueue process for a given queue consumer.\nIf the AMQP client sends another FLOW in between, the session proc\nstashes the FLOW until it processes the previous credit reply.\n\nA delivery is only sent from the outgoing-pending queue if the\nsession proc is not blocked by\n1. writer proc, or\n2. remote-incoming-window\n\nThe credit reply is placed into the outgoing-pending queue.\nThis ensures that the session proc will only top up the next batch of\ncredits if sufficient messages were sent out to the writer proc.\n\nA future commit could additionally have each queue limit the number of\nunacked messages for a given AMQP consumer, which keeps memory usage\nlower than delaying credit top ups by the session's outgoing-window.","shortMessageHtmlLink":"Introduce outbound RabbitMQ internal AMQP flow control"}},{"before":"d16b92c123d8c9688f197e49f059c29949e76734","after":"5e28cf7d4fe361087f3be5738178e3c07c122d79","ref":"refs/heads/rin/disable-buildbuddy","pushedAt":"2024-06-03T10:39:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pjk25","name":"Rin Kuryloski","path":"/pjk25","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/217064?s=80&v=4"},"commit":{"message":"account for plugins without mixed version suites","shortMessageHtmlLink":"account for plugins without mixed version suites"}},{"before":"d925de000be3e9548b901098efbb6889e1cb65db","after":"d16b92c123d8c9688f197e49f059c29949e76734","ref":"refs/heads/rin/disable-buildbuddy","pushedAt":"2024-06-03T10:24:56.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"pjk25","name":"Rin Kuryloski","path":"/pjk25","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/217064?s=80&v=4"},"commit":{"message":"Mixed version tests without buildbuddy","shortMessageHtmlLink":"Mixed version tests without buildbuddy"}},{"before":"f2fe561b9a4f95ae8562e2a77acd0fd86b1da143","after":"ed86bd7e0668c5c95360eed213006686d625bb0e","ref":"refs/heads/set-amqp10-capabilities","pushedAt":"2024-06-03T10:17:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MarcialRosales","name":"Marcial Rosales","path":"/MarcialRosales","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11655401?s=80&v=4"},"commit":{"message":"Build docker image with queue manager started","shortMessageHtmlLink":"Build docker image with queue manager started"}},{"before":"22eb4a364527b1dda8cf6925715650fb581f95fb","after":"802fa50b35cc573f520d7ac923a5bf08cddf2abe","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-03T09:47:02.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Add queue_resource and exchange_resource","shortMessageHtmlLink":"Add queue_resource and exchange_resource"}},{"before":"ef7381bb5319b383590d830af15210eb53d52019","after":"22eb4a364527b1dda8cf6925715650fb581f95fb","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-03T09:13:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Add queue_resource and exchange_resource","shortMessageHtmlLink":"Add queue_resource and exchange_resource"}},{"before":"fafc0b8c530a2f67c1599224fc37baeafcb1e310","after":"ef7381bb5319b383590d830af15210eb53d52019","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-03T09:07:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Add queue_resource and exchange_resource","shortMessageHtmlLink":"Add queue_resource and exchange_resource"}},{"before":"544aed63eb46b3e89e3487930068845a82ff6b0a","after":"d925de000be3e9548b901098efbb6889e1cb65db","ref":"refs/heads/rin/disable-buildbuddy","pushedAt":"2024-06-03T09:04:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"pjk25","name":"Rin Kuryloski","path":"/pjk25","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/217064?s=80&v=4"},"commit":{"message":"fix repo-cache priming","shortMessageHtmlLink":"fix repo-cache priming"}},{"before":"2a6c5c0a0e0533827ac97bb6a8987940639c6a93","after":"544aed63eb46b3e89e3487930068845a82ff6b0a","ref":"refs/heads/rin/disable-buildbuddy","pushedAt":"2024-06-03T08:58:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"pjk25","name":"Rin Kuryloski","path":"/pjk25","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/217064?s=80&v=4"},"commit":{"message":"fix repo-cache priming","shortMessageHtmlLink":"fix repo-cache priming"}},{"before":"8e738cc478e731f1c9cfafff45f6af0d9061c2f6","after":"2a6c5c0a0e0533827ac97bb6a8987940639c6a93","ref":"refs/heads/rin/disable-buildbuddy","pushedAt":"2024-06-03T08:52:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"pjk25","name":"Rin Kuryloski","path":"/pjk25","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/217064?s=80&v=4"},"commit":{"message":"fix repo-cache priming","shortMessageHtmlLink":"fix repo-cache priming"}},{"before":"1f2be2f6fa82fcfb66033f471abe249454cca9b0","after":"fafc0b8c530a2f67c1599224fc37baeafcb1e310","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-03T08:20:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Simplify","shortMessageHtmlLink":"Simplify"}},{"before":"77d0c903fa557e9148db50e7e810c85573dfe37e","after":"53a1d5df9f9f1441320a2ddd4be54d3c5dc6a150","ref":"refs/heads/md/feature-flags/persistent-term","pushedAt":"2024-06-03T07:53:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"the-mikedavis","name":"Michael Davis","path":"/the-mikedavis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21230295?s=80&v=4"},"commit":{"message":"Remove feature flag code handling potential code server deadlocks\n\nThese test cases and RPC calls were concerned with deadlocks possible\nfrom modifying the code server process from multiple callers. With the\nswitch to persistent_term in the parent commits these kinds of deadlocks\nare no longer possible.\n\nWe should keep the RPC calls to `rabbit_ff_registry_wrapper:inventory/0`\nthough for mixed-version compatibility with nodes that use module\ngeneration instead of `persistent_term` for their registry.","shortMessageHtmlLink":"Remove feature flag code handling potential code server deadlocks"}},{"before":"b95c1290e79f983d94914418612db572b4c411d4","after":"77d0c903fa557e9148db50e7e810c85573dfe37e","ref":"refs/heads/md/feature-flags/persistent-term","pushedAt":"2024-06-03T07:53:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"the-mikedavis","name":"Michael Davis","path":"/the-mikedavis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21230295?s=80&v=4"},"commit":{"message":"Remove feature flag code handling potential code server deadlocks\n\nThese test cases and RPC calls were concerned with deadlocks possible\nfrom modifying the code server process from multiple callers. With the\nswitch to persistent_term in the parent commits these kinds of deadlocks\nare no longer possible.\n\nWe should keep the RPC calls to `rabbit_ff_registry_wrapper:inventory/0`\nthough for mixed-version compatibility with nodes that use module\ngeneration instead of `persistent_term` for their registry.","shortMessageHtmlLink":"Remove feature flag code handling potential code server deadlocks"}},{"before":"586a742999fda6e2137703e9eb170219ff90ee86","after":"2c40f6a6e5748d769046ea2f2d7df9c89691a4a8","ref":"refs/heads/remove-classic-mirrored-queues","pushedAt":"2024-06-03T07:41:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dcorbacho","name":"D Corbacho","path":"/dcorbacho","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646577?s=80&v=4"},"commit":{"message":"Re-introduce `gm_group` table\n\nFor mixed-version clusters, as the gm table is created even if\nCMQ have already been deprecated","shortMessageHtmlLink":"Re-introduce gm_group table"}},{"before":"001d8e3bdb97dd3e97c9009c6e1d357829ac0f7d","after":"ad06ad255269ea94de1a2ea45f5b40a463da95d5","ref":"refs/heads/upstream-jose","pushedAt":"2024-06-03T06:51:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"mkuratczyk","name":"Michal Kuratczyk","path":"/mkuratczyk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9566114?s=80&v=4"},"commit":{"message":"bazel run gazelle-update-repos -- hex.pm/jose@1.11.10","shortMessageHtmlLink":"bazel run gazelle-update-repos -- hex.pm/jose@1.11.10"}},{"before":"cb519b7a71ec10fb30b6bec2c04ad935e3c3622b","after":"1f2be2f6fa82fcfb66033f471abe249454cca9b0","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-02T15:50:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Simplify","shortMessageHtmlLink":"Simplify"}},{"before":"72bfff30cdd84b8c96cf0c0c7f9efd12e126e5a1","after":"cb519b7a71ec10fb30b6bec2c04ad935e3c3622b","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-02T14:43:07.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"more code coverage","shortMessageHtmlLink":"more code coverage"}},{"before":"c29517e5af30e706f143a9dcb9253ee1377593d5","after":"72bfff30cdd84b8c96cf0c0c7f9efd12e126e5a1","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-06-02T13:23:55.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"more code coverage","shortMessageHtmlLink":"more code coverage"}},{"before":"74f50eb837d51ce1c6ccc2c6649eb6e1ba552a23","after":null,"ref":"refs/heads/mergify/bp/v3.13.x/pr-11344","pushedAt":"2024-06-02T03:28:52.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"michaelklishin","name":"Michael Klishin","path":"/michaelklishin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1090?s=80&v=4"}},{"before":"61b0c550e687f35008d9fdaaa404cdf2b57b11b7","after":"cae6c789dfbb464d5161818740901b648f7a83d7","ref":"refs/heads/v3.13.x","pushedAt":"2024-06-02T03:28:51.000Z","pushType":"pr_merge","commitsCount":8,"pusher":{"login":"michaelklishin","name":"Michael Klishin","path":"/michaelklishin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1090?s=80&v=4"},"commit":{"message":"Merge pull request #11356 from rabbitmq/mergify/bp/v3.13.x/pr-11344\n\nAdd ssl_options to rabbitmq_auth_backend_http's schema (backport #11344)","shortMessageHtmlLink":"Merge pull request #11356 from rabbitmq/mergify/bp/v3.13.x/pr-11344"}},{"before":null,"after":"74f50eb837d51ce1c6ccc2c6649eb6e1ba552a23","ref":"refs/heads/mergify/bp/v3.13.x/pr-11344","pushedAt":"2024-06-02T00:07:49.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Use better names for test certs file\n\nSuggested by @michaelklishin\n\n(cherry picked from commit 067964b07253bc9fae9fc1cb00251a45b82cc826)","shortMessageHtmlLink":"Use better names for test certs file"}},{"before":"bd847b8cac652f930393c4726ea9da01e9b804bd","after":"096015b1fbd4fc2cdfd251af1f879f46d1ca150f","ref":"refs/heads/main","pushedAt":"2024-06-02T00:07:05.000Z","pushType":"pr_merge","commitsCount":8,"pusher":{"login":"michaelklishin","name":"Michael Klishin","path":"/michaelklishin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1090?s=80&v=4"},"commit":{"message":"Merge pull request #11344 from rabbitmq/fix-10281\n\nAdd ssl_options to rabbitmq_auth_backend_http's schema","shortMessageHtmlLink":"Merge pull request #11344 from rabbitmq/fix-10281"}},{"before":"067964b07253bc9fae9fc1cb00251a45b82cc826","after":null,"ref":"refs/heads/fix-10281","pushedAt":"2024-06-02T00:07:05.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"michaelklishin","name":"Michael Klishin","path":"/michaelklishin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1090?s=80&v=4"}},{"before":"7b878c6d748e6556cf85225b1a17255463458e72","after":"f2fe561b9a4f95ae8562e2a77acd0fd86b1da143","ref":"refs/heads/set-amqp10-capabilities","pushedAt":"2024-06-01T13:49:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MarcialRosales","name":"Marcial Rosales","path":"/MarcialRosales","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11655401?s=80&v=4"},"commit":{"message":"Post-pone loading sample command file\n\nTODO: Ensure container keeps running the queue manager","shortMessageHtmlLink":"Post-pone loading sample command file"}},{"before":"50a9148c00d77fdf7d172ccf063ce97df1ff31f8","after":"7b878c6d748e6556cf85225b1a17255463458e72","ref":"refs/heads/set-amqp10-capabilities","pushedAt":"2024-06-01T13:18:17.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"MarcialRosales","name":"Marcial Rosales","path":"/MarcialRosales","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11655401?s=80&v=4"},"commit":{"message":"Add dockerfile that builds an MQ Server\n\nNote: It currently fails to start the\nqueue manager","shortMessageHtmlLink":"Add dockerfile that builds an MQ Server"}},{"before":"095f19d4611a253b76f299246306fc565fd2f94a","after":"067964b07253bc9fae9fc1cb00251a45b82cc826","ref":"refs/heads/fix-10281","pushedAt":"2024-06-01T13:15:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MarcialRosales","name":"Marcial Rosales","path":"/MarcialRosales","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11655401?s=80&v=4"},"commit":{"message":"Use better names for test certs file\n\nSuggested by @michaelklishin","shortMessageHtmlLink":"Use better names for test certs file"}},{"before":"a43fbdd1d728499ab088ec150ade8b8204448937","after":"095f19d4611a253b76f299246306fc565fd2f94a","ref":"refs/heads/fix-10281","pushedAt":"2024-05-31T20:09:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"lukebakken","name":"Luke Bakken","path":"/lukebakken","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/514926?s=80&v=4"},"commit":{"message":"App public_key and crypto as extra apps\n\nSo that dialyzer can find the missing functions","shortMessageHtmlLink":"App public_key and crypto as extra apps"}},{"before":"a590223c02032a5c8c741deb46593b2c54a42c00","after":"a43fbdd1d728499ab088ec150ade8b8204448937","ref":"refs/heads/fix-10281","pushedAt":"2024-05-31T20:06:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lukebakken","name":"Luke Bakken","path":"/lukebakken","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/514926?s=80&v=4"},"commit":{"message":"fix whitespace","shortMessageHtmlLink":"fix whitespace"}},{"before":"1a1946e382ccc8b9ed799e8c466c92fa79b6f62c","after":"c29517e5af30e706f143a9dcb9253ee1377593d5","ref":"refs/heads/amqp-flow-control-poc-2","pushedAt":"2024-05-31T19:58:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ansd","name":"David Ansari","path":"/ansd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12648310?s=80&v=4"},"commit":{"message":"Add more assertions","shortMessageHtmlLink":"Add more assertions"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEWtwMAAA","startCursor":null,"endCursor":null}},"title":"Activity · rabbitmq/rabbitmq-server"}