From d635bd2f83fc8af867c61ddf19a3c99a7b5cb55c Mon Sep 17 00:00:00 2001 From: Keith Wall Date: Fri, 6 Jun 2014 15:43:18 +0000 Subject: 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@1600932 13f79535-47bb-0310-9956-ffa450edef68 --- .../store/ManagementModeStoreHandler.java | 4 +++ .../store/MemoryConfigurationEntryStore.java | 5 ++++ .../server/store/AbstractJDBCMessageStore.java | 1 + .../qpid/server/store/AbstractMemoryStore.java | 6 ++-- .../server/store/DurableConfigurationStore.java | 34 +++++++++++++--------- .../qpid/server/store/JsonFileConfigStore.java | 11 +++++++ .../org/apache/qpid/server/store/MessageStore.java | 21 +++++++------ .../virtualhostnode/AbstractVirtualHostNode.java | 5 +--- .../store/BrokerStoreUpgraderAndRecovererTest.java | 5 ++++ .../qpid/server/store/JsonFileConfigStoreTest.java | 18 ++++++++++++ 10 files changed, 79 insertions(+), 31 deletions(-) (limited to 'qpid/java') diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java index a17bbbff47..3d32d483db 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java +++ b/qpid/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/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java index 14c9e7d3e0..dab8e8e20f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java @@ -348,6 +348,11 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore { } + @Override + public void onDelete() + { + } + @Override public void openConfigurationStore(final ConfiguredObject parent, final Map storeSettings) throws StoreException diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java index 1db2c89d05..79c2c274ee 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java +++ b/qpid/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/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java index 267e1d9cb3..1c92e491c3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryStore.java +++ b/qpid/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 _configuredObjectRecords = new ConcurrentHashMap(); - - @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/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java index fa109e8749..94de6c30c3 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java +++ b/qpid/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 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/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java index 111fc72533..ba42c45207 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java +++ b/qpid/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/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java index 4545aa9211..b1ddaabda8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java +++ b/qpid/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 messageStoreSettings); - public StoredMessage addMessage(T metaData); + void visitMessages(MessageHandler handler) throws StoreException; + + void visitMessageInstances(MessageInstanceHandler handler) throws StoreException; + + void visitDistributedTransactions(DistributedTransactionHandler handler) throws StoreException; + StoredMessage 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/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java index c87d24f9c6..d73e4ae87b 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java @@ -199,10 +199,7 @@ public abstract class AbstractVirtualHostNode