diff options
Diffstat (limited to 'cpp/src/qpid/ha/ReplicationTest.cpp')
-rw-r--r-- | cpp/src/qpid/ha/ReplicationTest.cpp | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/cpp/src/qpid/ha/ReplicationTest.cpp b/cpp/src/qpid/ha/ReplicationTest.cpp index 88a969dbfd..647523ef2c 100644 --- a/cpp/src/qpid/ha/ReplicationTest.cpp +++ b/cpp/src/qpid/ha/ReplicationTest.cpp @@ -19,7 +19,9 @@ * */ #include "ReplicationTest.h" +#include "qpid/log/Statement.h" #include "qpid/broker/Queue.h" +#include "qpid/broker/Exchange.h" #include "qpid/framing/FieldTable.h" namespace qpid { @@ -27,48 +29,47 @@ namespace ha { using types::Variant; -ReplicateLevel ReplicationTest::replicateLevel(const std::string& str) { +ReplicateLevel ReplicationTest::getLevel(const std::string& str) { Enum<ReplicateLevel> rl(replicateDefault); if (!str.empty()) rl.parse(str); return rl.get(); } -ReplicateLevel ReplicationTest::replicateLevel(const framing::FieldTable& f) { +ReplicateLevel ReplicationTest::getLevel(const framing::FieldTable& f) { if (f.isSet(QPID_REPLICATE)) - return replicateLevel(f.getAsString(QPID_REPLICATE)); + return getLevel(f.getAsString(QPID_REPLICATE)); else return replicateDefault; } -ReplicateLevel ReplicationTest::replicateLevel(const Variant::Map& m) { +ReplicateLevel ReplicationTest::getLevel(const Variant::Map& m) { Variant::Map::const_iterator i = m.find(QPID_REPLICATE); if (i != m.end()) - return replicateLevel(i->second.asString()); + return getLevel(i->second.asString()); else return replicateDefault; } -namespace { -const std::string AUTO_DELETE_TIMEOUT("qpid.auto_delete_timeout"); +ReplicateLevel ReplicationTest::getLevel(const broker::Queue& q) { + const Variant::Map& qmap(q.getSettings().original); + Variant::Map::const_iterator i = qmap.find(QPID_REPLICATE); + if (i != qmap.end()) + return getLevel(i->second.asString()); + else + return getLevel(q.getSettings().storeSettings); } -bool ReplicationTest::isReplicated( - ReplicateLevel level, const Variant::Map& args, bool autodelete, bool exclusive) -{ - bool ignore = autodelete && exclusive && args.find(AUTO_DELETE_TIMEOUT) == args.end(); - return !ignore && replicateLevel(args) >= level; +ReplicateLevel ReplicationTest::getLevel(const broker::Exchange& ex) { + return getLevel(ex.getArgs()); } -bool ReplicationTest::isReplicated( - ReplicateLevel level, const framing::FieldTable& args, bool autodelete, bool exclusive) +ReplicateLevel ReplicationTest::useLevel(const broker::Queue& q) { - bool ignore = autodelete && exclusive && !args.isSet(AUTO_DELETE_TIMEOUT); - return !ignore && replicateLevel(args) >= level; + return q.getSettings().isTemporary ? ReplicationTest(NONE).getLevel(q) : getLevel(q); } -bool ReplicationTest::isReplicated(ReplicateLevel level, const broker::Queue& q) -{ - return isReplicated(level, q.getSettings().storeSettings, q.isAutoDelete(), q.hasExclusiveOwner()); +ReplicateLevel ReplicationTest::useLevel(const broker::Exchange& ex) { + return ReplicationTest::getLevel(ex); } |