Red Hat Enterprise MRG 3

3.1 MRG Messaging Release Notes

Release Notes for Red Hat Enterprise MRG Messaging 3.1, and its patch releases

Legal Notice

Copyright © 2015 Red Hat, Inc..
This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack Logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.


These release notes contain important information related to Red Hat Enterprise MRG Messaging v3.1.0. Read these Release Notes in their entirety before installing the product.

Chapter 1. Introducing Messaging 3.1

1.1. Red Hat Enterprise Messaging 3.1

Red Hat Enterprise Messaging (MRG-M) version 3.1 is the next generation release of the MRG-M product. Based on the Apache Qpid project, this release builds upon the foundation laid in the MRG-M 3.0 releases.
Version 3.1 introduces the enhancements detailed below, and numerous customer facing bug fixes that comprise the RHEA-2014:19055 errata prepared for this release.

1.2. Documentation

See the product documentation for further details on installing, configuring, and migrating existing installations and applications. All product documentation is available from the Red Hat Enterprise MRG Documentation Home Page
The Messaging Installation and Configuration Guide contains information on server installation, configuration, and migration.
The Messaging Programming Reference contains information on developing applications and migrating existing applications to run against the latest release of the server.

Chapter 2. Changes in 3.1.0

2.1. Enhancements


BZ#1089652 - [RFE]: Configuration option for linear store to delete the used journal files instead of recycling them.

Because customers required used journal files to be cleaned of all legacy user data, and returned to the pool for re-use, a linearstore file overwrite option is implemented by adding the --overwrite-before-return option flag when starting the broker (with the linearstore module loaded).

When using the --overwrite-before-return option, the store overwrites the data portion of the file (the entire file excluding the header) with \0, which erases the previous contents of the file. This will prevent any legacy data from existing in the Empty File Pool (EFP). Using this option will have a performance impact because it takes time to overwrite each file. This option should not be used if security considerations do not require it.
BZ#1080165 - [qpid] Changing system time might cause heartbeat-enabled connections to drop

Under some circumstances the qpid broker could get confused and drop connections if the system clock was changed. The Qpid broker timekeeping is now changed so that changing the system clock does not confuse internal timekeeping. The qpid broker timekeeping is now separated into two types: Wallclock time (as determined by the system time), which no longer affects the internal workings of the broker except to print timestamps; and Relative time (usually relative to the system boot time), which is used for internal timekeeping purposes.
BZ#1049833 - [RFE]: Allowing users to connect only from selected IP addresses

System administrators want to restrict the hosts from which users are allowed to connect. For example, an internal broker may be locked down so that engineering and finance users may only connect from hosts in the engineering and finance subnets respectively. ACL limits are added to allow or deny users from connecting from individual hosts as specified by IP address. Brokers can now prevent connections from any internet host. Brokers may improve performance, and will improve security by specifying which users can log in from which hosts. See "Connection Limits by Host Name" in
BZ#1017743 - Posibility to disable the SSL hostname verification in C++ Linux clients

It is now possible to disable hostname verification when connecting over SSL. In some circumstances, the certificate in use does not match the hostname used, yet there is no concern over spoofing due to other network controls. Disabling the verification performed by the qpid::messaging client is convenient in this circumstance. If a connection option 'ignore_ssl_hostname_verification_failure' is set to True, then when establishing an ssl connection, the client will not attempt to verify that the hostname of the server matches that included in the certificate.
BZ#985870 - [RFE]: Add configurable time-delayed auto-delete for durable subscriptions

Auto-deleted queues are useful for preventing stale queues. However without some delay on the deletion, they prevent any reliability as the queue is lost as soon as a subscriber is disconnected, which may be due to some failure condition. A delay can be configured between the time a queue becomes eligible for auto-deletion and the time the deletion actually occurs. By configuring a queue with a non-zero autodelete timeout, a subscriber of the queue can re-subscribe after a failure (providing the subscriber does so within the configured limit) and not have messages lost along with the queue.
BZ#883866 - [RFE]: Access control for QMF functionality should be improved

Some QMF methods bypassed ACL authorization, allowing content in any queue to be manipulated by any user that was authorized to invoke QMF methods. Missing ACL actions together with their parameters have been added that permit or deny users the ability to purge, move, redirect and reroute messages from a queue.
BZ#728196 - Provide more descriptive error text when SASL config. file is malformed

Improvements to the error message displayed when the /etc/sasl2/qpidd.conf contains invalid configuration are implemented in qpidd. When /etc/sasl2/qpidd.conf is unparsable, qpidd halts with a generic error. Based on the error text, it was impossible to identify the root cause of the issue (the misconfigured config file). If the qpidd.conf file contains an error, a "[Broker] critical Unexpected error" that better describes the issue is now thrown.


BZ#747314 - [RFE] Authentication error displayed for qpid is not meaningful

