summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-06-19 21:31:23 +0000
committerKeith Wall <kwall@apache.org>2014-06-19 21:31:23 +0000
commite7460b24b7beaccb71a1cfd4669a91d63725aed4 (patch)
treed9e26f415012bd01a83b5dad1fea511841f2bdd6
parente0322744b403cb0e9ae5616a25b21c19f2d642f7 (diff)
downloadqpid-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
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java27
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java9
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();