summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Makefile.am8
-rw-r--r--cpp/src/qpid/broker/Broker.cpp2
-rw-r--r--cpp/src/qpid/broker/Queue.cpp13
-rw-r--r--cpp/src/qpid/broker/Vhost.cpp2
-rw-r--r--cpp/src/qpid/management/ManagementAgent.cpp11
-rw-r--r--cpp/src/qpid/management/ManagementAgent.h4
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,