diff options
author | Robert Gemmell <robbie@apache.org> | 2010-01-04 18:12:57 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2010-01-04 18:12:57 +0000 |
commit | 6a078e2e8c8778e10371cb49b3593b561f40a567 (patch) | |
tree | a8100cb728d3647ca75e14e660af6e4726203168 | |
parent | fc4b37165cdd14939d4e40d7b3cf3ef836995be6 (diff) | |
download | qpid-python-6a078e2e8c8778e10371cb49b3593b561f40a567.tar.gz |
QPID-2096: decouple the addition of durable exchanges to the store from exchange registration. Remove auto-delete related persistence restriction from 0-10 based exchange declarations
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@895735 13f79535-47bb-0310-9956-ffa450edef68
7 files changed, 32 insertions, 11 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java index 08b3c08215..de1b69b0a4 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java @@ -203,6 +203,10 @@ public class AMQBrokerManagerMBean extends AMQManagedObject implements ManagedBr exchange = _exchangeFactory.createExchange(new AMQShortString(exchangeName), new AMQShortString(type), durable, false, 0); _exchangeRegistry.registerExchange(exchange); + if (durable) + { + _durableConfig.createExchange(exchange); + } } else { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java index 2a8a87be7d..7b21ad6b91 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java @@ -54,7 +54,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry public void initialise() throws AMQException { - new ExchangeInitialiser().initialise(_host.getExchangeFactory(), this); + new ExchangeInitialiser().initialise(_host.getExchangeFactory(), this, getDurableConfigurationStore()); } @@ -68,10 +68,6 @@ public class DefaultExchangeRegistry implements ExchangeRegistry { _exchangeMap.put(exchange.getName(), exchange); _exchangeMapStr.put(exchange.getName().toString(), exchange); - if (exchange.isDurable()) - { - getDurableConfigurationStore().createExchange(exchange); - } } public void setDefaultExchange(Exchange exchange) diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java index 59fe94ddc0..4dfcce7bbe 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java @@ -23,25 +23,32 @@ package org.apache.qpid.server.exchange; import org.apache.qpid.AMQException; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.framing.AMQShortString; +import org.apache.qpid.server.store.DurableConfigurationStore; public class ExchangeInitialiser { - public void initialise(ExchangeFactory factory, ExchangeRegistry registry) throws AMQException{ + public void initialise(ExchangeFactory factory, ExchangeRegistry registry, DurableConfigurationStore store) throws AMQException{ for (ExchangeType<? extends Exchange> type : factory.getRegisteredTypes()) { - define (registry, factory, type.getDefaultExchangeName(), type.getName()); + define (registry, factory, type.getDefaultExchangeName(), type.getName(), store); } - define(registry, factory, ExchangeDefaults.DEFAULT_EXCHANGE_NAME, ExchangeDefaults.DIRECT_EXCHANGE_CLASS); + define(registry, factory, ExchangeDefaults.DEFAULT_EXCHANGE_NAME, ExchangeDefaults.DIRECT_EXCHANGE_CLASS, store); registry.setDefaultExchange(registry.getExchange(ExchangeDefaults.DEFAULT_EXCHANGE_NAME)); } private void define(ExchangeRegistry r, ExchangeFactory f, - AMQShortString name, AMQShortString type) throws AMQException + AMQShortString name, AMQShortString type, DurableConfigurationStore store) throws AMQException { if(r.getExchange(name)== null) { - r.registerExchange(f.createExchange(name, type, true, false, 0)); + Exchange exchange = f.createExchange(name, type, true, false, 0); + r.registerExchange(exchange); + + if(exchange.isDurable()) + { + store.createExchange(exchange); + } } } } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java index b0ee5fff08..1dd6f1413b 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java @@ -97,6 +97,11 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener<Exchange body.getDurable(), body.getPassive(), body.getTicket()); exchangeRegistry.registerExchange(exchange); + + if (exchange.isDurable()) + { + virtualHost.getDurableConfigurationStore().createExchange(exchange); + } } catch(AMQUnknownExchangeType e) { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java index 36ed8e24ce..4ade799c59 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java @@ -398,7 +398,7 @@ public class ServerSessionDelegate extends SessionDelegate exchange.setAlternateExchange(alternate); } - if (exchange.isDurable() && !exchange.isAutoDelete()) + if (exchange.isDurable()) { DurableConfigurationStore store = virtualHost.getDurableConfigurationStore(); store.createExchange(exchange); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java index 78deeeb164..9c4913e1af 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java @@ -363,6 +363,11 @@ public class VirtualHostImpl implements Accessable, VirtualHost Exchange newExchange = _exchangeFactory.createExchange(exchangeName, type, durable, autodelete, 0); _exchangeRegistry.registerExchange(newExchange); + + if (newExchange.isDurable()) + { + _durableConfigurationStore.createExchange(newExchange); + } } } diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTest.java index 5169676dae..e011301f06 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTest.java @@ -449,6 +449,10 @@ public class MessageStoreTest extends TestCase try { _virtualHost.getExchangeRegistry().registerExchange(exchange); + if (durable) + { + _virtualHost.getMessageStore().createExchange(exchange); + } } catch (AMQException e) { |