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/09/19 15:28:18 UTC
svn commit: r1626206 - in /qpid/trunk/qpid/cpp/src/qpid/broker:
ExchangeRegistry.cpp ExchangeRegistry.h amqp/NodePolicy.cpp
Author: gsim
Date: Fri Sep 19 13:28:17 2014
New Revision: 1626206
URL: http://svn.apache.org/r1626206
Log:
QPID-5590: handle unknown exchange type for topic policy
Modified:
qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.h
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodePolicy.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp?rev=1626206&r1=1626205&r2=1626206&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp Fri Sep 19 13:28:17 2014
@@ -72,7 +72,7 @@ pair<Exchange::shared_ptr, bool> Exchang
}else{
FunctionMap::iterator i = factory.find(type);
if (i == factory.end()) {
- throw UnknownExchangeTypeException();
+ throw UnknownExchangeTypeException(type);
} else {
exchange = i->second(name, durable, autodelete, args, parent, broker);
}
@@ -155,6 +155,16 @@ void ExchangeRegistry::registerType(cons
factory[type] = f;
}
+void ExchangeRegistry::checkType(const std::string& type)
+{
+ if (type != TopicExchange::typeName && type != DirectExchange::typeName && type != FanOutExchange::typeName
+ && type != HeadersExchange::typeName && type != ManagementDirectExchange::typeName
+ && type != ManagementTopicExchange::typeName && type != Link::exchangeTypeName
+ && factory.find(type) == factory.end()) {
+ throw UnknownExchangeTypeException(type);
+ }
+}
+
namespace
{
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.h?rev=1626206&r1=1626205&r2=1626206&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.h Fri Sep 19 13:28:17 2014
@@ -37,8 +37,20 @@
namespace qpid {
namespace broker {
-
-struct UnknownExchangeTypeException{};
+namespace {
+const std::string UNKNOWN_EXCHANGE_TYPE("Unknown exchange type: ");
+}
+
+struct UnknownExchangeTypeException : std::exception
+{
+ const std::string message;
+ UnknownExchangeTypeException(const std::string& type) throw() : message(UNKNOWN_EXCHANGE_TYPE + type) {}
+ ~UnknownExchangeTypeException() throw() {}
+ const char* what() const throw()
+ {
+ return message.c_str();
+ }
+};
class ExchangeRegistry{
public:
@@ -89,6 +101,8 @@ class ExchangeRegistry{
QPID_BROKER_EXTERN void registerType(const std::string& type, FactoryFunction);
+ QPID_BROKER_EXTERN void checkType(const std::string& type);
+
/** Call f for each exchange in the registry. */
template <class F> void eachExchange(F f) const {
qpid::sys::RWlock::ScopedRlock l(lock);
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodePolicy.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodePolicy.cpp?rev=1626206&r1=1626205&r2=1626206&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodePolicy.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodePolicy.cpp Fri Sep 19 13:28:17 2014
@@ -160,6 +160,8 @@ TopicPolicy::TopicPolicy(Broker& broker,
: NodePolicy(TOPIC_POLICY, pattern, props), exchangeType(getProperty(EXCHANGE_TYPE, props)),
autodelete(get(AUTO_DELETE, props, !durable))
{
+ if (exchangeType.empty()) exchangeType = TOPIC;
+ broker.getExchanges().checkType(exchangeType);
qpid::types::Variant::Map::const_iterator i = props.find(LIFETIME_POLICY);
if (i != props.end()) {
if (i->second == MANUAL) {
@@ -173,7 +175,6 @@ TopicPolicy::TopicPolicy(Broker& broker,
topicSettings = filterForTopic(props);
copy(QPID_IVE, props, exchangeSettings);
copy(QPID_MSG_SEQUENCE, props, exchangeSettings);
- if (exchangeType.empty()) exchangeType = TOPIC;
qpid::management::ManagementAgent* agent = broker.getManagementAgent();
if (agent != 0) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org