summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-11-21 20:17:22 +0000
committerTed Ross <tross@apache.org>2008-11-21 20:17:22 +0000
commit7bc808c71f28e7a58aeedbd6dcc450f1265d660c (patch)
treecf61755e35a6bd9454ff68733b97a347e5c7bea5 /cpp
parent57c7e6d45483b94d4306eb93f285f4cbaa52bd57 (diff)
downloadqpid-python-7bc808c71f28e7a58aeedbd6dcc450f1265d660c.tar.gz
Fixed several problems related to qmf update timestamps:
- Timestamps were set at update send time regardless of whether the object's contents were actually changed. Now timestamps are set at the time of the change. - Agent heartbeat messages are now being sent after periodic updates, not before. Cleaned up the Agent object in qmf.console. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@719699 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/managementgen/qmfgen/schema.py4
-rw-r--r--cpp/src/qpid/agent/ManagementAgentImpl.cpp27
-rw-r--r--cpp/src/qpid/management/ManagementBroker.cpp25
-rw-r--r--cpp/src/qpid/management/ManagementObject.cpp2
-rw-r--r--cpp/src/qpid/management/ManagementObject.h12
5 files changed, 35 insertions, 35 deletions
diff --git a/cpp/managementgen/qmfgen/schema.py b/cpp/managementgen/qmfgen/schema.py
index 692a474992..350a271dd4 100755
--- a/cpp/managementgen/qmfgen/schema.py
+++ b/cpp/managementgen/qmfgen/schema.py
@@ -145,6 +145,7 @@ class SchemaType:
stream.write (" " + prefix + varName + "Max = val;\n")
if changeFlag != None:
stream.write (" " + changeFlag + " = true;\n")
+ stream.write (" setUpdateTime();\n")
stream.write (" }\n")
if self.style != "mma":
stream.write (" inline " + self.asArg + " get_" + varName + "() {\n");
@@ -157,6 +158,7 @@ class SchemaType:
stream.write (" presenceMask[presenceByte_%s] &= ~presenceMask_%s;\n" % (varName, varName))
if changeFlag != None:
stream.write (" " + changeFlag + " = true;\n")
+ stream.write (" setUpdateTime();\n")
stream.write (" }\n")
stream.write (" inline bool isSet_" + varName + "() {\n")
stream.write (" return (presenceMask[presenceByte_%s] & presenceMask_%s) != 0;\n" % (varName, varName))
@@ -171,6 +173,7 @@ class SchemaType:
stream.write (" " + varName + "High = " + varName + ";\n")
if changeFlag != None:
stream.write (" " + changeFlag + " = true;\n")
+ stream.write (" setUpdateTime();\n")
stream.write (" }\n");
stream.write (" inline void dec_" + varName + " (" + self.asArg + " by = 1) {\n");
if not self.perThread:
@@ -181,6 +184,7 @@ class SchemaType:
stream.write (" " + varName + "Low = " + varName + ";\n")
if changeFlag != None:
stream.write (" " + changeFlag + " = true;\n")
+ stream.write (" setUpdateTime();\n")
stream.write (" }\n");
def genHiLoStatResets (self, stream, varName):
diff --git a/cpp/src/qpid/agent/ManagementAgentImpl.cpp b/cpp/src/qpid/agent/ManagementAgentImpl.cpp
index dc9122664d..1f7d2569fb 100644
--- a/cpp/src/qpid/agent/ManagementAgentImpl.cpp
+++ b/cpp/src/qpid/agent/ManagementAgentImpl.cpp
@@ -687,18 +687,6 @@ void ManagementAgentImpl::periodicProcessing()
if (!connected)
return;
- {
- Buffer msgBuffer(msgChars, BUFSIZE);
- encodeHeader(msgBuffer, 'h');
- msgBuffer.putLongLong(uint64_t(Duration(now())));
- stringstream key;
- key << "console.heartbeat." << assignedBrokerBank << "." << assignedAgentBank;
-
- contentSize = BUFSIZE - msgBuffer.available();
- msgBuffer.reset();
- connThreadBody.sendBuffer(msgBuffer, contentSize, "qpid.management", key.str());
- }
-
moveNewObjectsLH();
if (debugLevel >= DEBUG_PUBLISH) {
@@ -715,9 +703,6 @@ void ManagementAgentImpl::periodicProcessing()
}
}
- if (managementObjects.empty())
- return;
-
//
// Clear the been-here flag on all objects in the map.
//
@@ -792,6 +777,18 @@ void ManagementAgentImpl::periodicProcessing()
}
deleteList.clear();
+
+ {
+ Buffer msgBuffer(msgChars, BUFSIZE);
+ encodeHeader(msgBuffer, 'h');
+ msgBuffer.putLongLong(uint64_t(Duration(now())));
+ stringstream key;
+ key << "console.heartbeat." << assignedBrokerBank << "." << assignedAgentBank;
+
+ contentSize = BUFSIZE - msgBuffer.available();
+ msgBuffer.reset();
+ connThreadBody.sendBuffer(msgBuffer, contentSize, "qpid.management", key.str());
+ }
}
void ManagementAgentImpl::ConnectionThread::run()
diff --git a/cpp/src/qpid/management/ManagementBroker.cpp b/cpp/src/qpid/management/ManagementBroker.cpp
index 48b73546b3..b800d62fb6 100644
--- a/cpp/src/qpid/management/ManagementBroker.cpp
+++ b/cpp/src/qpid/management/ManagementBroker.cpp
@@ -344,17 +344,6 @@ void ManagementBroker::periodicProcessing (void)
string routingKey;
list<pair<ObjectId, ManagementObject*> > deleteList;
- {
- Buffer msgBuffer(msgChars, BUFSIZE);
- encodeHeader(msgBuffer, 'h');
- msgBuffer.putLongLong(uint64_t(Duration(now())));
-
- contentSize = BUFSIZE - msgBuffer.available ();
- msgBuffer.reset ();
- routingKey = "console.heartbeat.1.0";
- sendBuffer (msgBuffer, contentSize, mExchange, routingKey);
- }
-
moveNewObjectsLH();
if (clientWasAdded) {
@@ -367,9 +356,6 @@ void ManagementBroker::periodicProcessing (void)
}
}
- if (managementObjects.empty ())
- return;
-
for (ManagementObjectMap::iterator iter = managementObjects.begin ();
iter != managementObjects.end ();
iter++)
@@ -416,6 +402,17 @@ void ManagementBroker::periodicProcessing (void)
deleteList.clear();
deleteOrphanedAgentsLH();
}
+
+ {
+ Buffer msgBuffer(msgChars, BUFSIZE);
+ encodeHeader(msgBuffer, 'h');
+ msgBuffer.putLongLong(uint64_t(Duration(now())));
+
+ contentSize = BUFSIZE - msgBuffer.available ();
+ msgBuffer.reset ();
+ routingKey = "console.heartbeat.1.0";
+ sendBuffer (msgBuffer, contentSize, mExchange, routingKey);
+ }
}
void ManagementBroker::sendCommandComplete (string replyToKey, uint32_t sequence,
diff --git a/cpp/src/qpid/management/ManagementObject.cpp b/cpp/src/qpid/management/ManagementObject.cpp
index 5a40e3f619..f4c45de126 100644
--- a/cpp/src/qpid/management/ManagementObject.cpp
+++ b/cpp/src/qpid/management/ManagementObject.cpp
@@ -163,7 +163,7 @@ void ManagementObject::writeTimestamps (framing::Buffer& buf)
buf.putShortString (getPackageName ());
buf.putShortString (getClassName ());
buf.putBin128 (getMd5Sum ());
- buf.putLongLong (uint64_t (sys::Duration (sys::now ())));
+ buf.putLongLong (updateTime);
buf.putLongLong (createTime);
buf.putLongLong (destroyTime);
objectId.encode(buf);
diff --git a/cpp/src/qpid/management/ManagementObject.h b/cpp/src/qpid/management/ManagementObject.h
index a34f50ab8f..6f229353e3 100644
--- a/cpp/src/qpid/management/ManagementObject.h
+++ b/cpp/src/qpid/management/ManagementObject.h
@@ -114,6 +114,7 @@ class ManagementObject : public ManagementItem
uint64_t createTime;
uint64_t destroyTime;
+ uint64_t updateTime;
ObjectId objectId;
bool configChanged;
bool instChanged;
@@ -132,11 +133,11 @@ class ManagementObject : public ManagementItem
public:
typedef void (*writeSchemaCall_t) (qpid::framing::Buffer&);
- ManagementObject (ManagementAgent* _agent, Manageable* _core) :
- destroyTime(0), configChanged(true),
- instChanged(true), deleted(false), coreObject(_core), agent(_agent)
- { createTime = uint64_t (qpid::sys::Duration (qpid::sys::now ())); }
- virtual ~ManagementObject () {}
+ 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) {}
+ virtual ~ManagementObject() {}
virtual writeSchemaCall_t getWriteSchemaCall (void) = 0;
virtual void writeProperties(qpid::framing::Buffer& buf) = 0;
@@ -159,6 +160,7 @@ class ManagementObject : public ManagementItem
configChanged = true;
instChanged = true;
}
+ inline void setUpdateTime() { updateTime = (uint64_t(sys::Duration(sys::now()))); }
inline void resourceDestroy (void) {
destroyTime = uint64_t (qpid::sys::Duration (qpid::sys::now ()));