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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to