2.2. Bug Fixes

qpid-cpp

BZ#1002605 - Trace queue deletion statistics show msgDepth:0 every time

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#1224300 - [MRG 3.2] linearstore raising JERR_LFCR_SEQNUMNOTFOUND after sending many DTX transactions

In previous releases of the product, customers could encounter a JERR_LFCR_SEQNUMNOTFOUND error. This is because after sufficient journal files have been used, the journal sequence number overflows to 0 which is a reserved and non-existent file number. This is an artifact of the older legacystore, where file numbers were limited in a circular buffer to 64 files.

In this release, all use of the journal file sequence number has been updated to use 64-bit unsigned integers, preventing the error from occurring in any practical usage situation.
BZ#1192924 - A broker configured with disabled authentication requires authentication from a client connected from Windows

In previous versions of the qpid::messaging client on Windows (c# or c+), if a username was not specified when using the default (+PLAIN) authentication mechanism, the empty string was included as the identity causing authentication to fail. This would happen even if authentication was disabled on the broker.

The broker has been modified to accept an empty string as the identity, but only when authentication is disabled. If authentication is enabled the empty string will still fail.

As a result, a qpid::messaging client in Windows can connect to a broker without needing to specify any extra connection options with authentication disabled.
BZ#1158903 - [linearstore] segfault when 2 journals request new journal file from empty EFP

It was discovered that when two journals concurrently requested a new journal file from an empty EFP, the Broker could segfault. A fix to popEmptyFile now performs an atomic test-and-create-and-grab for the EFP file, which prevents the segfault from occurring.
BZ#1240552 - No error info logged for io errors with ssl

There was a regression in the error messages of the MRG-3.0 release as compared to previous releases. This relates to errors occurring with SSL/TLS connections.

In the 3.0 release, errors related to SSL/TLS were not informative and even appeared not to be errors:
Error reading socket: Success(0)`

The regression has been fixed and error messages relating to SSL/TLS now have the same information as previous releases.
BZ#1234423 - Outdated "README-winsdk.txt" file

With the addition of Microsoft Visual Studio 2012 to the list of supported versions, it was discovered that information about how to build the C examples in Visual Studio 2012, along with the required CMake version required to build the C projects were missing from the README. The README has been updated to add the required steps, which will help customers build the examples correctly.
BZ#1167911 - [linearstore] Symlink creation fails if store dir path is not absolute

It was discovered that symlink creation failed if the specified linearstore store-dir path was not absolute. The store-dir parameter should never have been specified as a relative path, however the issue was benign for some time in both linearstore and legacystore due to the lack of symlink support in journal directories (introduced as part of BZ#1160367. The fix for this bug now adds a prefixed / to the store-dir parameter if the path is not specified as absolute.
BZ#1152032 - purging TTL expired messages via purge task should not increase acquires counters

It was discovered that when time-to-live (TTL) messages were removed using a purge task, the acquires counter was increased for each broker and queue. Purging the same message by removing it when finding what message to send/acquire to a consumer did not increase the counter. Because TTL purged messages are not technically acquired, this behavior was misleading. The fix removes code from Queue.cpp that counts acquires on mgmtObject and brokerMgmtObject.
BZ#1150127 - AMQP 1.0 consumer should be able to get messages from browse-only queue

Qpid broker allowed 0-10 consumers on browse-only queues, but did not allow 1.0 consumers to attach to these queues. This caused read-only queues not to work as expected for customers. Improvements to Queue.h and amqp/Session.cpp now allow 1.0 consumers to attach to browse-only queues. The consumers are marked internally as browsers, which is consistent in behavior to 0-10 consumers.
BZ#1148807 - [linearstore] Restarting broker with empty journal raises confusing warning

Provisioning a durable message (backed up by linearstore journal) and restarting the broker without enqueueing a message into it raised a warning message Journal .. is uninitialized or corrupted.

This message (on this verbosity level) was confusing to users, as it incorrectly suggested a potential problem with the journal.

The fix to Linearstore now uses the uninitialized file as the first journal file in the queue.
BZ#1136418 - QMF Session name to contain user ID

It was discovered that QMF could not handle sessions of the same name attached in parallel by different users because it stored session objects by their name: unique per user only.

The fix implements a session ID for QMF in SessionState.cpp, by requesting std::string name(getId().str()); instead of std::string name(getId().getName());.
BZ#1152012 - [linearstore] missing journal id in "trace Mgmt create journal." log

It was discovered that the broker log did not initially log the journal ID in the log entry. While the journal ID in the relevant QMF object was confirmed to be set properly after the fact, the log was not indicating this was the case. A fix to how the log entry is created now correctly inserts the journal name.

qpid-java

BZ#1207368 - NullPointerException from Hello example (hello.properties file missing)

Previously the hello.properties file was located in org/apache/qpid/example (together with the example sources) and the binaries were compiled to the same location. Starting with MRG-3.1, the source and hello.properties location was changed to src/main/java/org/apache/qpid/example/ while the compiled binaries were still saved to the old location. This caused the Hello example to not be able to read the hello.properties file and resulted in a NullPointerException. The bug fix permanently moves the java source for examples into /examples/org instead of examples/src/main/java/org which puts the content back into the correct classpath context for the example start script. This corrects the workaround present in BZ#1206503.

qpid-tools

BZ#1155553 - qpid-tool to halt when initial connection to broker failed

When the qpid-tool was run with invalid credentials or an incorrect host name, the tool did not raise an exception or warning. This lack of context left the user with the impression that the tool connected successfully, when this was not the case. qpid-tool now prints a warning to stdout: qpid: Failed to connect: Exception during connection setup: error - [Errno 111] if incorrect parameters are passed while the broker is not running.
BZ#1136191 - qpid-ha -h or --help should exit with returncode of 0

The -h and --help options were not recognized by qpid-ha, and were treated the same way as running qpid-ha (without any argument). All returned the exit code 1 instead of 0, which displayed Exception: No valid command.

Fix: The -h and -help options are now implemented to return the result from --help-all, which displays command usage for qpid-ha regardless of the commonly-passed method chosen by the user.