Author: kwall
Date: Thu Jun 19 21:31:23 2014
New Revision: 1604036

URL: http://svn.apache.org/r1604036
Log:
QPID-5819: Make JsonFileConfigStore#close idempotent, like other DCS 
implementations

Modified:
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java?rev=1604036&r1=1604035&r2=1604036&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
 Thu Jun 19 21:31:23 2014
@@ -564,17 +564,11 @@ public class JsonFileConfigStore impleme
         {
             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 impleme
         }
     }
 
-    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)
     {

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java?rev=1604036&r1=1604035&r2=1604036&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
 Thu Jun 19 21:31:23 2014
@@ -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 AbstractDurableCon
         }
     }
 
+    public void testCloseIsIdempotent() throws Exception
+    {
+        _configStore.closeConfigurationStore();
+        // Second close should be accepted without exception
+        _configStore.closeConfigurationStore();
+    }
+
     public void testCreateExchange() throws Exception
     {
         ExchangeImpl exchange = createTestExchange();



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to