summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/management
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/management')
-rw-r--r--cpp/src/qpid/management/ManagementAgent.cpp26
-rw-r--r--cpp/src/qpid/management/ManagementAgent.h9
-rw-r--r--cpp/src/qpid/management/ManagementExchange.cpp11
-rw-r--r--cpp/src/qpid/management/ManagementExchange.h5
4 files changed, 34 insertions, 17 deletions
diff --git a/cpp/src/qpid/management/ManagementAgent.cpp b/cpp/src/qpid/management/ManagementAgent.cpp
index 85c2acce1d..90da74404b 100644
--- a/cpp/src/qpid/management/ManagementAgent.cpp
+++ b/cpp/src/qpid/management/ManagementAgent.cpp
@@ -33,6 +33,7 @@ using namespace qpid::broker;
using namespace qpid::sys;
ManagementAgent::shared_ptr ManagementAgent::agent;
+bool ManagementAgent::enabled = 0;
ManagementAgent::ManagementAgent (uint16_t _interval) : interval (_interval)
{
@@ -40,16 +41,21 @@ ManagementAgent::ManagementAgent (uint16_t _interval) : interval (_interval)
nextObjectId = uint64_t (qpid::sys::Duration (qpid::sys::now ()));
}
+void ManagementAgent::enableManagement (void)
+{
+ enabled = 1;
+}
+
ManagementAgent::shared_ptr ManagementAgent::getAgent (void)
{
- if (agent.get () == 0)
+ if (enabled && agent.get () == 0)
agent = shared_ptr (new ManagementAgent (10));
return agent;
}
-void ManagementAgent::setExchange (Exchange::shared_ptr _mexchange,
- Exchange::shared_ptr _dexchange)
+void ManagementAgent::setExchange (broker::Exchange::shared_ptr _mexchange,
+ broker::Exchange::shared_ptr _dexchange)
{
mExchange = _mexchange;
dExchange = _dexchange;
@@ -57,6 +63,7 @@ void ManagementAgent::setExchange (Exchange::shared_ptr _mexchange,
void ManagementAgent::addObject (ManagementObject::shared_ptr object)
{
+ RWlock::ScopedWlock writeLock (userLock);
uint64_t objectId = nextObjectId++;
object->setObjectId (objectId);
@@ -74,6 +81,8 @@ void ManagementAgent::Periodic::fire ()
void ManagementAgent::clientAdded (void)
{
+ RWlock::ScopedRlock readLock (userLock);
+
for (ManagementObjectMap::iterator iter = managementObjects.begin ();
iter != managementObjects.end ();
iter++)
@@ -94,7 +103,7 @@ void ManagementAgent::EncodeHeader (Buffer& buf)
void ManagementAgent::SendBuffer (Buffer& buf,
uint32_t length,
- Exchange::shared_ptr exchange,
+ broker::Exchange::shared_ptr exchange,
string routingKey)
{
intrusive_ptr<Message> msg (new Message ());
@@ -129,9 +138,10 @@ void ManagementAgent::PeriodicProcessing (void)
{
#define BUFSIZE 65536
#define THRESHOLD 16384
- char msgChars[BUFSIZE];
- uint32_t contentSize;
- string routingKey;
+ RWlock::ScopedWlock writeLock (userLock);
+ char msgChars[BUFSIZE];
+ uint32_t contentSize;
+ string routingKey;
std::list<uint64_t> deleteList;
if (managementObjects.empty ())
@@ -157,7 +167,7 @@ void ManagementAgent::PeriodicProcessing (void)
SendBuffer (msgBuffer, contentSize, mExchange, routingKey);
}
- if (object->getConfigChanged ())
+ if (object->getConfigChanged () || object->isDeleted ())
{
Buffer msgBuffer (msgChars, BUFSIZE);
EncodeHeader (msgBuffer);
diff --git a/cpp/src/qpid/management/ManagementAgent.h b/cpp/src/qpid/management/ManagementAgent.h
index c33a59adff..a4f10632da 100644
--- a/cpp/src/qpid/management/ManagementAgent.h
+++ b/cpp/src/qpid/management/ManagementAgent.h
@@ -25,6 +25,7 @@
#include "qpid/Options.h"
#include "qpid/broker/Exchange.h"
#include "qpid/broker/Timer.h"
+#include "qpid/sys/Mutex.h"
#include "ManagementObject.h"
#include <boost/shared_ptr.hpp>
@@ -41,11 +42,12 @@ class ManagementAgent
typedef boost::shared_ptr<ManagementAgent> shared_ptr;
+ static void enableManagement (void);
static shared_ptr getAgent (void);
void setInterval (uint16_t _interval) { interval = _interval; }
- void setExchange (broker::Exchange::shared_ptr mgmtExchange,
- broker::Exchange::shared_ptr directExchange);
+ void setExchange (broker::Exchange::shared_ptr mgmtExchange,
+ broker::Exchange::shared_ptr directExchange);
void addObject (ManagementObject::shared_ptr object);
void clientAdded (void);
void dispatchCommand (broker::Deliverable& msg,
@@ -64,6 +66,9 @@ class ManagementAgent
};
static shared_ptr agent;
+ static bool enabled;
+
+ qpid::sys::RWlock userLock;
ManagementObjectMap managementObjects;
broker::Timer timer;
broker::Exchange::shared_ptr mExchange;
diff --git a/cpp/src/qpid/management/ManagementExchange.cpp b/cpp/src/qpid/management/ManagementExchange.cpp
index f18b6fc402..ee18f026e7 100644
--- a/cpp/src/qpid/management/ManagementExchange.cpp
+++ b/cpp/src/qpid/management/ManagementExchange.cpp
@@ -27,13 +27,14 @@ using namespace qpid::broker;
using namespace qpid::framing;
using namespace qpid::sys;
-ManagementExchange::ManagementExchange (const string& _name) :
- Exchange (_name), TopicExchange(_name) {}
+ManagementExchange::ManagementExchange (const string& _name, Manageable* _parent) :
+ Exchange (_name, _parent), TopicExchange(_name, _parent) {}
ManagementExchange::ManagementExchange (const std::string& _name,
bool _durable,
- const FieldTable& _args) :
- Exchange (_name, _durable, _args),
- TopicExchange(_name, _durable, _args) {}
+ const FieldTable& _args,
+ Manageable* _parent) :
+ Exchange (_name, _durable, _args, _parent),
+ TopicExchange(_name, _durable, _args, _parent) {}
bool ManagementExchange::bind (Queue::shared_ptr queue,
diff --git a/cpp/src/qpid/management/ManagementExchange.h b/cpp/src/qpid/management/ManagementExchange.h
index 6ccdf47182..0fcd65b092 100644
--- a/cpp/src/qpid/management/ManagementExchange.h
+++ b/cpp/src/qpid/management/ManagementExchange.h
@@ -35,9 +35,10 @@ class ManagementExchange : public virtual TopicExchange
public:
static const std::string typeName;
- ManagementExchange (const string& name);
+ ManagementExchange (const string& name, Manageable* _parent = 0);
ManagementExchange (const string& _name, bool _durable,
- const qpid::framing::FieldTable& _args);
+ const qpid::framing::FieldTable& _args,
+ Manageable* _parent = 0);
virtual std::string getType() const { return typeName; }