You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2014/08/06 19:11:56 UTC

svn commit: r1616287 - in /qpid/trunk/qpid/cpp/src/qpid/broker: ObjectFactory.cpp amqp/Topic.cpp

Author: gsim
Date: Wed Aug  6 17:11:56 2014
New Revision: 1616287

URL: http://svn.apache.org/r1616287
Log:
QPID-5948: prevent creation of durable topic backed by non-durable exchange; add exception handling to object recovery.
           (Based on patch from Kim van der Riet).

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/ObjectFactory.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Topic.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ObjectFactory.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ObjectFactory.cpp?rev=1616287&r1=1616286&r2=1616287&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/ObjectFactory.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/ObjectFactory.cpp Wed Aug  6 17:11:56 2014
@@ -20,6 +20,7 @@
  */
 #include "ObjectFactory.h"
 #include "Broker.h"
+#include "qpid/log/Statement.h"
 
 namespace qpid {
 namespace broker {
@@ -49,7 +50,11 @@ bool ObjectFactoryRegistry::recoverObjec
 {
     for (Factories::iterator i = factories.begin(); i != factories.end(); ++i)
     {
-        if ((*i)->recoverObject(broker, type, name, properties, persistenceId)) return true;
+        try {
+            if ((*i)->recoverObject(broker, type, name, properties, persistenceId)) return true;
+        } catch (const std::exception& e) {
+            QPID_LOG(warning, "Error while recovering object " << name << " of type " << type << ": " << e.what());
+        }
     }
     return false;
 }

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Topic.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Topic.cpp?rev=1616287&r1=1616286&r2=1616287&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Topic.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Topic.cpp Wed Aug  6 17:11:56 2014
@@ -63,6 +63,7 @@ Topic::Topic(Broker& broker, const std::
       alternateExchange(getProperty(ALTERNATE_EXCHANGE, properties))
 {
     if (exchange->getName().empty()) throw qpid::Exception("Exchange must be specified.");
+    if (durable && !exchange->isDurable()) throw qpid::Exception("Durable topic must be backed by durable exchange");
 
     qpid::types::Variant::Map unused;
     qpid::types::Variant::Map filtered = filter(properties, true);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org