diff options
author | Keith Wall <kwall@apache.org> | 2014-06-06 15:43:18 +0000 |
---|---|---|
committer | Keith Wall <kwall@apache.org> | 2014-06-06 15:43:18 +0000 |
commit | b28639e2e104347dc48884e2fe739644eeebc432 (patch) | |
tree | a140f2550612b721a7e847eecbcd3612c40a12a7 /java/broker-core/src | |
parent | 5b85e1a859d3ff7aaa6c3030c9264ed7f4416cf1 (diff) | |
download | qpid-python-b28639e2e104347dc48884e2fe739644eeebc432.tar.gz |
QPID-5800: [Java Broker] Add DurableConfigurationStore#onDelete method to allow an implementation to
delete the files/tables/databases underlying the store.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1600932 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker-core/src')
10 files changed, 79 insertions, 31 deletions
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java b/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java index a17bbbff47..3d32d483db 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java @@ -242,6 +242,10 @@ public class ManagementModeStoreHandler implements DurableConfigurationStore { } + @Override + public void onDelete() + { + } @Override public synchronized UUID[] remove(final ConfiguredObjectRecord... records) diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java index 14c9e7d3e0..dab8e8e20f 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java @@ -349,6 +349,11 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore } @Override + public void onDelete() + { + } + + @Override public void openConfigurationStore(final ConfiguredObject<?> parent, final Map<String, Object> storeSettings) throws StoreException { diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java b/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java index 1db2c89d05..79c2c274ee 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java @@ -2439,6 +2439,7 @@ abstract public class AbstractJDBCMessageStore implements MessageStoreProvider, protected abstract void storedSizeChange(int storeSizeIncrease); + @Override public void onDelete() { // TODO should probably check we are closed diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java b/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java index 267e1d9cb3..1c92e491c3 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java @@ -36,8 +36,6 @@ abstract class AbstractMemoryStore implements DurableConfigurationStore, Message private final ConcurrentHashMap<UUID, ConfiguredObjectRecord> _configuredObjectRecords = new ConcurrentHashMap<UUID, ConfiguredObjectRecord>(); - - @Override public void create(ConfiguredObjectRecord record) { @@ -105,5 +103,9 @@ abstract class AbstractMemoryStore implements DurableConfigurationStore, Message return _messageStore; } + @Override + public void onDelete() + { + } } diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java b/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java index fa109e8749..94de6c30c3 100755 --- a/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java @@ -41,23 +41,21 @@ public interface DurableConfigurationStore void openConfigurationStore(ConfiguredObject<?> parent, Map<String, Object> storeSettings) throws StoreException; /** - * Makes the specified object persistent. - * - * @param object The object to persist. + * Visit all configured object records with given handler. * - * @throws StoreException If the operation fails for any reason. + * @param handler a handler to invoke on each configured object record + * @throws StoreException */ - void create(ConfiguredObjectRecord object) throws StoreException; + void visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws StoreException; /** - * Removes the specified persistent configured objects. + * Makes the specified object persistent. * - * @param objects The objects to remove. + * @param object The object to persist. * * @throws StoreException If the operation fails for any reason. */ - public UUID[] remove(ConfiguredObjectRecord... objects) throws StoreException; - + void create(ConfiguredObjectRecord object) throws StoreException; /** * Updates the specified objects in the persistent store, IF it is already present. If the object @@ -71,13 +69,21 @@ public interface DurableConfigurationStore */ void update(boolean createIfNecessary, ConfiguredObjectRecord... records) throws StoreException; + /** + * Removes the specified persistent configured objects. + * + * @param objects The objects to remove. + * + * @throws StoreException If the operation fails for any reason. + */ + public UUID[] remove(ConfiguredObjectRecord... objects) throws StoreException; + void closeConfigurationStore() throws StoreException; /** - * Visit all configured object records with given handler. - * - * @param handler a handler to invoke on each configured object record - * @throws StoreException + * Deletes the configuration store from its underlying storage. If the store + * has not be opened, then this call will be ignored. The store should be closed + * before making this call. */ - void visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws StoreException; + void onDelete(); } diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java b/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java index 111fc72533..ba42c45207 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java @@ -571,6 +571,17 @@ public class JsonFileConfigStore implements DurableConfigurationStore } + @Override + public void onDelete() + { + if (_configFileName != null && _backupFileName != null) + { + renameFile(_configFileName,_backupFileName); + _configFileName = null; + _backupFileName = null; + } + } + private void releaseFileLock() throws IOException { _fileLock.release(); diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java b/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java index 4545aa9211..b1ddaabda8 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java @@ -38,6 +38,10 @@ public interface MessageStore String UNDERFULL_SIZE = "storeUnderfullSize"; String OVERFULL_SIZE = "storeOverfullSize"; + String getStoreLocation(); + + void addEventListener(EventListener eventListener, Event... events); + /** * Called after instantiation in order to open and initialize the message store. A particular implementation can define * whatever parameters it wants. @@ -46,8 +50,13 @@ public interface MessageStore */ void openMessageStore(ConfiguredObject<?> parent, Map<String, Object> messageStoreSettings); - public <T extends StorableMessageMetaData> StoredMessage<T> addMessage(T metaData); + void visitMessages(MessageHandler handler) throws StoreException; + + void visitMessageInstances(MessageInstanceHandler handler) throws StoreException; + + void visitDistributedTransactions(DistributedTransactionHandler handler) throws StoreException; + <T extends StorableMessageMetaData> StoredMessage<T> addMessage(T metaData); /** * Is this store capable of persisting the data @@ -63,15 +72,5 @@ public interface MessageStore */ void closeMessageStore(); - void addEventListener(EventListener eventListener, Event... events); - - String getStoreLocation(); - - // TODO change to have separate delete methods for configuration and message store. void onDelete(); - - void visitMessages(MessageHandler handler) throws StoreException; - void visitMessageInstances(MessageInstanceHandler handler) throws StoreException; - void visitDistributedTransactions(DistributedTransactionHandler handler) throws StoreException; - } diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java b/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java index c87d24f9c6..d73e4ae87b 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java @@ -199,10 +199,7 @@ public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode< deleteVirtualHostIfExists(); close(); deleted(); - if (getConfigurationStore() instanceof MessageStoreProvider) - { - ((MessageStoreProvider)getConfigurationStore()).getMessageStore().onDelete(); - } + getConfigurationStore().onDelete(); } protected void deleteVirtualHostIfExists() diff --git a/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java b/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java index 006c96a92a..c6fa815c82 100644 --- a/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java +++ b/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java @@ -277,6 +277,11 @@ public class BrokerStoreUpgraderAndRecovererTest extends QpidTestCase } @Override + public void onDelete() + { + } + + @Override public void visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws StoreException { handler.begin(); diff --git a/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java b/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java index 67161370de..6012b1802d 100644 --- a/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java +++ b/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java @@ -298,7 +298,25 @@ public class JsonFileConfigStoreTest extends QpidTestCase } _store.closeConfigurationStore(); secondStore.openConfigurationStore(_parent, _configurationStoreSettings); + } + + public void testStoreFileLifecycle() + { + File expectedJsonFile = new File(_storeLocation, _parent.getName() + ".json"); + File expectedJsonFileBak = new File(_storeLocation, _parent.getName() + ".bak"); + + assertFalse("JSON store should not exist", expectedJsonFile.exists()); + assertFalse("JSON backup should not exist", expectedJsonFileBak.exists()); + + _store.openConfigurationStore(_parent, _configurationStoreSettings); + assertTrue("JSON store should exist after open", expectedJsonFile.exists()); + assertFalse("JSON backup should not exist after open", expectedJsonFileBak.exists()); + + _store.closeConfigurationStore(); + assertTrue("JSON store should exist after close", expectedJsonFile.exists()); + _store.onDelete(); + assertFalse("JSON store should not exist after delete", expectedJsonFile.exists()); } |