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]