From a08d54e27d4e91b52c5979cc566ab3e933878983 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 18 Oct 2010 19:36:13 +0000 Subject: Introduce broker::Cluster interface. See cpp/src/qpid/cluster/new-cluster-design.txt and new-cluster-plan.txt. qpid/cpp/src/tests/BrokerClusterCalls.cpp is a unit test that verifies the broker makes the expected calls on broker::Cluster in various situations. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1023966 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Exchange.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/broker/Exchange.cpp') diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index 98980e0360..aaf0805543 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -22,6 +22,7 @@ #include "qpid/broker/Exchange.h" #include "qpid/broker/ExchangeRegistry.h" #include "qpid/broker/Broker.h" +#include "qpid/broker/Cluster.h" #include "qpid/management/ManagementAgent.h" #include "qpid/broker/Queue.h" #include "qpid/log/Statement.h" @@ -78,10 +79,23 @@ Exchange::PreRoute::~PreRoute(){ } } +// Bracket a scope with calls to Cluster::routing and Cluster::routed +struct ScopedClusterRouting { + Broker* broker; + boost::intrusive_ptr message; + ScopedClusterRouting(Broker* b, boost::intrusive_ptr m) + : broker(b), message(m) { + if (broker) broker->getCluster().routing(message); + } + ~ScopedClusterRouting() { + if (broker) broker->getCluster().routed(message); + } +}; + void Exchange::doRoute(Deliverable& msg, ConstBindingList b) { + ScopedClusterRouting scr(broker, &msg.getMessage()); int count = 0; - if (b.get()) { // Block the content release if the message is transient AND there is more than one binding if (!msg.getMessage().isPersistent() && b->size() > 1) { -- cgit v1.2.1