It was discovered that the python client raised ambiguous error messages when trying to connect without credentials to a broker with disabled anonymous authentication. This caused the user to not get the exact reason of connection failure. An improved error message now conveys the exact information to the user.

2.2. Bug Fixes


BZ#915333 - Java client raises javax.jms.JMSException instead of InvalidDestinationException in BasicMessageProducer.send() method

It was discovered that the javax.jms.JMSException raised when attempting to send a message to an invalid destination in the Java client was too generalized. This causes problems with exception handling in a Java application. The client has been improved to raise a proper InvalidDestinationException for this particular use case, which fixes the issue.
BZ#929169 - Closing a topic consumer should delete its exclusive auto-delete queue

The expected behavior of a topic consumer is to persist the subscription queue when the topic consumer is closed. The subscription queue is deleted automatically when the session is closed due to being marked auto-delete. It was discovered that the subscription queue remained on the broker, even after the subscription queue was closed. The fix now ensures the subscription queue is deleted when the consumer is closed, with the exception of JMS durable subscriptions.


BZ#693721 - Session names longer than 256 bytes cause errors when encoding session management objects

AMQP 0-10 allowed session names to be up to 2^16 bytes long. The QMF management schema for the broker defined the name of a session object as being up to 2^8 bytes long. If a session was created with a name greater than 256 bytes, the broker could not send out management objects for the session, and periodic processing failed. Changes to the QMF management tools now support long-named sessions, which fixes the originally reported issue.
BZ#1186693 - [amqp1.0] Abort after uncaught UnknownExchangeTypeException

It was discovered that the QPID Broker aborted with an uncaught UnknownExchangeTypeException when the client attempted to request an unsupported exchange type. The code for the Exchange Registry and Node Policy has been improved to prevent this issue from happening again.
BZ#1160232 - [regression] broker sometimes forgets to send connection heartbeats

It was discovered that the timer task for periodic queue purging was added to the timer’s set of tasks twice. This caused the timer’s internal state to become corrupted, which in turn prevented some tasks from being triggered. The logic is now fixed to ensure the task is not included multiple times within the timer.
BZ#1160154 - C++ and .NET clients on Windows do not support AMQP 1.0 protocol

It was discovered that a build script did not include the Proton shared install directory. AMQP 1.0 support delivered by Proton was absent. The fix adds the framework code to specify and use the Proton shared install directory. AMQP 1.0 support is now available in the Microsoft Windows SDK.
BZ#1096744 - Increased memory requirements of MRG-M 3.0, as compared to 2.3

Previously, message state was shared between queues on which the message was enqueued. This behavior was incorrect, because certain elements of the state tracked information relevant to the message specific to a particular queue. This caused memory consumption to increase significantly. The amount of duplicated (per queue) state tracked for each message is now optimised to reduce the amount of memory required. Though a given scenario may still (unavoidably) require a little more memory, memory consumption is reduced compared to the original scenario.
BZ#916975 - Journal can not manage enqueues matching two bindings from headers exchange to the same queue

It was discovered that if a message sent to a headers exchange matched two bindings to the same queue, the queue attempted to enqueue the message twice. This caused a journal exception when the queue attempted to store the message. The headers exchange implementation has been improved to ensure there is just one enqueue made in these circumstances. This prevents the journal exception from occurring, and fixes the originally reported issue.
BZ#1179609 - ring queue disables LVQ

It was discovered that the 'ring' policy and a 'last value queue' queue type were implemented as incompatible options. Selecting the ring policy meant the last value queue type request was effectively ignored, and messages with a given key did not replace older messages on the queue with the same key. Special handling is now added, which now correctly handles the two different behaviours on the same queue. A ring policy on a last value queue now behaves as expected. Messages with the same key replace each other on the queue, and the ring policy now correctly limits the maximum depth of the queue.
BZ#1101533 - QMF opcode _query_request bypasses any ACL authorisation

It was discovered that the QMF query "_query_request" bypassed ACL authorization. This allowed any user with minimal privileges to successfully query any object within the broker, regardless of the ACL rule in place for the object. An enhancement adds ACL authorization for the query method, which prevents users from querying objects they do not have permissions for.
BZ#1093996 - Purging TTL expired messages blocks all other timers, causing connection drops

It was discovered that purging expired messages could take a long time, which prevented the timer thread from servicing other periodic tasks—​such as heartbeats—​in a timely manner. The timer thread is now used only to trigger the purge, with the actual purge task now offloaded to one of the broker’s worker threads. This change allows the timer thread to monitor time state correctly, and allow other jobs such as heartbeat reporting to function correctly.
BZ#1078936 - "csharp.example.server" cannot read connection options

