From 38723ee5b89df32d8d36dee1cb8c2826e5bfe8e9 Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Thu, 13 Jan 2011 20:54:03 +0000 Subject: Fixes QPID-2499: Stale federation routes remain after route deletion. Federated binds and unbinds need to know which federation origins are associated with the bindings for each queue. When origins are added or deleted, the corresponding bindings need to be propagated. fedBindings[queueName] contains the origins associated with the given queue. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1058747 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/FanOutExchange.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'cpp/src/qpid/broker/FanOutExchange.cpp') diff --git a/cpp/src/qpid/broker/FanOutExchange.cpp b/cpp/src/qpid/broker/FanOutExchange.cpp index a33eba1d09..ac2c914a97 100644 --- a/cpp/src/qpid/broker/FanOutExchange.cpp +++ b/cpp/src/qpid/broker/FanOutExchange.cpp @@ -53,18 +53,18 @@ bool FanOutExchange::bind(Queue::shared_ptr queue, const string& /*key*/, const Binding::shared_ptr binding (new Binding ("", queue, this, FieldTable(), fedOrigin)); if (bindings.add_unless(binding, MatchQueue(queue))) { binding->startManagement(); - propagate = fedBinding.addOrigin(fedOrigin); + propagate = fedBinding.addOrigin(queue->getName(), fedOrigin); if (mgmtExchange != 0) { mgmtExchange->inc_bindingCount(); } } else { // queue already present - still need to track fedOrigin - fedBinding.addOrigin(fedOrigin); + fedBinding.addOrigin(queue->getName(), fedOrigin); return false; } } else if (fedOp == fedOpUnbind) { - propagate = fedBinding.delOrigin(fedOrigin); - if (fedBinding.count() == 0) + propagate = fedBinding.delOrigin(queue->getName(), fedOrigin); + if (fedBinding.countFedBindings(queue->getName()) == 0) unbind(queue, "", 0); } else if (fedOp == fedOpReorigin) { if (fedBinding.hasLocal()) { -- cgit v1.2.1