Chapter 4. Changes in 3.2.2

4.1. Errata

RHBA-2016:2049 – Red Hat Enterprise MRG Messaging 3.2.2 Release

BZ#1146849 - Re-subscribing to auto-delete queue fails when the queue is just being deleted
The creation of a receiver in the messaging APIs involves two main network interactions when using AMQP 0-10: declaring the queue, then subscribing to it. The declare will create the queue if necessary, however it did not reset any auto-deletion timer. Consequently it was possible for the queue to expire after the declare but before the subscribe, meaning the subscribe would fail. To resolve this issue, the declare semantics reset any auto-deletion timer associated with the queue. Now, the queue is unlikely to expire between the declare and the subscribe and the subscribe call will not fail.
BZ#1316507 - [C++ client] Message::setContent("") does not work
The message implementation can hold two views of message content: the raw bytes or a decode object form. These operate independently (changes to the raw bytes do not alter the object content). When a message was decoded into object form on receipt, then updated by setting the raw bytes in order to resend, the resent message used the original object content. Now, any previously held object content view is reset. Additionally, a setting was added to allow the automatic decoding of messages into object form to be disabled by environment variable or configuration file. The message content now reflects the application's actions.
BZ#1318180 - [MRG2] memory leak in primary broker when overwriting messages in a ring queue
Previously, the primary HA broker was accumulating message IDs and Poller handles, leading to a memory leak. The HA broker now frees message IDs and Poller handles when no longer needed, removing the memory leak.
BZ#1324845 - Federation does not interoperate between MRG-M 2 and 3
The management method link.bridge got extra 'credit' argument between MRG 2 and 3. This prevented MRG 2 tools from adding links to the MRG 3 broker. The 'link.bridge' method is now deprecated in favor of 'broker.create' which supports the credit argument. Both MRG 2 and MRG 3 tools can now be used with an MRG 3 broker.
BZ#1329582 - consuming messages from priority ring queue on backup broker can trigger broker segfault
A priority queue can result in messages being deleted from the queue even if they are acquired by a consumer. When this happens, the state of the message is changed to indicate that the message may no longer be valid. However the code that releases acquired messages that have not been acknowledged when the consumer session ends was not checking this state to ensure the messages to be released were still acquired. This meant that an attempt was made to release a dequeued message, causing a segmentation fault. Now, the state is checked before release, preventing the segmentation fault, even if the message has been dequeued.
BZ#1330539 - client does not update credit for expired messages
Messages that expire on the client side are not handled by the usual code path which includes the moving of the credit window. Therefore, if there are a large number of messages that expire on the client side, the flow of messages may stall as the window is never moved forward. This has been corrected by ensuring the credit window is moved even for expired messages.
BZ#1333437 - segfault when rerouting and deleting a queue in parallel
Missing locks around queue management object meant concurrent queue delete and management operations could occasionally cause a broker crash. This release adds the appropriate locks, preventing the broker crashes.
BZ#1333767 - Occasional segfault when creating & deleting many queues just before primary failover
In previous releases, an interrupted backup recovery left invalid data that could cause memory errors. This release has improved clean up if recovery is interrupted and improved memory safety.
BZ#1339449 - [RFE] Improved broker logging for expired messages
This release contains improved broker logging for expired messages. This feature was added because messages that were expired by the queue cleaner were not logged. Expired messages now receive the same logging treatment as other messages, with the queue name and message properties included in debug-level logs.
BZ#1350023 - Memory leak in primary broker when creating & unsubscribing from an autoDel queue in a loop
When creating then unsubscribing from an autodelete queue, unnecessary information was being stored in the primary cluster node and never released. Thus memory use would increase over time. Now, the code that stored the unnecessary information has been removed and memory no longer accumulates.
BZ#1359506 - Small memory leak when trying to over-subscribe queue with exclusive subscription
Previously, if any worker thread was idle for long periods, routine memory flushing may not have occurred. causing the appearance of a memory leak. This release ensures that all worker threads are made active at least once per minute, meaning memory is released regularly and does not accumulate.