[rabbitmq-discuss] RabbitMQ 2.3.1 Release

Matthew Sackman matthew at rabbitmq.com
Thu Feb 3 14:45:29 GMT 2011

On Thu, Feb 03, 2011 at 02:22:14PM +0000, Simon MacMullen wrote:
> The RabbitMQ team is pleased to announce the release of RabbitMQ
> 2.3.1.
> This release fixes a small number of bugs, in particular one serious
> bug in 2.3.0 which could lead to queue processes crashing.

As a result of the severity of the bug that's been fixed, we do not
advise anyone to use 2.3.0.

The bug fixed is a race condition that can cause any queue to violate an
enforced invariant of the queue during an AMQP transaction commit. If
the invariant is violated, then the queue will crash instantly, losing
all non-persisted messages within the queue.

The bug was introduced in the process of fixing another bug - a bug that
had existed since the 2.0.0 release, and which could lead, in the event
of a crash, to more persistent messages being lost than should be. To
explain that a little further: persistent messages are not written to
disk immediately because there may be opportunities to optimise out the
write completely, and additionally it is not performant to issue lots of
tiny I/O write operations. Consequently, there are various caches, and
timeouts which ensure that messages that are being written to disk are
done so promptly enough but also efficiently enough. The bug found was
that one of the timers related to this process was not being reset
correctly. As a result, a long period of time could occur before
messages were pushed out to disk in some cases, leading to a bigger
window for messages to be potentially lost in. This would affect not
just how messages are pushed to disk in the case of memory pressure, but
also latency of transaction commits, and probably some scenarios too.

In fixing this bug, the critical bug discovered in 2.3.0 was
accidentally introduced. Both bugs do not exist in 2.3.1.

By being a race condition, it managed to not get triggered in testing.
Indeed even now, knowing where the bug lies, I have not been able to
trigger it.

I hope that sheds some light on the situation.


More information about the rabbitmq-discuss mailing list