diff options
Diffstat (limited to 'cpp/src/qpid')
| -rw-r--r-- | cpp/src/qpid/agent/ManagementAgentImpl.cpp | 29 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementBroker.cpp | 10 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementObject.h | 12 |
3 files changed, 28 insertions, 23 deletions
diff --git a/cpp/src/qpid/agent/ManagementAgentImpl.cpp b/cpp/src/qpid/agent/ManagementAgentImpl.cpp index 050f29ac7b..4d5034f137 100644 --- a/cpp/src/qpid/agent/ManagementAgentImpl.cpp +++ b/cpp/src/qpid/agent/ManagementAgentImpl.cpp @@ -695,23 +695,20 @@ void ManagementAgentImpl::periodicProcessing() cout << "Objects managed: " << managementObjects.size() << endl; } - if (clientWasAdded) { - clientWasAdded = false; - for (ManagementObjectMap::iterator iter = managementObjects.begin(); - iter != managementObjects.end(); - iter++) { - ManagementObject* object = iter->second; - object->setAllChanged(); - } - } - // // Clear the been-here flag on all objects in the map. // for (ManagementObjectMap::iterator iter = managementObjects.begin(); iter != managementObjects.end(); - iter++) - iter->second->setFlags(0); + iter++) { + ManagementObject* object = iter->second; + object->setFlags(0); + if (clientWasAdded) { + object->setForcePublish(true); + } + } + + clientWasAdded = false; // // Process the entire object map. @@ -727,6 +724,7 @@ void ManagementAgentImpl::periodicProcessing() if (baseObject->getFlags() == 1 || (!baseObject->getConfigChanged() && !baseObject->getInstChanged() && + !baseObject->getForcePublish() && !baseObject->isDeleted())) continue; @@ -737,19 +735,22 @@ void ManagementAgentImpl::periodicProcessing() ManagementObject* object = iter->second; if (baseObject->isSameClass(*object) && object->getFlags() == 0) { object->setFlags(1); + if (object->getConfigChanged() || object->getInstChanged()) + object->setUpdateTime(); - if (object->getConfigChanged() || object->isDeleted()) { + if (object->getConfigChanged() || object->getForcePublish() || object->isDeleted()) { encodeHeader(msgBuffer, 'c'); object->writeProperties(msgBuffer); } - if (object->getInstChanged()) { + if (object->getInstChanged() || object->getForcePublish()) { encodeHeader(msgBuffer, 'i'); object->writeStatistics(msgBuffer); } if (object->isDeleted()) deleteList.push_back(pair<ObjectId, ManagementObject*>(iter->first, object)); + object->setForcePublish(false); if (msgBuffer.available() < (BUFSIZE / 2)) break; diff --git a/cpp/src/qpid/management/ManagementBroker.cpp b/cpp/src/qpid/management/ManagementBroker.cpp index e9610ca282..7a092bbb1b 100644 --- a/cpp/src/qpid/management/ManagementBroker.cpp +++ b/cpp/src/qpid/management/ManagementBroker.cpp @@ -354,7 +354,7 @@ void ManagementBroker::periodicProcessing (void) iter != managementObjects.end (); iter++) { ManagementObject* object = iter->second; - object->setAllChanged (); + object->setForcePublish(true); } } @@ -364,7 +364,10 @@ void ManagementBroker::periodicProcessing (void) { ManagementObject* object = iter->second; - if (object->getConfigChanged () || object->isDeleted ()) + if (object->getConfigChanged() || object->getInstChanged()) + object->setUpdateTime(); + + if (object->getConfigChanged() || object->getForcePublish() || object->isDeleted()) { Buffer msgBuffer (msgChars, BUFSIZE); encodeHeader (msgBuffer, 'c'); @@ -376,7 +379,7 @@ void ManagementBroker::periodicProcessing (void) sendBuffer (msgBuffer, contentSize, mExchange, routingKey); } - if (object->getInstChanged ()) + if (object->getInstChanged() || object->getForcePublish()) { Buffer msgBuffer (msgChars, BUFSIZE); encodeHeader (msgBuffer, 'i'); @@ -390,6 +393,7 @@ void ManagementBroker::periodicProcessing (void) if (object->isDeleted()) deleteList.push_back(pair<ObjectId, ManagementObject*>(iter->first, object)); + object->setForcePublish(false); } // Delete flagged objects diff --git a/cpp/src/qpid/management/ManagementObject.h b/cpp/src/qpid/management/ManagementObject.h index 6f229353e3..e5604eb2e4 100644 --- a/cpp/src/qpid/management/ManagementObject.h +++ b/cpp/src/qpid/management/ManagementObject.h @@ -126,6 +126,7 @@ class ManagementObject : public ManagementItem uint32_t flags; static int nextThreadIndex; + bool forcePublish; int getThreadIndex(); void writeTimestamps (qpid::framing::Buffer& buf); @@ -136,7 +137,8 @@ class ManagementObject : public ManagementItem ManagementObject(ManagementAgent* _agent, Manageable* _core) : createTime(uint64_t(qpid::sys::Duration(qpid::sys::now()))), destroyTime(0), updateTime(createTime), configChanged(true), - instChanged(true), deleted(false), coreObject(_core), agent(_agent) {} + instChanged(true), deleted(false), + coreObject(_core), agent(_agent), forcePublish(false) {} virtual ~ManagementObject() {} virtual writeSchemaCall_t getWriteSchemaCall (void) = 0; @@ -156,11 +158,9 @@ class ManagementObject : public ManagementItem ObjectId getObjectId (void) { return objectId; } inline bool getConfigChanged (void) { return configChanged; } virtual bool getInstChanged (void) { return instChanged; } - inline void setAllChanged (void) { - configChanged = true; - instChanged = true; - } - inline void setUpdateTime() { updateTime = (uint64_t(sys::Duration(sys::now()))); } + inline void setForcePublish(bool f) { forcePublish = f; } + inline bool getForcePublish() { return forcePublish; } + inline void setUpdateTime() { updateTime = (uint64_t(sys::Duration(sys::now()))); } inline void resourceDestroy (void) { destroyTime = uint64_t (qpid::sys::Duration (qpid::sys::now ())); |
