Skip to content
Snippets Groups Projects
Commit e01ffa54 authored by jakubs's avatar jakubs
Browse files

SSDM-1431 Fix the problem when data store server couldn't start if it was not...

SSDM-1431 Fix the problem when data store server couldn't start if it was not installed on the same drive as default temp directory

SVN: 33268
parent 4fe21d99
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import ch.ethz.cisd.hotdeploy.PluginContainer;
import ch.rinn.restrictions.Private;
......@@ -69,7 +70,7 @@ public class DssPropertyParametersUtil
static final String DSS_TEMP_DIR_PATH = "dss-temp-dir";
@Private
static final File EMPTY_TEST_FILE = new File("an-empty-test-file");
static final String EMPTY_TEST_FILE_NAME = "an-empty-test-file";
/**
* Directory for registration log files.
......@@ -227,35 +228,28 @@ public class DssPropertyParametersUtil
return registrationLogDir;
}
private static AtomicInteger atomicEmptyFileIndex = new AtomicInteger();
private static void assertDirExistsAndIsLocal(IFileOperations fileOperations, File dir,
String dirDescription, String pathKey)
{
assertDirExists(fileOperations, dir, dirDescription, pathKey);
File emptyTestFile = null;
File emptyTestFileInDir = null;
String threadSafeEmptyTestFileName = EMPTY_TEST_FILE_NAME + atomicEmptyFileIndex.incrementAndGet();
File threadSafeEmptyTestFile = new File(threadSafeEmptyTestFileName);
File emptyTestFileInDir = new File(dir, threadSafeEmptyTestFileName);
try
{
// make the file name unique so that multiple threads can safely perform this check at the same time
emptyTestFile = fileOperations.createTempFile(EMPTY_TEST_FILE.getName(), "");
emptyTestFileInDir = new File(dir, emptyTestFile.getName());
if (fileOperations.rename(emptyTestFile, emptyTestFileInDir) == false)
assertDirExists(fileOperations, dir, dirDescription, pathKey);
fileOperations.createNewFile(threadSafeEmptyTestFile);
if (fileOperations.rename(threadSafeEmptyTestFile, emptyTestFileInDir) == false)
{
throw createException(NON_LOCAL_DIR_TEMPLATE.createFreshCopy(), dir,
dirDescription, pathKey);
}
} finally
{
if (emptyTestFile != null)
{
fileOperations.delete(emptyTestFile);
}
if (emptyTestFileInDir != null)
{
fileOperations.delete(emptyTestFileInDir);
}
fileOperations.delete(threadSafeEmptyTestFile);
fileOperations.delete(emptyTestFileInDir);
}
}
......
......@@ -16,11 +16,11 @@
package ch.systemsx.cisd.openbis.dss.generic.shared.utils;
import static ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil.EMPTY_TEST_FILE;
import java.io.File;
import java.util.Properties;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.testng.AssertJUnit;
......@@ -38,6 +38,7 @@ import ch.systemsx.cisd.common.filesystem.IFileOperations;
@Friend(toClasses = DssPropertyParametersUtil.class)
public class DssPropertyParametersUtilTest extends AssertJUnit
{
private static final File EMPTY_TEST_FILE = new File(DssPropertyParametersUtil.EMPTY_TEST_FILE_NAME);
private Mockery context;
......@@ -64,7 +65,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
File expectedDir = new File(System.getProperty("user.dir"), "dss-tmp");
prepareForMkdirs(expectedDir);
prepareForExists(expectedDir);
prepareForCreateTempFile(EMPTY_TEST_FILE);
prepareForCreateNewFile(EMPTY_TEST_FILE);
File movedEmptyTestFile = new File(expectedDir, EMPTY_TEST_FILE.getName());
prepareForRenameFile(EMPTY_TEST_FILE, movedEmptyTestFile, true);
prepareForDeleteFile(EMPTY_TEST_FILE);
......@@ -85,7 +86,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
properties.setProperty(DssPropertyParametersUtil.DSS_TEMP_DIR_PATH, expectedDir.getPath());
prepareForMkdirs(expectedDir);
prepareForExists(expectedDir);
prepareForCreateTempFile(EMPTY_TEST_FILE);
prepareForCreateNewFile(EMPTY_TEST_FILE);
File movedEmptyTestFile = new File(expectedDir, EMPTY_TEST_FILE.getName());
prepareForRenameFile(EMPTY_TEST_FILE, movedEmptyTestFile, true);
prepareForDeleteFile(EMPTY_TEST_FILE);
......@@ -130,7 +131,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
properties.setProperty(DssPropertyParametersUtil.DSS_TEMP_DIR_PATH, expectedDir.getPath());
prepareForMkdirs(expectedDir);
prepareForExists(expectedDir);
prepareForCreateTempFile(EMPTY_TEST_FILE);
prepareForCreateNewFile(EMPTY_TEST_FILE);
File movedEmptyTestFile = new File(expectedDir, EMPTY_TEST_FILE.getName());
prepareForRenameFile(EMPTY_TEST_FILE, movedEmptyTestFile, false);
prepareForDeleteFile(EMPTY_TEST_FILE);
......@@ -157,7 +158,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
File expectedDir = new File(System.getProperty("user.dir"), "log-registrations");
prepareForMkdirs(expectedDir);
prepareForExists(expectedDir);
prepareForCreateTempFile(EMPTY_TEST_FILE);
prepareForCreateNewFile(EMPTY_TEST_FILE);
File movedEmptyTestFile = new File(expectedDir, EMPTY_TEST_FILE.getName());
prepareForRenameFile(EMPTY_TEST_FILE, movedEmptyTestFile, true);
prepareForDeleteFile(EMPTY_TEST_FILE);
......@@ -180,7 +181,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
expectedDir.getPath());
prepareForMkdirs(expectedDir);
prepareForExists(expectedDir);
prepareForCreateTempFile(EMPTY_TEST_FILE);
prepareForCreateNewFile(EMPTY_TEST_FILE);
File movedEmptyTestFile = new File(expectedDir, EMPTY_TEST_FILE.getName());
prepareForRenameFile(EMPTY_TEST_FILE, movedEmptyTestFile, true);
prepareForDeleteFile(EMPTY_TEST_FILE);
......@@ -228,7 +229,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
expectedDir.getPath());
prepareForMkdirs(expectedDir);
prepareForExists(expectedDir);
prepareForCreateTempFile(EMPTY_TEST_FILE);
prepareForCreateNewFile(EMPTY_TEST_FILE);
File movedEmptyTestFile = new File(expectedDir, EMPTY_TEST_FILE.getName());
prepareForRenameFile(EMPTY_TEST_FILE, movedEmptyTestFile, false);
prepareForDeleteFile(EMPTY_TEST_FILE);
......@@ -283,13 +284,46 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
});
}
private void prepareForCreateTempFile(final File file)
class FileNameStarsWithMatcher extends BaseMatcher<File>
{
String expectedPrefix;
public FileNameStarsWithMatcher(File fileWithExpectedPrefix)
{
this.expectedPrefix = fileWithExpectedPrefix.getPath();
}
@Override
public boolean matches(Object file)
{
if (file == null || false == file instanceof File)
{
return false;
}
return ((File) file).getPath().startsWith(this.expectedPrefix);
}
@Override
public void describeTo(Description description)
{
description.appendText("Expected " + this.expectedPrefix + " prefix in the file name");
}
}
private FileNameStarsWithMatcher fileStartingWith(File file)
{
return new FileNameStarsWithMatcher(file);
}
private void prepareForCreateNewFile(final File file)
{
context.checking(new Expectations()
{
{
one(fileOperations).createTempFile(file.getName(), "");
will(returnValue(file));
one(fileOperations).createNewFile(with(fileStartingWith(file)));
will(returnValue(true));
}
});
}
......@@ -300,7 +334,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
context.checking(new Expectations()
{
{
one(fileOperations).rename(source, destination);
one(fileOperations).rename(with(fileStartingWith(source)), with(fileStartingWith(destination)));
will(returnValue(success));
}
});
......@@ -311,7 +345,7 @@ public class DssPropertyParametersUtilTest extends AssertJUnit
context.checking(new Expectations()
{
{
one(fileOperations).delete(file);
one(fileOperations).delete(with(fileStartingWith(file)));
will(returnValue(true));
}
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment