diff options
author | Keith Wall <kwall@apache.org> | 2014-06-19 21:31:23 +0000 |
---|---|---|
committer | Keith Wall <kwall@apache.org> | 2014-06-19 21:31:23 +0000 |
commit | e7460b24b7beaccb71a1cfd4669a91d63725aed4 (patch) | |
tree | d9e26f415012bd01a83b5dad1fea511841f2bdd6 | |
parent | e0322744b403cb0e9ae5616a25b21c19f2d642f7 (diff) | |
download | qpid-python-e7460b24b7beaccb71a1cfd4669a91d63725aed4.tar.gz |
QPID-5819: Make JsonFileConfigStore#close idempotent, like other DCS implementations
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1604036 13f79535-47bb-0310-9956-ffa450edef68
2 files changed, 24 insertions, 12 deletions
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 afb2179b9b..f787bd63ad 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 @@ -564,17 +564,11 @@ public class JsonFileConfigStore implements DurableConfigurationStore { releaseFileLock(); } - catch (IOException e) - { - throw new StoreException("Failed to release lock", e); - } finally { - _fileLock = null; _idsByType.clear(); _objectsById.clear(); } - } @Override @@ -588,13 +582,26 @@ public class JsonFileConfigStore implements DurableConfigurationStore } } - private void releaseFileLock() throws IOException + private void releaseFileLock() { - _fileLock.release(); - _fileLock.channel().close(); + if (_fileLock != null) + { + try + { + _fileLock.release(); + _fileLock.channel().close(); + } + catch (IOException e) + { + throw new StoreException("Failed to release lock " + _fileLock, e); + } + finally + { + _fileLock = null; + } + } } - private static Map<String,Class<? extends ConfiguredObject>> generateClassNameMap(final Model model, final Class<? extends ConfiguredObject> clazz) { diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java index 4dc9fbe1f0..96ee8195a2 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java @@ -64,8 +64,6 @@ import org.apache.qpid.util.FileUtils; public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTestCase { - private static final String EXCHANGE_NAME = "exchangeName"; - private static final String EXCHANGE = org.apache.qpid.server.model.Exchange.class.getSimpleName(); private static final String BINDING = org.apache.qpid.server.model.Binding.class.getSimpleName(); private static final String QUEUE = Queue.class.getSimpleName(); @@ -139,6 +137,13 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest } } + public void testCloseIsIdempotent() throws Exception + { + _configStore.closeConfigurationStore(); + // Second close should be accepted without exception + _configStore.closeConfigurationStore(); + } + public void testCreateExchange() throws Exception { ExchangeImpl exchange = createTestExchange(); |