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