You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: release-notes/4.0.1.md
+24Lines changed: 24 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -245,6 +245,30 @@ This section is incomplete and will be expanded as 4.0 approaches its release ca
245
245
246
246
### Core Server
247
247
248
+
#### Bug Fixes
249
+
250
+
* A whole category of issues with binding inconsistency are addressed with the stabilization
251
+
of [Khepri](https://github.com/rabbitmq/khepri), a new [metadata store](https://www.rabbitmq.com/docs/metadata-store) that uses a tree of nested objects instead of multiple tables.
252
+
253
+
With Mnesia, the original metadata store, bindings are stored in two tables, one for durable
254
+
bindings (between durable exchanges and durable queues or streams) and another for semi-durable
255
+
and transient ones (where either the queue is transient or both the queue and the exchange are).
256
+
257
+
When a node was stopped or failed, all non-replicated transient queues on that node were deleted
258
+
by the remaining cluster peers. Due to high lock contention around these tables with Mnesia, this
259
+
could take a while. In the case where the restarted (or failed) node came online before all bindings
260
+
were removed, and/or clients could begin to create new bindings concurrently, the bindings table
261
+
rows could end up being inconsistent, resulting in obscure "binding not found" errors.
262
+
263
+
Khepri avoids this problem entirely by only supporting durable entities and using a very different
264
+
[tree-based data model](https://github.com/rabbitmq/rabbitmq-server/pull/11225) that makes bindings removal much more efficient and lock contention-free.
265
+
266
+
Mnesia users can work around this problem by using [quorum queues](https://www.rabbitmq.com/docs/quorum-queues) or durable classic queues
267
+
and durable exchanges. Their durable bindings will not be removed when a node stops.
0 commit comments