Bug 873883

Summary: Dynamic federation bindings can become out-of-sync
Product: Red Hat Enterprise MRG Reporter: Jason Dillaman <jdillama>
Component: qpid-cppAssignee: Chuck Rolke <crolke>
Status: CLOSED ERRATA QA Contact: Zdenek Kraus <zkraus>
Severity: unspecified Docs Contact:
Priority: high    
Version: DevelopmentCC: crolke, jross, lzhaldyb, mcressma, zkraus
Target Milestone: 3.0Keywords: OtherQA, Patch
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: qpid-cpp-0.18-9 Doc Type: Bug Fix
Doc Text:
When dynamic federation was configured using an existing queue, it was possible for the bindings on the source exchange to become out-of-sync with the destination exchange if there was an interruption in the bridge (for example: connectivity loss, session error, etc). An unbind event occurred on the destination exchange while the bridge was detached. Normally, dynamic federation would utilize an auto-delete queue for the bridge queue. The missing unbind events were inconsequential because the queue would be deleted upon bridge interruption. However, using dynamic federation with an existing queue, it was possible the queue would not be auto-deleted. In this scenario, when the connection was interrupted, the queue stayed alive and the bindings were never deleted. This behavior caused the propagated queue bindings to exist beyond their intended lifetime, and interfere with the creation of future propagated bindings. The fix tracks the state of propagated bindings for each Session, and ensures that propagated bindings are torn down properly. Dynamic bindings are now deleted, even when the connection over which the binding was created is interrupted. The broker has no stale dynamic bindings to interfere with the creation of new federated routes when the federation cycle is restarted.
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-09-24 15:05:28 UTC Type: Bug
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    
Attachments:
Description Flags
Patch to auto-unbind propagated bindings when destination broker disconnects
none
Updated patch to auto-unbind propagated bindings when destination broker disconnects none

Description Jason Dillaman 2012-11-06 21:49:21 UTC
Description of problem:
When dynamic federation is configured using an existing queue, it is possible for the bindings on the source exchange to become out-of-sync with the destination exchange if there is an interruption in the bridge (i.e. connectivity loss, session error, etc) and an unbind event occurs on the destination exchange while the bridge is detached.  

Normally dynamic federation would utilize an auto-delete queue for the bridge queue, so the missing unbind events are inconsequential since the queue would be deleted upon an interruption in the bridge.  However, using dynamic federation with an existing queue allows full control over the queue properties and enables support for message acks and is therefore highly desirable.

Version-Release number of selected component (if applicable):
Qpid 0.18

How reproducible:
100%

Steps to Reproduce:
1. Create a bridge queue on the source broker
2. Create a dynamic federated route between a destination broker exchange and source broker exchange, using the existing bridge queue
3. Create a binding on the destination exchange to propagate the binding to the source exchange
4. Disconnect the source and destination brokers
5. While source and destination brokers are disconnected, unbind the previously created binding

Actual results:
The binding is never removed on the source exchange

Expected results:
The binding is removed on the source exchange either when the bridge was initially lost or shortly after the source and destination bridges reconnect

Additional info:

Comment 1 Jason Dillaman 2012-11-09 15:19:38 UTC
Created attachment 641618 [details]
Patch to auto-unbind propagated bindings when destination broker disconnects

Patch also addresses need described in QPID-3777

Comment 4 Chuck Rolke 2012-11-10 11:41:30 UTC
The self test code in the attachment passes even without the rest of the patch.

Comment 6 Jason Dillaman 2012-11-10 21:11:10 UTC
Created attachment 642320 [details]
Updated patch to auto-unbind propagated bindings when destination broker disconnects

Comment 7 Chuck Rolke 2012-11-12 18:12:37 UTC
The second patch (attachment 642320 [details]) passes federation self test

Comment 11 Zdenek Kraus 2013-07-01 10:37:55 UTC
This fix looks fine.


This was tested on RHEL 5.9, 6.4 and i686, x86_64 with packages:

python-qpid-0.22-4
python-qpid-qmf-0.22-5
qpid-cpp-client-0.22-6
qpid-cpp-client-devel-0.22-6
qpid-cpp-client-devel-docs-0.22-6
qpid-cpp-client-rdma-0.22-6
qpid-cpp-client-ssl-0.22-6
qpid-cpp-server-0.22-6
qpid-cpp-server-devel-0.22-6
qpid-cpp-server-ha-0.22-6
qpid-cpp-server-rdma-0.22-6
qpid-cpp-server-ssl-0.22-6
qpid-cpp-server-store-0.22-6
qpid-cpp-server-xml-0.22-6
qpid-proton-c-0.4-2.2
qpid-qmf-0.22-5
qpid-tools-0.22-2

Comment 12 Jared MORGAN 2014-09-17 21:34:02 UTC
This issue was discovered in a development build. In hindsight, this issue therefore does not require Release Notes because a customer would never have encountered this issue. Removing from 3.0 Release Notes.

Comment 13 errata-xmlrpc 2014-09-24 15:05:28 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHEA-2014-1296.html