diff options
| author | Alan Conway <aconway@apache.org> | 2010-10-18 19:36:13 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2010-10-18 19:36:13 +0000 |
| commit | a08d54e27d4e91b52c5979cc566ab3e933878983 (patch) | |
| tree | 7f57ad88051e4a02f52d4bdf395968549e24f57a /cpp/src/qpid/broker/Exchange.cpp | |
| parent | 8e53bc375ef2bfb4b05cc32b4a8c0042d95b9ec2 (diff) | |
| download | qpid-python-a08d54e27d4e91b52c5979cc566ab3e933878983.tar.gz | |
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
Diffstat (limited to 'cpp/src/qpid/broker/Exchange.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Exchange.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
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> message; + ScopedClusterRouting(Broker* b, boost::intrusive_ptr<Message> 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) { |
