diff --git a/datastore_server/dist/etc/service.properties b/datastore_server/dist/etc/service.properties index e86f9fa5cb762255b413e13f4ace9bf206491cb6..a0ad5b4da2a91798c9adb78d66e6ffb0e9bb4219 100644 --- a/datastore_server/dist/etc/service.properties +++ b/datastore_server/dist/etc/service.properties @@ -4,6 +4,9 @@ data-store-server-code = DSS1 # The root directory of the data store storeroot-dir = data/store +# The directory where the command queue file is located; defaults to storeroot-dir +commandqueue-dir = + # Port port = 8444 diff --git a/datastore_server/etc/service.properties b/datastore_server/etc/service.properties index c479994f10eeb0fed788695f40ee84fab6c3e168..35f1bb2dfd6f1cecb71451a4fc2e2754613442b7 100644 --- a/datastore_server/etc/service.properties +++ b/datastore_server/etc/service.properties @@ -4,6 +4,9 @@ data-store-server-code = my-dss # The root directory of the data store storeroot-dir = targets/store +# The directory where the command queue file is located; defaults to storeroot-dir +commandqueue-dir = + # Port port = 8889 diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java index 20484481b65ead60cf8989906ac27082db527416..9e48f5b056e9fc2c36eb81d2a1ad71c95075f021 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java @@ -47,10 +47,10 @@ class DataSetCommandExecutor implements IDataSetCommandExecutor private final IExtendedBlockingQueue<IDataSetCommand> commandQueue; - public DataSetCommandExecutor(File store) + public DataSetCommandExecutor(File store, File queueDir) { this.store = store; - File queueFile = getCommandQueueFile(store); + File queueFile = getCommandQueueFile(queueDir); commandQueue = ExtendedBlockingQueueFactory.<IDataSetCommand> createPersistRecordBased(queueFile); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java index 69c27cde5aab34c293aad8d2d1f577b45553f173..d4b898ef44cabbdee0d1b5bf7498d1b80051eab5 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IProcessingPlug import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IReportingPluginTask; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.PluginTaskProvider; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.PluginTaskProviders; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; @@ -56,6 +57,8 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic private final PluginTaskProviders pluginTaskParameters; private File storeRoot; + + private File commandQueueDirOrNull; private IDataSetCommandExecutor commandExecuter; @@ -64,9 +67,9 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic { this(sessionTokenManager, new IDataSetCommandExecutorFactory() { - public IDataSetCommandExecutor create(File store) + public IDataSetCommandExecutor create(File store, File queueDir) { - return new DataSetCommandExecutor(store); + return new DataSetCommandExecutor(store, queueDir); } }, mailClientParameters, pluginTaskParameters); } @@ -86,6 +89,17 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic this.storeRoot = storeRoot; } + public final void setCommandQueueDir(String queueDirOrNull) + { + if (StringUtils.isBlank(queueDirOrNull)) + { + this.commandQueueDirOrNull = null; + } else + { + this.commandQueueDirOrNull = new File(queueDirOrNull); + } + } + public void afterPropertiesSet() { String prefix = "Property 'storeRoot' "; @@ -111,7 +125,11 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic operationLog.info("Creates root directory of the data store: " + storeRootPath); } } - commandExecuter = commandExecutorFactory.create(storeRoot); + if (commandQueueDirOrNull == null) + { + commandQueueDirOrNull = storeRoot; + } + commandExecuter = commandExecutorFactory.create(storeRoot, commandQueueDirOrNull); commandExecuter.start(); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorFactory.java index 6081d0040f512fd5b0bc6fd3e1812c115b4e9cfc..7303b8d9e9568dc4661bcf23042067f6c5f4f333 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorFactory.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorFactory.java @@ -20,13 +20,14 @@ import java.io.File; /** * Factory of {@link IDataSetCommandExecutor} operating on a specified data store. - * + * * @author Franz-Josef Elmer */ interface IDataSetCommandExecutorFactory { /** - * Creates command executor for the specified data store. + * Creates command executor for the specified data store. The file of the command queue will be + * located in <var>commandQueueDir</var>. */ - IDataSetCommandExecutor create(File store); + IDataSetCommandExecutor create(File store, File commandQueueDir); } diff --git a/datastore_server/source/java/dssApplicationContext.xml b/datastore_server/source/java/dssApplicationContext.xml index c269a1a67a56006a98344b11afcfcfd80a22f69d..13580c66641c91b978de7c15edb32f9aedb3d6c8 100644 --- a/datastore_server/source/java/dssApplicationContext.xml +++ b/datastore_server/source/java/dssApplicationContext.xml @@ -46,6 +46,7 @@ </constructor-arg> <constructor-arg ref="plugin-tasks" /> <property name="storeRoot" value="${storeroot-dir}"/> + <property name="commandQueueDir" value="${commandqueue-dir}"/> </bean> </property> <property name="serviceInterface" value="ch.systemsx.cisd.openbis.generic.shared.IDataStoreService" /> diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java index 877426063f7b0a932edf120be1cbeadaa4c8706e..c10ac29ab76c22ab5083ae1916934db17a07c5f6 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java @@ -283,7 +283,7 @@ public class DataStoreServiceTest extends AssertJUnit context.checking(new Expectations() { { - one(commandExecutorFactory).create(TEST_STORE); + one(commandExecutorFactory).create(TEST_STORE, TEST_STORE); will(returnValue(commandExecutor)); one(commandExecutor).start();