diff options
Diffstat (limited to 'qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp')
-rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp b/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp index f1d29fe00e..50e3b081c7 100644 --- a/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp @@ -103,7 +103,8 @@ bool getLifetimeDescriptorSymbol(QueueSettings::LifetimePolicy policy, pn_bytes_ } -NodeProperties::NodeProperties() : received(false), queue(true), durable(false), autoDelete(false), exclusive(false), exchangeType("topic"), lifetime(QueueSettings::DELETE_IF_UNUSED) {} +NodeProperties::NodeProperties(bool isDynamic) : received(false), queue(true), durable(false), autoDelete(false), exclusive(false), + dynamic(isDynamic), exchangeType("topic"), lifetime(QueueSettings::DELETE_IF_UNUSED) {} void NodeProperties::read(pn_data_t* data) { @@ -111,6 +112,11 @@ void NodeProperties::read(pn_data_t* data) reader.read(data); } +bool NodeProperties::wasSpecified(const std::string& key) const +{ + return specified.find(key) != specified.end(); +} + void NodeProperties::write(pn_data_t* data, boost::shared_ptr<Queue> node) { if (received) { @@ -202,6 +208,7 @@ void NodeProperties::process(const std::string& key, const qpid::types::Variant& { received = true; QPID_LOG(debug, "Processing node property " << key << " = " << value); + specified.insert(key); if (key == SUPPORTED_DIST_MODES) { if (value == MOVE) queue = true; else if (value == COPY) queue = false; @@ -317,7 +324,9 @@ void NodeProperties::onSymbolValue(const CharSequence& key, const CharSequence& QueueSettings NodeProperties::getQueueSettings() { - QueueSettings settings(durable, autoDelete); + //assume autodelete for dynamic nodes unless explicitly requested + //otherwise or unless durability is requested + QueueSettings settings(durable, autoDelete || (dynamic && !wasSpecified(AUTO_DELETE) && !durable)); qpid::types::Variant::Map unused; settings.populate(properties, unused); settings.lifetime = lifetime; |