diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Makefile.am | 8 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Broker.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 13 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Vhost.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/management/ManagementAgent.cpp | 11 | ||||
-rw-r--r-- | cpp/src/qpid/management/ManagementAgent.h | 4 |
6 files changed, 29 insertions, 11 deletions
diff --git a/cpp/src/Makefile.am b/cpp/src/Makefile.am index 2efad2d116..d663bbf9f0 100644 --- a/cpp/src/Makefile.am +++ b/cpp/src/Makefile.am @@ -22,10 +22,10 @@ rgen_cmd=ruby -I $(rgen_dir) $(rgen_dir)/generate $(srcdir)/gen $(specs) all $(s # Management generator. mgen_dir=$(top_srcdir)/managementgen -mgen_cmd=$(mgen_dir)/main.py -o $(srcdir)/gen/qpid/management \ - -t $(top_srcdir)/../specs/management-types.xml \ - -s $(top_srcdir)/../specs/management-schema.xml \ - -i $(mgen_dir)/templates -m $(srcdir)/managementgen.mk +mgen_cmd=$(mgen_dir)/main.py -m $(srcdir)/managementgen.mk \ + $(top_srcdir)/../specs/management-schema.xml \ + $(top_srcdir)/../specs/management-types.xml \ + $(mgen_dir)/templates $(srcdir)/gen/qpid/management endif # GENERATE diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp index 5607d22498..c4a83b05e7 100644 --- a/cpp/src/qpid/broker/Broker.cpp +++ b/cpp/src/qpid/broker/Broker.cpp @@ -146,7 +146,7 @@ Broker::Broker(const Broker::Options& conf) : mgmtObject->set_clusterName (""); mgmtObject->set_version (PACKAGE_VERSION); - managementAgent->addObject (mgmtObject); + managementAgent->addObject (mgmtObject, 1, 0); // Since there is currently no support for virtual hosts, a placeholder object // representing the implied single virtual host is added here to keep the diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index f753e7ef75..c7dd656a4e 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -65,7 +65,11 @@ Queue::Queue(const string& _name, bool _autodelete, { mgmtObject = management::Queue::shared_ptr (new management::Queue (this, parent, _name, _store != 0, _autodelete, 0)); - agent->addObject (mgmtObject); + + // Add the object to the management agent only if this queue is not durable. + // If it's durable, we will add it later when the queue is assigned a persistenceId. + if (store == 0) + agent->addObject (mgmtObject); } } } @@ -519,7 +523,12 @@ uint64_t Queue::getPersistenceId() const void Queue::setPersistenceId(uint64_t _persistenceId) const { - persistenceId = _persistenceId; + if (mgmtObject != 0 && persistenceId == 0) + { + ManagementAgent::shared_ptr agent = ManagementAgent::getAgent (); + agent->addObject (mgmtObject, _persistenceId); + } + persistenceId = _persistenceId; } void Queue::encode(framing::Buffer& buffer) const diff --git a/cpp/src/qpid/broker/Vhost.cpp b/cpp/src/qpid/broker/Vhost.cpp index 537d2abf0e..06a8c8eca3 100644 --- a/cpp/src/qpid/broker/Vhost.cpp +++ b/cpp/src/qpid/broker/Vhost.cpp @@ -33,7 +33,7 @@ Vhost::Vhost (management::Manageable* parentBroker) { mgmtObject = management::Vhost::shared_ptr (new management::Vhost (this, parentBroker, "/")); - agent->addObject (mgmtObject); + agent->addObject (mgmtObject, 2, 0); } } } diff --git a/cpp/src/qpid/management/ManagementAgent.cpp b/cpp/src/qpid/management/ManagementAgent.cpp index d3c5d7c266..39fab270af 100644 --- a/cpp/src/qpid/management/ManagementAgent.cpp +++ b/cpp/src/qpid/management/ManagementAgent.cpp @@ -73,10 +73,17 @@ void ManagementAgent::setExchange (broker::Exchange::shared_ptr _mexchange, dExchange = _dexchange; } -void ManagementAgent::addObject (ManagementObject::shared_ptr object) +void ManagementAgent::addObject (ManagementObject::shared_ptr object, + uint64_t persistenceId, + uint64_t idOffset) { RWlock::ScopedWlock writeLock (userLock); - uint64_t objectId = nextObjectId++; + uint64_t objectId; + + if (persistenceId == 0) + objectId = nextObjectId++; + else + objectId = 0x8000000000000000ULL | (persistenceId + idOffset); object->setObjectId (objectId); managementObjects[objectId] = object; diff --git a/cpp/src/qpid/management/ManagementAgent.h b/cpp/src/qpid/management/ManagementAgent.h index 36ba1f0542..30b8857c27 100644 --- a/cpp/src/qpid/management/ManagementAgent.h +++ b/cpp/src/qpid/management/ManagementAgent.h @@ -51,7 +51,9 @@ class ManagementAgent void setInterval (uint16_t _interval) { interval = _interval; } void setExchange (broker::Exchange::shared_ptr mgmtExchange, broker::Exchange::shared_ptr directExchange); - void addObject (ManagementObject::shared_ptr object); + void addObject (ManagementObject::shared_ptr object, + uint64_t persistenceId = 0, + uint64_t idOffset = 10); void clientAdded (void); void dispatchCommand (broker::Deliverable& msg, const std::string& routingKey, |