Bug 729441

Summary: Empty bindings are not internally pruned from the direct exchange
Product: Red Hat Enterprise MRG Reporter: Jason Dillaman <jdillama>
Component: qpid-cppAssignee: Gordon Sim <gsim>
Status: CLOSED CURRENTRELEASE QA Contact: Leonid Zhaldybin <lzhaldyb>
Severity: medium Docs Contact:
Priority: high    
Version: 1.3CC: csuleski, esammons, freznice, gsim, iboverma, jross, lzhaldyb, mcressma, pmoravec, rfreire
Target Milestone: 2.1.2   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: qpid-cpp-0.14 Doc Type: Bug Fix
Doc Text:
Cause: Adding and removing bindings from the direct exchange using unique keys e.g. when creating and deleting lots of uniquely named temporary queues. Consequence: The bindings were not fully cleared up on removal, causing memory growth. Fix: Bindings are now properly leaned up when removed. Result: Memory is no longer leaked.
Story Points: ---
Clone Of: Environment:
Last Closed: 2012-11-14 20:12:14 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 698367    

Description Jason Dillaman 2011-08-09 18:47:32 UTC
Description of problem:
Each queue that is created is automatically bound to the default (direct) exchange with a routing key that matches the queue name.  When the queue is deleted, the queue is correctly removed from the binding map, but the mapping from routing key to queues is not removed even when there are no queues bound to the routing key.  

In a case where thousands of uniquely named queues are created and deleted as transient storage, the memory usage of the broker will continue to grow as the default exchange's routing key map continues to grow. 

Version-Release number of selected component (if applicable):
qpid-cpp-server-0.7.946106-32_ptc_hotfix_6_v3.el5

How reproducible:
100%

Steps to Reproduce:
1. Continuously declare and delete queues with unique names
  
Actual results:
The broker memory utilization grow as the bindings on the default (direct) exchange are not completely cleaned up

Expected results:
The broker memory utilization will not continue to grow

Additional info:

Comment 1 Jason Dillaman 2011-08-09 20:43:47 UTC
See https://issues.apache.org/jira/browse/QPID-3403 for proposed patch

Comment 2 Gordon Sim 2011-08-10 17:10:09 UTC
Fixed upstream: http://svn.apache.org/viewvc?view=rev&rev=1156266

Comment 3 Mike Cressman 2012-03-02 15:37:51 UTC
This is already in the 2.1.2 release (through the 0.14 rebase from upstream), so we just need to add it to the errata.

Comment 7 Leonid Zhaldybin 2012-03-06 14:48:45 UTC
Tested on RHEL5.8 and RHEL6.2 (i686 and x86_64). Packages tested:

RHEL6.2
python-qpid-0.14-5.el6.noarch
python-qpid-qmf-0.14-4.el6.i686
qpid-cpp-client-0.14-10.el6.i686
qpid-cpp-client-devel-0.14-10.el6.i686
qpid-cpp-client-rdma-0.14-10.el6.i686
qpid-cpp-client-ssl-0.14-10.el6.i686
qpid-cpp-server-0.14-10.el6.i686
qpid-cpp-server-cluster-0.14-10.el6.i686
qpid-cpp-server-devel-0.14-10.el6.i686
qpid-cpp-server-rdma-0.14-10.el6.i686
qpid-cpp-server-ssl-0.14-10.el6.i686
qpid-cpp-server-store-0.14-10.el6.i686
qpid-cpp-server-xml-0.14-10.el6.i686
qpid-java-client-0.14-3.el6.noarch
qpid-java-common-0.14-3.el6.noarch
qpid-java-example-0.14-3.el6.noarch
qpid-qmf-0.14-4.el6.i686
qpid-tools-0.14-1.el6.noarch
ruby-qpid-qmf-0.14-4.el6.i686

RHEL5.8
python-qpid-0.14-3.el5
python-qpid-qmf-0.14-3.el5
qpid-cpp-client-0.14-10.el5
qpid-cpp-client-devel-0.14-10.el5
qpid-cpp-client-rdma-0.14-10.el5
qpid-cpp-client-ssl-0.14-10.el5
qpid-cpp-server-0.14-10.el5
qpid-cpp-server-cluster-0.14-10.el5
qpid-cpp-server-devel-0.14-10.el5
qpid-cpp-server-rdma-0.14-10.el5
qpid-cpp-server-ssl-0.14-10.el5
qpid-cpp-server-store-0.14-10.el5
qpid-cpp-server-xml-0.14-10.el5
qpid-java-client-0.14-3.el5
qpid-java-common-0.14-3.el5
qpid-java-example-0.14-3.el5
qpid-qmf-0.14-3.el5
qpid-qmf-devel-0.14-3.el5
qpid-tools-0.14-1.el5
ruby-qpid-qmf-0.14-3.el5

According to the output of command 'pmap $(which qpidd)', memory consumption by qpidd broker did not change during three-hours testrun.

-> VERIFIED.

Comment 8 Gordon Sim 2012-03-06 17:57:16 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
Cause:

  Adding and removing bindings from the direct exchange using unique keys e.g. when creating and deleting lots of uniquely named temporary queues.

Consequence:

  The bindings were not fully cleared up on removal, causing memory growth.

Fix:

  Bindings are now properly leaned up when removed.

Result:

  Memory is no longer leaked.

Comment 9 Pavel Moravec 2012-03-08 09:34:01 UTC
*** Bug 704541 has been marked as a duplicate of this bug. ***