diff options
Diffstat (limited to 'cpp/src/qpid/management')
| -rw-r--r-- | cpp/src/qpid/management/ManagementAgent.cpp | 31 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementAgent.h | 8 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementObject.h | 3 |
3 files changed, 26 insertions, 16 deletions
diff --git a/cpp/src/qpid/management/ManagementAgent.cpp b/cpp/src/qpid/management/ManagementAgent.cpp index a5ed84fb32..d6a91ab2c1 100644 --- a/cpp/src/qpid/management/ManagementAgent.cpp +++ b/cpp/src/qpid/management/ManagementAgent.cpp @@ -114,6 +114,16 @@ void ManagementAgent::setExchange (broker::Exchange::shared_ptr _mexchange, dExchange = _dexchange; } +void ManagementAgent::RegisterClass (string packageName, + string className, + uint8_t* md5Sum, + ManagementObject::writeSchemaCall_t schemaCall) +{ + RWlock::ScopedWlock writeLock (userLock); + PackageMap::iterator pIter = FindOrAddPackage (packageName); + AddClassLocal (pIter, className, md5Sum, schemaCall); +} + void ManagementAgent::addObject (ManagementObject::shared_ptr object, uint64_t /*persistenceId*/, uint64_t /*idOffset*/) @@ -128,15 +138,6 @@ void ManagementAgent::addObject (ManagementObject::shared_ptr object, object->setObjectId (objectId); managementObjects[objectId] = object; - - // If we've already seen instances of this object type, we're done. - if (!object->firstInstance ()) - return; - - // This is the first object of this type that we've seen, update the schema - // inventory. - PackageMap::iterator pIter = FindOrAddPackage (object->getPackageName ()); - AddClassLocal (pIter, object); } ManagementAgent::Periodic::Periodic (ManagementAgent& _agent, uint32_t _seconds) @@ -623,14 +624,16 @@ ManagementAgent::PackageMap::iterator ManagementAgent::FindOrAddPackage (std::st return result.first; } -void ManagementAgent::AddClassLocal (PackageMap::iterator pIter, - ManagementObject::shared_ptr object) +void ManagementAgent::AddClassLocal (PackageMap::iterator pIter, + string className, + uint8_t* md5Sum, + ManagementObject::writeSchemaCall_t schemaCall) { SchemaClassKey key; ClassMap& cMap = pIter->second; - key.name = object->getClassName (); - memcpy (&key.hash, object->getMd5Sum (), 16); + key.name = className; + memcpy (&key.hash, md5Sum, 16); ClassMap::iterator cIter = cMap.find (key); if (cIter != cMap.end ()) @@ -641,7 +644,7 @@ void ManagementAgent::AddClassLocal (PackageMap::iterator pIter, key.name); SchemaClass classInfo; - classInfo.writeSchemaCall = object->getWriteSchemaCall (); + classInfo.writeSchemaCall = schemaCall; cMap[key] = classInfo; // TODO: Publish a class-indication message diff --git a/cpp/src/qpid/management/ManagementAgent.h b/cpp/src/qpid/management/ManagementAgent.h index f2cd0373c0..ac665eb50d 100644 --- a/cpp/src/qpid/management/ManagementAgent.h +++ b/cpp/src/qpid/management/ManagementAgent.h @@ -53,6 +53,10 @@ class ManagementAgent void setInterval (uint16_t _interval) { interval = _interval; } void setExchange (broker::Exchange::shared_ptr mgmtExchange, broker::Exchange::shared_ptr directExchange); + void RegisterClass (std::string packageName, + std::string className, + uint8_t* md5Sum, + ManagementObject::writeSchemaCall_t schemaCall); void addObject (ManagementObject::shared_ptr object, uint64_t persistenceId = 0, uint64_t idOffset = 10); @@ -160,7 +164,9 @@ class ManagementAgent PackageMap::iterator FindOrAddPackage (std::string name); void AddClassLocal (PackageMap::iterator pIter, - ManagementObject::shared_ptr object); + std::string className, + uint8_t* md5Sum, + ManagementObject::writeSchemaCall_t schemaCall); void EncodePackageIndication (qpid::framing::Buffer& buf, PackageMap::iterator pIter); void EncodeClassIndication (qpid::framing::Buffer& buf, diff --git a/cpp/src/qpid/management/ManagementObject.h b/cpp/src/qpid/management/ManagementObject.h index 23042ad988..ca8a0fd558 100644 --- a/cpp/src/qpid/management/ManagementObject.h +++ b/cpp/src/qpid/management/ManagementObject.h @@ -24,6 +24,7 @@ #include "Manageable.h" #include "qpid/sys/Time.h" +#include "qpid/sys/Mutex.h" #include <qpid/framing/Buffer.h> #include <boost/shared_ptr.hpp> #include <map> @@ -44,6 +45,7 @@ class ManagementObject bool instChanged; bool deleted; Manageable* coreObject; + sys::RWlock accessLock; static const uint8_t TYPE_U8 = 1; static const uint8_t TYPE_U16 = 2; @@ -84,7 +86,6 @@ class ManagementObject virtual ~ManagementObject () {} virtual writeSchemaCall_t getWriteSchemaCall (void) = 0; - virtual bool firstInstance (void) = 0; virtual void writeConfig (qpid::framing::Buffer& buf) = 0; virtual void writeInstrumentation (qpid::framing::Buffer& buf, bool skipHeaders = false) = 0; |
