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)


Reply via email to