diff options
| author | Keith Wall <kwall@apache.org> | 2012-07-06 11:04:59 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2012-07-06 11:04:59 +0000 |
| commit | 7d49d33cdb51a98cd7621c3350f543ec3e10fc15 (patch) | |
| tree | 12d1ed1f4b108c3f8f9304105b31d094a68db545 /qpid/java/broker/src | |
| parent | bbbe4dea78e49cb408ffd773d6287bd0da8758f4 (diff) | |
| download | qpid-python-7d49d33cdb51a98cd7621c3350f543ec3e10fc15.tar.gz | |
QPID-4112: Virtualhosts recover exchanges before queues
Switch the recover order from queues,exchanges,... to exchanges,queues,.. so that when a queue with an alternate exchange
is recovered, the exchange's uuid is already in the registry.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1358118 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker/src')
4 files changed, 30 insertions, 30 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/store/ConfigurationRecoveryHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/store/ConfigurationRecoveryHandler.java index f1053f60ad..ede01d247e 100755 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/store/ConfigurationRecoveryHandler.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/store/ConfigurationRecoveryHandler.java @@ -28,20 +28,21 @@ import java.util.UUID; public interface ConfigurationRecoveryHandler { - QueueRecoveryHandler begin(MessageStore store); + ExchangeRecoveryHandler begin(MessageStore store); - public static interface QueueRecoveryHandler + public static interface ExchangeRecoveryHandler { - void queue(UUID id, String queueName, String owner, boolean exclusive, FieldTable arguments, UUID alternateExchangeId); - ExchangeRecoveryHandler completeQueueRecovery(); + void exchange(UUID id, String exchangeName, String type, boolean autoDelete); + QueueRecoveryHandler completeExchangeRecovery(); } - public static interface ExchangeRecoveryHandler + public static interface QueueRecoveryHandler { - void exchange(UUID id, String exchangeName, String type, boolean autoDelete); - BindingRecoveryHandler completeExchangeRecovery(); + void queue(UUID id, String queueName, String owner, boolean exclusive, FieldTable arguments, UUID alternateExchangeId); + BindingRecoveryHandler completeQueueRecovery(); } + public static interface BindingRecoveryHandler { void binding(UUID bindingId, UUID exchangeId, UUID queueId, String bindingName, ByteBuffer buf); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java index ab374b4917..281522c0ef 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java @@ -60,6 +60,7 @@ import org.apache.qpid.server.federation.BrokerLink; import org.apache.qpid.server.message.EnqueableMessage; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.store.ConfigurationRecoveryHandler; +import org.apache.qpid.server.store.ConfigurationRecoveryHandler.BrokerLinkRecoveryHandler; import org.apache.qpid.server.store.ConfiguredObjectHelper; import org.apache.qpid.server.store.ConfiguredObjectRecord; import org.apache.qpid.server.store.Event; @@ -78,6 +79,9 @@ import org.apache.qpid.server.store.StoredMessage; import org.apache.qpid.server.store.Transaction; import org.apache.qpid.server.store.TransactionLogRecoveryHandler; import org.apache.qpid.server.store.TransactionLogResource; +import org.apache.qpid.server.store.ConfigurationRecoveryHandler.BindingRecoveryHandler; +import org.apache.qpid.server.store.ConfigurationRecoveryHandler.ExchangeRecoveryHandler; +import org.apache.qpid.server.store.ConfigurationRecoveryHandler.QueueRecoveryHandler; /** * An implementation of a {@link MessageStore} that uses Apache Derby as the persistence @@ -558,16 +562,17 @@ public class DerbyMessageStore implements MessageStore try { List<ConfiguredObjectRecord> configuredObjects = loadConfiguredObjects(); - ConfigurationRecoveryHandler.QueueRecoveryHandler qrh = recoveryHandler.begin(this); - _configuredObjectHelper.recoverQueues(qrh, configuredObjects); - ConfigurationRecoveryHandler.ExchangeRecoveryHandler erh = qrh.completeQueueRecovery(); + ExchangeRecoveryHandler erh = recoveryHandler.begin(this); _configuredObjectHelper.recoverExchanges(erh, configuredObjects); - ConfigurationRecoveryHandler.BindingRecoveryHandler brh = erh.completeExchangeRecovery(); + QueueRecoveryHandler qrh = erh.completeExchangeRecovery(); + _configuredObjectHelper.recoverQueues(qrh, configuredObjects); + + BindingRecoveryHandler brh = qrh.completeQueueRecovery(); _configuredObjectHelper.recoverBindings(brh, configuredObjects); - ConfigurationRecoveryHandler.BrokerLinkRecoveryHandler lrh = brh.completeBindingRecovery(); + BrokerLinkRecoveryHandler lrh = brh.completeBindingRecovery(); recoverBrokerLinks(lrh); } catch (SQLException e) diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java index acd6101ff8..ea2f0f15e4 100755 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java @@ -76,15 +76,12 @@ public class VirtualHostConfigRecoveryHandler implements ConfigurationRecoveryHa private final VirtualHost _virtualHost; - private MessageStoreLogSubject _logSubject; - - private MessageStore _store; - private final Map<String, Integer> _queueRecoveries = new TreeMap<String, Integer>(); - private Map<Long, AbstractServerMessageImpl> _recoveredMessages = new HashMap<Long, AbstractServerMessageImpl>(); - private Map<Long, StoredMessage> _unusedMessages = new HashMap<Long, StoredMessage>(); - + private final Map<Long, AbstractServerMessageImpl> _recoveredMessages = new HashMap<Long, AbstractServerMessageImpl>(); + private final Map<Long, StoredMessage> _unusedMessages = new HashMap<Long, StoredMessage>(); + private MessageStoreLogSubject _logSubject; + private MessageStore _store; public VirtualHostConfigRecoveryHandler(VirtualHost virtualHost) { @@ -131,12 +128,12 @@ public class VirtualHostConfigRecoveryHandler implements ConfigurationRecoveryHa } catch (AMQException e) { - // TODO - throw new RuntimeException(e); + throw new RuntimeException("Error recovering queue uuid " + id + " name " + queueName, e); } } - public ExchangeRecoveryHandler completeQueueRecovery() + @Override + public BindingRecoveryHandler completeQueueRecovery() { return this; } @@ -156,19 +153,17 @@ public class VirtualHostConfigRecoveryHandler implements ConfigurationRecoveryHa } catch (AMQException e) { - // TODO - throw new RuntimeException(e); + throw new RuntimeException("Error recovering exchange uuid " + id + " name " + exchangeName, e); } } - public BindingRecoveryHandler completeExchangeRecovery() + public QueueRecoveryHandler completeExchangeRecovery() { return this; } public StoredMessageRecoveryHandler begin() { - // TODO - log begin return this; } @@ -193,7 +188,6 @@ public class VirtualHostConfigRecoveryHandler implements ConfigurationRecoveryHa public void completeMessageRecovery() { - //TODO - log end } public BridgeRecoveryHandler brokerLink(final UUID id, diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java index 6dd1aa7dbf..9c8f525120 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java @@ -113,9 +113,9 @@ public class DurableConfigurationStoreTest extends QpidTestCase _dtxRecordRecoveryHandler = mock(TransactionLogRecoveryHandler.DtxRecordRecoveryHandler.class); when(_messageStoreRecoveryHandler.begin()).thenReturn(_storedMessageRecoveryHandler); - when(_recoveryHandler.begin(isA(MessageStore.class))).thenReturn(_queueRecoveryHandler); - when(_queueRecoveryHandler.completeQueueRecovery()).thenReturn(_exchangeRecoveryHandler); - when(_exchangeRecoveryHandler.completeExchangeRecovery()).thenReturn(_bindingRecoveryHandler); + when(_recoveryHandler.begin(isA(MessageStore.class))).thenReturn(_exchangeRecoveryHandler); + when(_exchangeRecoveryHandler.completeExchangeRecovery()).thenReturn(_queueRecoveryHandler); + when(_queueRecoveryHandler.completeQueueRecovery()).thenReturn(_bindingRecoveryHandler); when(_bindingRecoveryHandler.completeBindingRecovery()).thenReturn(_linkRecoveryHandler); when(_logRecoveryHandler.begin(any(MessageStore.class))).thenReturn(_queueEntryRecoveryHandler); when(_queueEntryRecoveryHandler.completeQueueEntryRecovery()).thenReturn(_dtxRecordRecoveryHandler); |
