-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Classic queue v2 can crash when used with mirroring #6176
Comments
|
It seems like there is a secret ingredient to this issue: the very latest perf-test. I originally hit this on Kubernetes where I use |
Earlier PerfTest versions we not "concurrent enough" to matter :P |
My bad, perf-test version doesn't matter. I was just relying on specifying |
|
This is caused by v2 not storing the MsgId value when the old message store isn't used. When acking the SeqId is used against the master, but the MsgId is used against the mirrors. I'm not sure why that is, surely the slaves ought to have messages in the same order as the master... It appears to have been done that way since the very beginning. |
In 3.11, when classic queues v2 are used with mirroring, they can crash like this:
Steps to reproduce:
git checkout v3.11.x
bazel run start-cluster
rabbitmqctl -n rabbit-0 set_policy --apply-to queues --priority 1 ha "cmq.*" '{"ha-mode":"exactly", "ha-params": 3, "ha-sync-mode": "automatic"}'
The issue doesn't seem to occur with CQv1. With v2, it occurs both with lazy and non-lazy, but it seems easier to reproduce with lazy. In both cases, given enough messages in the queue (the above 100k is generally not sufficient but just change it to 5M or something), it leads to a memory spike. Especially with non-lazy CQv2, that spike often leads to a memory alarm or even OOMkill. It looks like this:
I was not able to reproduce using
main
.The text was updated successfully, but these errors were encountered: