diff options
author | Kim van der Riet <kpvdr@apache.org> | 2009-09-11 13:33:42 +0000 |
---|---|---|
committer | Kim van der Riet <kpvdr@apache.org> | 2009-09-11 13:33:42 +0000 |
commit | b171cc419ae5d2bc747ec2465ad1c76445f8bd37 (patch) | |
tree | 2f4d01f55832b1cee196214eae31af47f4ca4a78 /cpp/src/qpid/broker/DirectExchange.cpp | |
parent | 613071992900172cb00b5eff9f39b1cc06a5e2a8 (diff) | |
download | qpid-python-b171cc419ae5d2bc747ec2465ad1c76445f8bd37.tar.gz |
Joint checkin with cctrieloff. Refactor of exchange routing so that multi-queue policy differences may be resolved and allow for correct multi-queue flow-to-disk behavior. Different queues may have differing policies and persistence properties - these were previously being neglected. New c++ test added.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@813825 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/DirectExchange.cpp')
-rw-r--r-- | cpp/src/qpid/broker/DirectExchange.cpp | 37 |
1 files changed, 5 insertions, 32 deletions
diff --git a/cpp/src/qpid/broker/DirectExchange.cpp b/cpp/src/qpid/broker/DirectExchange.cpp index b9f24dee5f..6ffa7e2f8e 100644 --- a/cpp/src/qpid/broker/DirectExchange.cpp +++ b/cpp/src/qpid/broker/DirectExchange.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -28,7 +28,7 @@ using namespace qpid::sys; using qpid::management::Manageable; namespace _qmf = qmf::org::apache::qpid::broker; -namespace +namespace { const std::string qpidFedOp("qpid.fed.op"); const std::string qpidFedTags("qpid.fed.tags"); @@ -98,7 +98,7 @@ bool DirectExchange::bind(Queue::shared_ptr queue, const string& routingKey, con */ std::vector<std::string> keys2prop; { - Mutex::ScopedLock l(lock); + Mutex::ScopedLock l(lock); for (Bindings::iterator iter = bindings.begin(); iter != bindings.end(); iter++) { const BoundKey& bk = iter->second; @@ -150,34 +150,7 @@ void DirectExchange::route(Deliverable& msg, const string& routingKey, const Fie Mutex::ScopedLock l(lock); p = bindings[routingKey].queues.snapshot(); } - int count(0); - - if (p) { - for(std::vector<Binding::shared_ptr>::const_iterator i = p->begin(); i != p->end(); i++, count++) { - msg.deliverTo((*i)->queue); - if ((*i)->mgmtBinding != 0) - (*i)->mgmtBinding->inc_msgMatched(); - } - } - - if(!count){ - QPID_LOG(info, "DirectExchange " << getName() << " could not route message with key " << routingKey - << "; no matching binding found"); - if (mgmtExchange != 0) { - mgmtExchange->inc_msgDrops(); - mgmtExchange->inc_byteDrops(msg.contentSize()); - } - } else { - if (mgmtExchange != 0) { - mgmtExchange->inc_msgRoutes(count); - mgmtExchange->inc_byteRoutes(count * msg.contentSize()); - } - } - - if (mgmtExchange != 0) { - mgmtExchange->inc_msgReceives(); - mgmtExchange->inc_byteReceives(msg.contentSize()); - } + doRoute(msg, p); } |