An issue with how the example application command line processing code looked for arguments prevented users from getting the correct result for argument two. The code has been improved so the program argument list is now parsed correctly, which allows users to pass values to argument two correctly.
BZ#1066372 - ACL to take default broker values instead of 0 for queue create parameters

ACL rules check that queue creation sizes are within bounds. When a user request was received and that request did not specify one of the checked sizes, the ACL proceeded checking the ACL rules as if the user had specified zero. For the same user request the broker substituted a default value which was not zero. This caused the ACL rule checks to not render the correct allow or deny decisions. The ACL rule checking behavior is now improved. When the user does not specify a value, the ACL rules are processed using the broker default values and not zero. ACL rule checks are processed using the same values that the broker uses to create the queue. ACL rule checks no longer produce false allow or deny decisions based on queue size limits.
BZ#1066271 - Example application "" with three arguments fails

An issue with how the example application command line processing code looked for arguments prevented users from getting the correct result for argument three. The code has been improved so the program argument list is now parsed correctly, which allows users to pass values to argument three correctly.
BZ#1028289 - Broker reports EXTERNAL mech. not supported if CN is empty.

Insufficient error reporting for malformed client certificates on the broker side made it difficult to determine why the broker was rejecting a connection. The fix introduces improved error message support on the broker side:
2014-06-13 10:58:10 [Security] warning SASL error: unable to offer EXTERNAL mechanism as authid cannot be determined

Users now understand what caused the issue, and can now better resolve the underlying cause of the problem.
BZ#1024685 - Creating a queue with invalid settings results in no queue but only its management object exists

It was discovered that an attempt to create a queue with invalid settings created management object for the queue, but not the queue itself. This caused the user to assume a management queue had been created, when in fact the management object contained no attached queue. The error handling mechanism is now updated to ensure the management object is not created if a queue request contains invalid settings.
BZ#1002605 - Trace queue deletion statistics show msgDepth:0 everytime

It was discovered that the event and log about deleting some provisionable objects (for example, the queue) have zero counters in many statistics, regardless of the truth values. This caused the information in the event and the log to be incorrect. An update in deletion procedures of the objects now ensures the statistic counters provide proper values both in the event and the log.
BZ#977869 - Producing to many queues locks I/O threads for new connections

It was discovered that when a large number of message producing clients were attached to a single broker, and that broker has a fanout exchange with a large number of attached queues, new connections to the broker were delayed significantly, or the connection attempt timed out. The fix changes the maximum amount of time the broker allows a thread to execute before it is freed for the next task. The user can also increase the number of worker threads when starting the broker. The connection delay for starting new connections to the broker is reduced. The new connection delay is further reduced by starting the broker with more worker threads.
BZ#796273 - Priority ring queue lets lower-priority message displace higher-priority

A Ring Priority queue works by removing the lowest priority message if the queue limit is reached. It was discovered that the queue did not take into account whether the new message was a lower priority than the one being removed. A lower priority message could therefore displace a higher-priority message. A fix to the Priority Ring queue now correctly assesses the incoming message priority, and ensures that higher priority messages remain in the queue.
BZ#648690 - "qpid-route route map " with ACL gives "unauthorized-access"

It was discovered that the qpid-route tool only supported the ANONYMOUS SASL mechanism in the route add command, regardless of other mechanisms explicitly set. This caused an unauthorized access error for broker links created by the qpid-route tool, because the originating broker authenticated as an anonymous user with a non-anonymous SASL mechanism set. A change to the method now ensures the authentication mechanism is selected correctly and works as expected.


BZ#995496 - [Windows C++ client] An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full

It was discovered that the Windows C++ client would randomly drop SSL connections while reporting a non-existent resource failure: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

This depended on timing factors and overall network traffic. qpid-cpp was using too many buffers concurrently and reserving available buffers unnecessarily. The Windows C++ client now uses one less buffer for accumulating AMQP frames from encrypted network traffic, and uses all buffers when needed. As a side effect, the qpid-ccp I/O layer now consumes between 64KB and 128KB less memory per connection on all platforms.


BZ#726695 - Unable to create bindings on already existing broker objects using addressing

It was discovered that the python client did not create a binding from an already existing queue, if it was ordered to create both. Improvements to the python client now ensure the binding is created as expected.
BZ#974940 - Python client unexpected exception after ACL denial

It was discovered that an repeated, unexpected exception was raised by an attempt to manipulate a session with either a (closed) session or (open) connection in Python client, after an execution exception closed the session. The exception handling is now improved in such a way that the exception is cleared after it is raised for the first time. Attempts to close the session or connection no longer re-triggers the exception.

2.3. Known Issues

There are no known issues reported for this release.

2.4. Deprecated Functionalities

There are no deprecated functionalities in this release.

Appendix A. Revision History

Revision History
Revision 3.1.0-3Tue Jul 21 2015Jared Morgan
Prepared for MRG-M 3.1 GA