summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/agent/ManagementAgentImpl.cpp29
-rw-r--r--cpp/src/qpid/management/ManagementBroker.cpp10
-rw-r--r--cpp/src/qpid/management/ManagementObject.h12
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 ()));