You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ma...@apache.org on 2014/09/17 12:35:33 UTC

svn commit: r1625505 - in /qpid/trunk/qpid/java/broker-core/src: main/java/org/apache/qpid/server/store/JsonFileConfigStore.java test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java

Author: macbean
Date: Wed Sep 17 10:35:33 2014
New Revision: 1625505

URL: http://svn.apache.org/r1625505
Log:
QPID-6095: [Java Broker] Deletion of an ERRORED JSON VHN with an invalid store path causes an exception

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/JsonFileConfigStoreTest.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=1625505&r1=1625504&r2=1625505&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 Wed Sep 17 10:35:33 2014
@@ -91,6 +91,7 @@ public class JsonFileConfigStore impleme
     private String _name;
     private FileLock _fileLock;
     private String _configFileName;
+    private String _backupFileName;
     private String _lockFileName;
 
     private static final Module _module;
@@ -170,12 +171,14 @@ public class JsonFileConfigStore impleme
         {
             _directoryName = fileFromSettings.getParent();
             _configFileName = fileFromSettings.getName();
+            _backupFileName = fileFromSettings.getName() + ".bak";
             _lockFileName = fileFromSettings.getName() + ".lck";
         }
         else
         {
             _directoryName = configurationStoreSettings.getStorePath();
             _configFileName = _name + ".json";
+            _backupFileName = _name + ".bak";
             _lockFileName = _name + ".lck";
         }
 
@@ -185,14 +188,21 @@ public class JsonFileConfigStore impleme
 
         if(!fileExists(_configFileName))
         {
-            File newFile = new File(_directoryName, _configFileName);
-            try
+            if(!fileExists(_backupFileName))
             {
-                _objectMapper.writeValue(newFile, Collections.emptyMap());
+                File newFile = new File(_directoryName, _configFileName);
+                try
+                {
+                    _objectMapper.writeValue(newFile, Collections.emptyMap());
+                }
+                catch (IOException e)
+                {
+                    throw new StoreException("Could not write configuration file " + newFile, e);
+                }
             }
-            catch (IOException e)
+            else
             {
-                throw new StoreException("Could not write configuration file " + newFile, e);
+                renameFile(_backupFileName, _configFileName);
             }
         }
     }
@@ -390,8 +400,11 @@ public class JsonFileConfigStore impleme
             File tmpFile = File.createTempFile("cfg","tmp", new File(_directoryName));
             tmpFile.deleteOnExit();
             _objectMapper.writeValue(tmpFile, data);
+            renameFile(_configFileName, _backupFileName);
             renameFile(tmpFile.getName(),_configFileName);
             tmpFile.delete();
+            File backupFile = new File(_directoryName, _backupFileName);
+            backupFile.delete();
         }
         catch (IOException e)
         {
@@ -619,5 +632,4 @@ public class JsonFileConfigStore impleme
         }
         return map;
     }
-
 }

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java?rev=1625505&r1=1625504&r2=1625505&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java Wed Sep 17 10:35:33 2014
@@ -352,18 +352,25 @@ public class JsonFileConfigStoreTest ext
     public void testStoreFileLifecycle()
     {
         File expectedJsonFile = new File(_storeLocation, _parent.getName() + ".json");
+        File expectedJsonFileBak = new File(_storeLocation, _parent.getName() + ".bak");
+        File expectedJsonFileLck = new File(_storeLocation, _parent.getName() + ".lck");
 
         assertFalse("JSON store should not exist", expectedJsonFile.exists());
+        assertFalse("JSON backup should not exist", expectedJsonFileBak.exists());
+        assertFalse("JSON lock should not exist", expectedJsonFileLck.exists());
 
         _store.openConfigurationStore(_parent, false);
         assertTrue("JSON store should exist after open", expectedJsonFile.exists());
+        assertFalse("JSON backup should not exist after open", expectedJsonFileBak.exists());
+        assertTrue("JSON lock should exist", expectedJsonFileLck.exists());
 
         _store.closeConfigurationStore();
         assertTrue("JSON store should exist after close", expectedJsonFile.exists());
 
         _store.onDelete(_parent);
         assertFalse("JSON store should not exist after delete", expectedJsonFile.exists());
-
+        assertFalse("JSON backup should not exist after delete", expectedJsonFileBak.exists());
+        assertFalse("JSON lock should not exist after delete", expectedJsonFileLck.exists());
     }
 
     public void testCreatedNestedObjects() throws Exception



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org