0.16 Release Notes

The full list of changes in the Qpid 0.16 release incorporates both the issues worked on during the 0.15 development stream and any final touches made during the 0.16 release process. A list of these JIRA issues can be found below.

New Features

  • QPID-3044 - Implement JCA Adapter for Java JMS client
  • QPID-3547 - qpid-config currently doesn't display useful information about headers exchange bindings
  • QPID-3622 - Add Sorted Queue
  • QPID-3642 - Implement Dead Letter Queue functionality
  • QPID-3753 - [Java Broker] Improve automatic conversion between 0-8/9/9-1 and 0-10 messages in the broker, including ReplyTo
  • QPID-3790 - Add a new method getQueueDepth(AMQDestionation, boolean) into AMQSession to allow syncing the session before sending QueueQuery command
  • QPID-3862 - Static Trace points for System tap / Dtrace

Bugs Fixed

  • QPID-2020 - AMQConnection.create[Durable]ConnectionConsumer should do something better than just return null
  • QPID-2243 - 0-10 protocol connections do not have a matching JMX MBean to allow management
  • QPID-2621 - Calling QueueBrowser.getEnumeration on a stopped connection will hang
  • QPID-2685 - Java clients 0.6 does not wait for asynchronous messages
  • QPID-2750 - remove erroneous asserts about LongString lengths in EncodingUtils
  • QPID-2770 - AMQMessageDelegate_0_10 uses Byte.valueOf() when converting String properties to short, int, and long values
  • QPID-3052 - Java test profiles do not effectively test all AMQP protocol versions
  • QPID-3095 - AMQBrokerDetails equals() and hashCode() methods do not adhere to contract
  • QPID-3180 - Ring queues do not work with --default-queue-limit 0
  • QPID-3293 - restore ability to set client connection send/receive buffer sizes
  • QPID-3426 - Test org.apache.qpid.test.client.failover.FailoverTest#test4MinuteFailover is broken
  • QPID-3440 - the reply-to Destination cache in AMQMessageDelegate_0_10 does not work
  • QPID-3474 - Principal name appears twice (separated by semicolon) in management logs on JMX connection closing/opening events.
  • QPID-3477 - Java Broker does not handle a rejection/acknowledgemnt with invalid code correctly
  • QPID-3481 - Acquired messages are not sent to alternate exchange when queue is deleted and receiver's session closed
  • QPID-3490 - the default exchange should not be implemented as just a regular direct exchange
  • QPID-3492 - String values in address are parsed as binary (and sent as vbin16/32 rather than str16)
  • QPID-3519 - Refactor the logic behind sending of the selector arguments during subscription creation
  • QPID-3533 - qpid-config does not properly set some options if value evaluates to False
  • QPID-3539 - NoLocal should occur at the connection level and not the session level (0-10)
  • QPID-3559 - SimpleDateFormat used in thread unsafe manner in JMX interface
  • QPID-3564 - C++ test tools - message group validator (msg_group_test) incorrectly handles the "no-senders" and "no-consumers" scenarios.
  • QPID-3566 - ConnectionCloseTest fails with spurious thread creation
  • QPID-3574 - Perl bindings are not correctly installed
  • QPID-3593 - Python Priority Queue tests fail against Java Broker
  • QPID-3594 - Python exclusive queue declaration test fails against Java Broker
  • QPID-3595 - Python Alternate Exchange tests fail against the Java Broker
  • QPID-3596 - Python tests fails as Java Broker does not validate for reserved exchange names on create/bind
  • QPID-3597 - Python Headers Exchange tests fail against Java Broker
  • QPID-3598 - Python Fanout Exchange query test fails against Java Broker
  • QPID-3599 - Python session tests fail against the Java Broker due to unexpected redelivered status
  • QPID-3604 - If the connection is stopped the client should release all it's messages in the prefetch buffer
  • QPID-3605 - Durable subscriber with no-local true receives messages on re-connection
  • QPID-3625 - XASessionImpl Incorrectly sets Session acknowledge mode to AUTO_ACKNOWLEDGE when it should be CLIENT_ACKNOWLEDGE
  • QPID-3629 - CPP Broker allows credit window to exceed the request size.
  • QPID-3630 - Remove the "max-session-rate" feature in the C++ Broker.
  • QPID-3631 - The "Programming in Apache Qpid" book does not cover all Java Connection URL options
  • QPID-3635 - AMQQConnectionTest incorrect assumes an order in which the tests are run
  • QPID-3638 - incompatibility with new boost version 1.48
  • QPID-3640 - When releasing msgs, the JMS client should not mark msgs in the prefetch buffer as "redelivered".
  • QPID-3643 - Fanout exchange methods isBound(...) return false for bounded queue
  • QPID-3648 - On shutdown, broker can crash if v1 QMF agents are currently attached.
  • QPID-3658 - Rolling back with ManagedConnectingMBean sometimes fails to rollback the transaction or results in various exceptions propagated into a client.
  • QPID-3659 - Java client mishandles tcp_nodelay when specified as part of the broker URL
  • QPID-3660 - qpid-stat -c columns for "msgIn" and "msgOut" actually display frames, not messages
  • QPID-3661 - Client OSGi bundle cannot deserialise messages
  • QPID-3662 - The AMQConnectionURL class reports connection options twice
  • QPID-3666 - QMF v1 method requests may fail if new object's id overlaps an old deleted object.
  • QPID-3667 - Python QMF console can provide the incorrect user-id under some circumstances.
  • QPID-3669 - Path to qpidd_watchdog executable is hard coded in qpidd
  • QPID-3674 - Windows installer doesn't handle C++ programming examples install correctly
  • QPID-3679 - Documentation for JMS prefetch could use some correction and amplification
  • QPID-3680 - Header exchange bindings not being created via JMX Management Console.
  • QPID-3683 - FailoverBehaviourTest.testPublishClientAcknowledgedWithFailoverMutex/testPublishTransactedAcknowledgedWithFailoverMutex failing regularly on Jenkins.
  • QPID-3691 - Failover should sync once before indicating successfully failing comepletion
  • QPID-3697 - SortedQueue synchronization causes deadlock
  • QPID-3698 - org.apache.qpid.server.store.MessageStoreShutdownTest occasionally fails on Jenkins CI
  • QPID-3700 - Qpid JCA Adapter incorrectly throws JMSException when calling commit on a closed connection, should be IllegalStateException
  • QPID-3704 - SortedQueueTest.testTransactedSortedQueue failing occasionally on 0-9-1 profile
  • QPID-3705 - Thread Deadlock in QpidActivation
  • QPID-3707 - Unbind queue causes connection failure when using AMQP 0-9-1
  • QPID-3711 - run_federation_test test script does not actually run any of the federation.py tests
  • QPID-3712 - QpidBrokerTestCase#isExternalBroker uses incorrect logic to determine if testing with separate Broker process
  • QPID-3715 - On receiving an empty ObjectMessage java client hangs forever
  • QPID-3716 - Sun TCK tests expect an IllegalStateException thrown on invoking of Session#getTransacted() on closed session/connection
  • QPID-3718 - The Ruby bindings failed to properly handle uint8_t types.
  • QPID-3729 - C++ cmake build does not install python pieces needed for tests
  • QPID-3733 - QpidRAManagedConnection setup() method is incorrect for non-XA transaction state as well as username/password
  • QPID-3735 - QpidActivation.start() should not use the JCA WorkManager API control due to JNDI/Classloading issues
  • QPID-3737 - Patch to make qpid-stat -L option work
  • QPID-3739 - Java properties qpid.ssl.keyStoreCertType and qpid.ssl.trustStoreCertType have misleading names and would be better called qpid.ssl.[Key|Trust]ManagerFactory.algorithm
  • QPID-3743 - [Java Broker] Remove catching of Exception during metadata retrieval in BDB store
  • QPID-3747 - PrefetchBehaviourTest.testLowPrefetchCausesMessagesToBeDistributedBetweenConsumers occasionally fails on spawned profiles.
  • QPID-3748 - qmf - Methods cannot be invoked when the agent is in external-storage mode
  • QPID-3755 - Concurrent queue bind on the same queue results in crash
  • QPID-3756 - ManagedConnectionMBeanTest.testChannels fails on 0-10 spawned profiles
  • QPID-3762 - forcefully closed 0-9-1 connections can leak their IoSender on the broker
  • QPID-3763 - AMQConnectionDelegate_0_10 incorrectly prints password to log file
  • QPID-3764 - QpidResourceAdapter, ConnectionFactoryProperties prints connection URL in trace logs that may contain password info
  • QPID-3768 - Test org.apache.qpid.server.queue.SortedQueueTest.testGetNextWithAck fails sporadically on CI
  • QPID-3773 - Creating exchange source routes to different brokers can fail if the channels overlap.
  • QPID-3780 - [Java Broker] Using multiple consumers on a large (e.g. 1million entries+) queue may become excessively slow
  • QPID-3782 - CombinedTest failed - java.lang.IllegalStateException: dispatcher is not started (java-bdb.0-9-1)
  • QPID-3783 - When creating an Address using a toString() of another address object, "None" is used as the subject when it should be Null.
  • QPID-3786 - When creating an destination from an incomming message, the legacy fields should also be populated.
  • QPID-3787 - Segfault in SslPlugin during shutdown
  • QPID-3792 - Test DurableSubscriptionTest.testDurSubAddMessageSelectorNoClose fails sporadically for test profile java-bdb-spawn.0-10
  • QPID-3793 - Test MessageStatisticsTest.testMessagePeakRates fails sporadically on java-bdb-spawn.0-10 test profile
  • QPID-3798 - Prevent qmf.console.py from waiting indefinitely on closing a failed connection on connection retry.
  • QPID-3799 - ACL processing by C++ broker produces unexpected results
  • QPID-3802 - Broker command line processing --help (-h) and --version (-v) no longer work
  • QPID-3803 - System tests SortedQueueTest#test<ACK MODE>SortedQueue fail ocasionally on slow machines
  • QPID-3804 - Rollback or release of an acquired group message may result in message reorder.
  • QPID-3806 - QpidRASessionFactoryImpl closeSession() method incorrectly calls remove on HashSet
  • QPID-3809 - Java Broker killed by java.net.SocketException: Broken pipe (killed by uncaught exception handler)
  • QPID-3810 - [Java broker] stop the acceptor thread exiting when encountering IOExceptions such as too many open files
  • QPID-3812 - [Java] ExceptionListenerTest sporadically fails on java-mms-0.10
  • QPID-3814 - the 0-10 client codepath doesnt send the client version number property during the connection process
  • QPID-3815 - 0-10 connections produce duplicate connection open log messages
  • QPID-3817 - QueueBrowser creation does not work with Address syntax via 'destination.' entries in JNDI properties files
  • QPID-3819 - ExhaustiveACLTests can timeout (but still pass) during teardown [0-9-1]
  • QPID-3820 - ProducerFlowControlTest#testSendTimeout test fails sprodically on 0-10 profiles
  • QPID-3821 - Uncaught exception thrown in QueueRunner and SubFlushRunner run() could cause them to remain stuck in RUNNING state permanently
  • QPID-3823 - ServerSession unblock(AMQQueue) can cause NPE when trying to remove a queue from _blockingQueues Map that is not present
  • QPID-3829 - [Java broker] no-local checking for published messages can prevent 0-8/0-9/0-9-1 connections being garbage collected after they are closed
  • QPID-3832 - Qpid 0.14 broke transport connection setting
  • QPID-3835 - [Java broker] DurableSubscriptions without a selector on 0-10 connections will initially be unsubscribed at reconnect following upgrade of a legacy message store
  • QPID-3836 - no-local does not work for Qpid 0-10 JMS client when using address strings
  • QPID-3839 - messages fetched through browsing receivers are never accepted
  • QPID-3843 - Neither properties, no object type is taken into consideration by ACL plugin when ALL is specified for the operation
  • QPID-3844 - Management ACL lacks the ability to perform queryMBean operation for non-admin users
  • QPID-3845 - User with read access rights on ShutdownMBean is allowed to shutdown broker via JMX
  • QPID-3846 - Management console adds empty nodes ("connections", "exchanges" and "queue") for the users without access rights on virtual hosts
  • QPID-3847 - Object IDs (in console.py) which are learned via qmfv1 publish are not properly regenerated when they contain recursive references
  • QPID-3854 - SO_REUSEADDR should be applied to server socket before bind()
  • QPID-3855 - [Java broker] the activeConsumerCount for a queue can be incorrect for certain types of subscriptions
  • QPID-3857 - Test ConnectionTest#testClientIDVerificationForSameUser fails occasionally
  • QPID-3867 - AMQQueueMBean#clearQueue|moveMessages|copyMessages should be certain to rollback transactions in the event of exception
  • QPID-3870 - C++ tests based on python don't always have correct PYTHONPATH on Windows
  • QPID-3877 - Modifying a message's headers may cause a broker crash.
  • QPID-3893 - C++ broker appears to segfault during MultipleTransactedBatchProducerTest
  • QPID-3896 - Broker crash when using auto delete queues in a cluster
  • QPID-3898 - qpid-tool bounces repeatedly when using SSL
  • QPID-3899 - Grouped messages with expired TTL will cause the broker to crash.
  • QPID-3900 - Windows build fails to compile store ms-clfs
  • QPID-3901 - 0.16 Release issues for Windows
  • QPID-3905 - NullPointerException is thrown on rejecting messages whilst closing the connection
  • QPID-3907 - qpid-config fails when listing queues that have alternate exchange
  • QPID-3911 - Consumer.close() and session.rollback() deadlocks
  • QPID-3919 - qpid-printevents can't connect to broker
  • QPID-3920 - Occasional header corruption observed in federated system
  • QPID-3927 - Java Broker Priority Queue dispatch not working correctly
  • QPID-3937 - Wrapped Python uses syntax that is incompatible with older Python interpreters
  • QPID-3938 - qmf-tool fails to create connection against updated Python wrapper
  • QPID-3939 - Bumps the Ruby gem version to 0.16
  • QPID-3940 - Includes the spec and features subdirectories in the gemfile for Ruby.
  • QPID-3944 - Autotools build system doesn't correctly detect python developer libraries
  • QPID-3946 - Wrapped Python typemap uses "uuid" module that is not available in Python 2.4
  • QPID-3962 - Added licensing to the Cucumber feature test step definitions.r
  • QPID-3984 - HA tests fail in distribution
  • QPID-509 - Messages to topics are sent with mandatory flag set to true, should be false

