summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/agent
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-12-01 16:38:54 +0000
committerTed Ross <tross@apache.org>2008-12-01 16:38:54 +0000
commit1d8a1fa5fdbbe04f7c5412c51facae9b5b2518a5 (patch)
treea672ee4efbc0a5289fe37d93bf4afcd4879d655f /cpp/src/qpid/agent
parent8f38c8b511bbf232c5a65203b415aff456e61992 (diff)
downloadqpid-python-1d8a1fa5fdbbe04f7c5412c51facae9b5b2518a5.tar.gz
Fixed a performance regression caused by the management code.
The current/last-change timestamp is now set on management objects when they are published, not when they actually change. Also, the timestamp is updated only if modifications were made to the object in the last publish interval. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@722120 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/agent')
-rw-r--r--cpp/src/qpid/agent/ManagementAgentImpl.cpp29
1 files changed, 15 insertions, 14 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;