Author: tross
Date: Wed Nov 26 12:48:44 2008
New Revision: 720973
URL: http://svn.apache.org/viewvc?rev=720973&view=rev
Log:
Bug fixes for QMF:
ManagementAgentImpl - don't send messages if broker is not connected.
ManagementBroker - agents could be assigned the same agentBank
- don't send console-attached for attached agents
- handle multiple qmf messages in an AMQP body
schema.py - Don't use the FieldTable copy-constructor, use .clear()
Modified:
incubator/qpid/trunk/qpid/cpp/managementgen/qmfgen/schema.py
incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
Modified: incubator/qpid/trunk/qpid/cpp/managementgen/qmfgen/schema.py
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/managementgen/qmfgen/schema.py?rev=720973&r1=720972&r2=720973&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/managementgen/qmfgen/schema.py (original)
+++ incubator/qpid/trunk/qpid/cpp/managementgen/qmfgen/schema.py Wed Nov 26
12:48:44 2008
@@ -367,7 +367,7 @@
stream.write (indent + prefix + self.name + " = " + val + ";\n")
def genSchema (self, stream):
- stream.write (" ft = FieldTable ();\n")
+ stream.write (" ft.clear();\n")
stream.write (" ft.setString (NAME, \"" + self.name + "\");\n")
stream.write (" ft.setInt (TYPE, TYPE_" + self.type.type.base
+");\n")
stream.write (" ft.setInt (ACCESS, ACCESS_" + self.access + ");\n")
@@ -458,7 +458,7 @@
self.type.type.genPerThreadHiLoStatResets (stream, self.name,
self.type.type.cpp)
def genSchemaText (self, stream, name, desc):
- stream.write (" ft = FieldTable ();\n")
+ stream.write (" ft.clear();\n")
stream.write (" ft.setString (NAME, \"" + name + "\");\n")
stream.write (" ft.setInt (TYPE, TYPE_" + self.type.type.base
+");\n")
if self.unit != None:
@@ -603,7 +603,7 @@
return self.dir
def genSchema (self, stream, event=False):
- stream.write (" ft = FieldTable ();\n")
+ stream.write (" ft.clear();\n")
stream.write (" ft.setString (NAME, \"" + self.name + "\");\n")
stream.write (" ft.setInt (TYPE, TYPE_" + self.type.type.base
+");\n")
if (not event):
@@ -693,7 +693,7 @@
self.parent.genNamePackageLower(stream, variables)
def genSchema (self, stream, variables):
- stream.write (" ft = FieldTable ();\n")
+ stream.write (" ft.clear();\n")
stream.write (" ft.setString (NAME, \"" + self.name + "\");\n")
stream.write (" ft.setInt (ARGCOUNT, " + str (len (self.args)) +
");\n")
if self.desc != None:
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp?rev=720973&r1=720972&r2=720973&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp Wed
Nov 26 12:48:44 2008
@@ -262,7 +262,7 @@
systemId.encode (buffer);
buffer.putLong(requestedBrokerBank);
buffer.putLong(requestedAgentBank);
- uint32_t length = 512 - buffer.available();
+ uint32_t length = buffer.getPosition();
buffer.reset();
connThreadBody.sendBuffer(buffer, length, "qpid.management", "broker");
if (debugLevel >= DEBUG_PROTO) {
@@ -607,15 +607,17 @@
pair<PackageMap::iterator, bool> result =
packages.insert(pair<string, ClassMap>(name, ClassMap()));
- // Publish a package-indication message
- Buffer outBuffer(outputBuffer, MA_BUFFER_SIZE);
- uint32_t outLen;
+ if (connected) {
+ // Publish a package-indication message
+ Buffer outBuffer(outputBuffer, MA_BUFFER_SIZE);
+ uint32_t outLen;
- encodeHeader(outBuffer, 'p');
- encodePackageIndication(outBuffer, result.first);
- outLen = MA_BUFFER_SIZE - outBuffer.available();
- outBuffer.reset();
- connThreadBody.sendBuffer(outBuffer, outLen, "qpid.management",
"schema.package");
+ encodeHeader(outBuffer, 'p');
+ encodePackageIndication(outBuffer, result.first);
+ outLen = MA_BUFFER_SIZE - outBuffer.available();
+ outBuffer.reset();
+ connThreadBody.sendBuffer(outBuffer, outLen, "qpid.management",
"schema.package");
+ }
return result.first;
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp?rev=720973&r1=720972&r2=720973&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp Wed
Nov 26 12:48:44 2008
@@ -251,21 +251,23 @@
broker.periodicProcessing ();
}
-void ManagementBroker::clientAdded (const std::string& /*routingKey*/)
+void ManagementBroker::clientAdded (const std::string& routingKey)
{
- Mutex::ScopedLock lock (userLock);
+ if (routingKey.find("console") != 0)
+ return;
clientWasAdded = true;
for (RemoteAgentMap::iterator aIter = remoteAgents.begin();
aIter != remoteAgents.end();
aIter++) {
- Buffer outBuffer (outputBuffer, MA_BUFFER_SIZE);
+ char localBuffer[16];
+ Buffer outBuffer(localBuffer, 16);
uint32_t outLen;
- encodeHeader (outBuffer, 'x');
- outLen = MA_BUFFER_SIZE - outBuffer.available ();
- outBuffer.reset ();
- sendBuffer (outBuffer, outLen, dExchange, aIter->second->routingKey);
+ encodeHeader(outBuffer, 'x');
+ outLen = outBuffer.getPosition();
+ outBuffer.reset();
+ sendBuffer(outBuffer, outLen, dExchange, aIter->second->routingKey);
}
}
@@ -716,7 +718,7 @@
for (RemoteAgentMap::iterator aIter = remoteAgents.begin();
aIter != remoteAgents.end();
aIter++)
- if (aIter->second->brokerBank == bank)
+ if (aIter->second->agentBank == bank)
return true;
return false;
}
@@ -959,21 +961,24 @@
}
msg.encodeContent(inBuffer);
+ uint32_t bufferLen = inBuffer.getPosition();
inBuffer.reset();
- if (!checkHeader(inBuffer, &opcode, &sequence))
- return;
+ while (inBuffer.getPosition() < bufferLen) {
+ if (!checkHeader(inBuffer, &opcode, &sequence))
+ return;
- if (opcode == 'B') handleBrokerRequestLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'P') handlePackageQueryLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'p') handlePackageIndLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'Q') handleClassQueryLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'q') handleClassIndLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'S') handleSchemaRequestLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 's') handleSchemaResponseLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'A') handleAttachRequestLH (inBuffer, replyToKey,
sequence, msg.getPublisher());
- else if (opcode == 'G') handleGetQueryLH (inBuffer, replyToKey,
sequence);
- else if (opcode == 'M') handleMethodRequestLH (inBuffer, replyToKey,
sequence, msg.getPublisher());
+ if (opcode == 'B') handleBrokerRequestLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'P') handlePackageQueryLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'p') handlePackageIndLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'Q') handleClassQueryLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'q') handleClassIndLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'S') handleSchemaRequestLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 's') handleSchemaResponseLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'A') handleAttachRequestLH (inBuffer, replyToKey,
sequence, msg.getPublisher());
+ else if (opcode == 'G') handleGetQueryLH (inBuffer, replyToKey,
sequence);
+ else if (opcode == 'M') handleMethodRequestLH (inBuffer, replyToKey,
sequence, msg.getPublisher());
+ }
}
ManagementBroker::PackageMap::iterator
ManagementBroker::findOrAddPackageLH(string name)