Improvements

  • QPID-1505 - PlainSaslServer throws and immediately catches and wraps Sasl Exception
  • QPID-24 - Extend Qpid transaction functionality to support distributed transactions (JTA)
  • QPID-2894 - Reload-ACL command is not on any management tools
  • QPID-3097 - Adapt installer to rearranged C++ examples
  • QPID-3193 - .NET Binding for Messaging classes need a test to check that binding is still in effect
  • QPID-3325 - make the ApplicationRegistry unregister its shutdown hook when closed by means other than the shutdown hook
  • QPID-3518 - Introduce client side ability to detect server side selector support presence
  • QPID-3537 - Rename the :block option to :sync in Sender.send so that it matches the C++ APIs.
  • QPID-3551 - Refactors the Qpid::Messaging::Connection APIs.
  • QPID-3607 - pkg config for qmf2 library
  • QPID-3608 - Improve consume performance when more data is being written by the broker than read
  • QPID-3639 - Refactored the APIs for Qpid::Messaging::Session and modified the documentation.
  • QPID-3641 - ACLV2 Simplifications and Improvements for Java Broker
  • QPID-3651 - Improve the Qpid::Messaging::Sender APIs and documentation.
  • QPID-3655 - Improve the Qpid::Messaging::Receiver APIs and documentation.
  • QPID-3663 - Documentation: The LVQ section of "AMQP Messaging Broker (Implemented in C++)" needs to be updated
  • QPID-3673 - Don't install the "old" C++ API programming examples
  • QPID-3676 - Correct issues found by findbugs marked as "blockers".
  • QPID-3682 - Shutdown Plugin Improvements
  • QPID-3687 - [Java Broker] Performance Improvements - Enqueuing/Dequeing
  • QPID-3688 - AMQDestination and children should conform to the JavaBean pattern
  • QPID-3703 - ACL Test improvements
  • QPID-3713 - Remove redundant failover test from Java system test suite.
  • QPID-3714 - [Java] Performance Improvements
  • QPID-3717 - [Java Broker] Implement Producer Side Flow Control for 0-10
  • QPID-3720 - [Java Broker] Implement Message Grouping
  • QPID-3727 - [RUBY] Multiple enhancements to the Ruby client codebase include RSpec tests, new RDocs and bug fixes to Message, Address and Connection.
  • QPID-3732 - Request/Response JCA example should be enhanced
  • QPID-3734 - Qpid JCA AdminObjects should be refactored to use AMQDestination JavaBean
  • QPID-3736 - [Java Broker] Update BDB store to v5 and utilise explicit log flush for significant performance improvement
  • QPID-3746 - Improve JCA Examples
  • QPID-3754 - Takes the Ruby bindings to 100% unit test coverage.
  • QPID-3758 - [Java] Reduce memory overhead of Sessions
  • QPID-3761 - rename the Java brokers fallback log4j properties file to prevent unexpected usage
  • QPID-3766 - Cache toString() results in Address class for performance gain
  • QPID-3774 - [Java Broker] Allow out of order completion of persistent enqueues / dequeues
  • QPID-3784 - Add special JVM environment variable to run dispatcher thread as daemon/non deamon depending from its value.
  • QPID-3788 - Remove remaining MINA configuration keys (and those from other retired impls) from the Java Broker's config.xml
  • QPID-3789 - [Java] Small tidyups to reduce noise on code metric tools
  • QPID-3800 - [Java broker] allow disabling protocol versions broker-wide in addition to the per-port exclusion feature
  • QPID-3801 - [Java] Move JMS Selector code to common to remove duplication between client and broker
  • QPID-3805 - Remove obsolete security plugins allow-all and deny-all
  • QPID-3807 - Improve the thread safety of JMS session dispatcher
  • QPID-3813 - [Java broker] enable configuring the default reply to an unsupported protocol version initiation
  • QPID-3816 - [Java broker] add the client version to the connection open log mesages
  • QPID-3818 - Replace CombinedTest with a simpler JMSReplyToTest
  • QPID-3824 - Additional queue statistics, posix memory statistics, and broker-scope statistics
  • QPID-3830 - remove confusing old client examples
  • QPID-3831 - the 0-10 Java client should use AcquireMode=PRE_ACQUIRED when using selectors on a Queue destination and server-side selectors are in use
  • QPID-3837 - [Java broker] improve exception message when attempt is made to redeclare an exchange with a different type on a 0-10 connection
  • QPID-3840 - Automate testing of qpid-passwd script
  • QPID-3841 - Improve batching of writes for outbound messages.
  • QPID-3842 - Java Broker should report platform and memory size on startup
  • QPID-3848 - [Java broker] relax type checking during passive exchange-declares to allow null/empty type values for consistency with the C++ broker/client
  • QPID-3850 - Add a switch into default exception handler to prevent broker from exiting on unhandled exception
  • QPID-3861 - [Java Broker] Run (some of the) Python tests for Message Grouping against the Java Broker
  • QPID-3865 - CancelTest fails occiasionally on slower CI box (and duplicates the QueueBrowser*Tests)
  • QPID-3871 - Added --mgmt-publish switch to the C++ broker
  • QPID-3875 - Reduce processing overhead when updating multiple statistic counters
  • QPID-3881 - [Java broker] ensure that unroutable 0-8/0-9/0-9-1 messages are not entered into the store
  • QPID-3888 - make the SimpleQueueEntryList Iterator clean the list node structure during operation
  • QPID-464 - Fix Broker Exception Handling
  • QPID-792 - Need to revise QueueBrowser implementation strategy

Tasks

  • QPID-3600 - Investigate the python tests failing against the Java Broker
  • QPID-3684 - Remove the Message Store Tool and its associated script and configuration
  • QPID-3730 - remove ReadWriteJobQueue as it is no longer required
  • QPID-3775 - Automate the manual persistent store tests
  • QPID-3779 - Remove/rewrite system tests that depend on old test framework code (and fail occasionally on JDK1.7)
  • QPID-3882 - [Java broker] remove the unused experimental info plugin