qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From acon...@apache.org
Subject svn commit: r1206343 - /qpid/branches/qpid-3603/qpid/cpp/src/qpid/broker/NodeClone.cpp
Date Fri, 25 Nov 2011 21:50:13 GMT
Author: aconway
Date: Fri Nov 25 21:50:13 2011
New Revision: 1206343

URL: http://svn.apache.org/viewvc?rev=1206343&view=rev
Log:
QPID-3603: Iterate over multiple QMF events.

Modified:
    qpid/branches/qpid-3603/qpid/cpp/src/qpid/broker/NodeClone.cpp

Modified: qpid/branches/qpid-3603/qpid/cpp/src/qpid/broker/NodeClone.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qpid-3603/qpid/cpp/src/qpid/broker/NodeClone.cpp?rev=1206343&r1=1206342&r2=1206343&view=diff
==============================================================================
--- qpid/branches/qpid-3603/qpid/cpp/src/qpid/broker/NodeClone.cpp (original)
+++ qpid/branches/qpid-3603/qpid/cpp/src/qpid/broker/NodeClone.cpp Fri Nov 25 21:50:13 2011
@@ -78,32 +78,28 @@ NodeClone::NodeClone(const std::string& 
 NodeClone::~NodeClone() {}
 
 void NodeClone::route(Deliverable& msg, const std::string& /*key*/, const framing::FieldTable*
headers) {
-    // FIXME aconway 2011-11-21: outer error handling, e.g. for decoding error.
-    if (isQMFv2(msg.getMessage()) && headers) {
+    try {
+        // FIXME aconway 2011-11-21: outer error handling, e.g. for decoding error.
+        if (!isQMFv2(msg.getMessage()) || !headers)
+            throw Exception("Unexpected message, not QMF2 event or query response.");
         // FIXME aconway 2011-11-21: string constants
         if (headers->getAsString("qmf.content") == "_event") { //decode as list
             std::string content = msg.getMessage().getFrames().getContent();
             Variant::List list;
             amqp_0_10::ListCodec::decode(content, list);
-            if (list.empty()) { // FIXME aconway 2011-11-21: remove
-                QPID_LOG(error, "Error parsing QMF event, empty list");
-            } else {
-                try {
-                    // FIXME aconway 2011-11-18: should be iterating list?
-                    Variant::Map& map = list.front().asMap();
-                    Variant::Map& schema = map[
-                        "_schema_id"].asMap();
-                    Variant::Map& values = map["_values"].asMap();
-                    if      (match<EventQueueDeclare>(schema)) doEventQueueDeclare(values);
-                    else if (match<EventQueueDelete>(schema)) doEventQueueDelete(values);
-                    else if (match<EventExchangeDeclare>(schema)) doEventExchangeDeclare(values);
-                    else if (match<EventExchangeDelete>(schema)) doEventExchangeDelete(values);
-                    else if (match<EventBind>(schema)) doEventBind(values);
-                    else if (match<EventSubscribe>(schema)) {} // Deliberately ignored.
-                    else QPID_LOG(warning, "Replicator received unexpected event, schema="
<< schema);
-                } catch (const std::exception& e) {
-                    QPID_LOG(error, "Error replicating configuration: " << e.what());
-                }
+            for (Variant::List::iterator i = list.begin(); i != list.end(); ++i) {
+                // FIXME aconway 2011-11-18: should be iterating list?
+                Variant::Map& map = list.front().asMap();
+                Variant::Map& schema = map[
+                    "_schema_id"].asMap();
+                Variant::Map& values = map["_values"].asMap();
+                if      (match<EventQueueDeclare>(schema)) doEventQueueDeclare(values);
+                else if (match<EventQueueDelete>(schema)) doEventQueueDelete(values);
+                else if (match<EventExchangeDeclare>(schema)) doEventExchangeDeclare(values);
+                else if (match<EventExchangeDelete>(schema)) doEventExchangeDelete(values);
+                else if (match<EventBind>(schema)) doEventBind(values);
+                else if (match<EventSubscribe>(schema)) {} // Deliberately ignored.
+                else throw(Exception(QPID_MSG("Replicator received unexpected event, schema="
<< schema)));
             }
         } else if (headers->getAsString("qmf.opcode") == "_query_response") {
             //decode as list
@@ -119,16 +115,14 @@ void NodeClone::route(Deliverable& msg, 
                     if      (type == "queue") doResponseQueue(values);
                     else if (type == "exchange") doResponseExchange(values);
                     else if (type == "bind") doResponseBind(values);
-                    else {
-                        QPID_LOG(warning, "Replicator ignoring unexpected class: " <<
type);
-                    }
+                    else throw Exception(QPID_MSG("Ignoring unexpected class: " <<
type));
                 }
             }
         } else {
-            QPID_LOG(warning, "Replicator ignoring QMFv2 message with headers: " <<
*headers);
+            QPID_LOG(warning, QPID_MSG("Ignoring QMFv2 message with headers: " << *headers));
         }
-    } else {
-        QPID_LOG(warning, "Replicator ignoring message which is not a QMFv2 event or query
response");
+    } catch (const std::exception& e) {
+        QPID_LOG(warning, "Error replicating configuration: " << e.what());
     }
 }
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org


Mime
View raw message