From 81a3ecc7db6d99434435f2e83149bcf8d3e08542 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Fri, 4 Sep 2009 18:44:55 +0000
Subject: [PATCH] add: parameter commandqueue-dir to service.properties of data
 store server

SVN: 12482
---
 datastore_server/dist/etc/service.properties  |  3 +++
 datastore_server/etc/service.properties       |  3 +++
 .../server/DataSetCommandExecutor.java        |  4 ++--
 .../dss/generic/server/DataStoreService.java  | 24 ++++++++++++++++---
 .../IDataSetCommandExecutorFactory.java       |  7 +++---
 .../source/java/dssApplicationContext.xml     |  1 +
 .../generic/server/DataStoreServiceTest.java  |  2 +-
 7 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/datastore_server/dist/etc/service.properties b/datastore_server/dist/etc/service.properties
index e86f9fa5cb7..a0ad5b4da2a 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 c479994f10e..35f1bb2dfd6 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 20484481b65..9e48f5b056e 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 69c27cde5aa..d4b898ef44c 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 6081d0040f5..7303b8d9e95 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 c269a1a67a5..13580c66641 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 877426063f7..c10ac29ab76 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();
-- 
GitLab