From dad0e553a0afe231205cbec01248f47384819cab Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Thu, 4 Feb 2016 16:14:57 +0000
Subject: [PATCH] SSDM-3150: set storage confirmed flag in batches

SVN: 35634
---
 .../DataSetRegistrationAlgorithm.java         |  4 +-
 .../v1/DataSetStorageAlgorithmRunner.java     | 10 ++++-
 .../v2/DataSetStorageAlgorithmRunner.java     | 10 ++++-
 .../server/EncapsulatedOpenBISService.java    | 12 +++---
 .../shared/IEncapsulatedOpenBISService.java   |  6 +--
 .../DataSetRegistrationAlgorithmTest.java     |  3 +-
 .../TransferredDataSetHandlerTest.java        |  6 +--
 .../JythonDropboxRecoveryTest.java            | 40 +++++++++++++------
 .../JythonTopLevelDataSetRegistratorTest.java | 21 +++++-----
 .../DataSetRegistrationTransactionTest.java   |  3 +-
 10 files changed, 74 insertions(+), 41 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithm.java
index cbfb5cff099..3234bd2b761 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithm.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithm.java
@@ -574,12 +574,12 @@ public class DataSetRegistrationAlgorithm
 
     private final void plainRegisterDataSet(NewExternalData data, final String relativePath,
             final StorageFormat storageFormat, final BooleanOrUnknown isCompleteFlag)
-            throws Throwable
+                    throws Throwable
     {
         updateExternalData(data, relativePath, storageFormat, isCompleteFlag);
         // Finally: register the data set in the database.
         registerDataSetInApplicationServer(data);
-        state.openBisService.setStorageConfirmed(data.getCode());
+        state.openBisService.setStorageConfirmed(Collections.singletonList(data.getCode()));
     }
 
     private final NewExternalData updateExternalData(NewExternalData data,
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v1/DataSetStorageAlgorithmRunner.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v1/DataSetStorageAlgorithmRunner.java
index 0daad33c5dc..e621a2c2143 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v1/DataSetStorageAlgorithmRunner.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v1/DataSetStorageAlgorithmRunner.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver.registrator.v1;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.commons.lang.exception.ExceptionUtils;
@@ -199,12 +200,17 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
     {
         try
         {
+            List<String> codes = new LinkedList<String>();
             for (DataSetStorageAlgorithm<T> storageAlgorithm : dataSetStorageAlgorithms)
             {
                 String dataSetCode = storageAlgorithm.getDataSetInformation().getDataSetCode();
-                openBISService.setStorageConfirmed(dataSetCode);
+                codes.add(dataSetCode);
+            }
+            if (false == codes.isEmpty())
+            {
+                openBISService.setStorageConfirmed(codes);
+                dssRegistrationLog.info(operationLog, "Storage has been confirmed in openBIS Application Server.");
             }
-            dssRegistrationLog.info(operationLog, "Storage has been confirmed in openBIS Application Server.");
         } catch (final Exception ex)
         {
             dssRegistrationLog.error(operationLog, "Error during storage confirmation", ex);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithmRunner.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithmRunner.java
index b79fc753cd9..6e2f8b4a46f 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithmRunner.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithmRunner.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver.registrator.v2;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.commons.lang.exception.ExceptionUtils;
@@ -265,12 +266,17 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
     {
         try
         {
+            List<String> codes = new LinkedList<String>();
             for (DataSetStorageAlgorithm<T> storageAlgorithm : dataSetStorageAlgorithms)
             {
                 String dataSetCode = storageAlgorithm.getDataSetInformation().getDataSetCode();
-                openBISService.setStorageConfirmed(dataSetCode);
+                codes.add(dataSetCode);
+            }
+            if (codes.isEmpty() == false)
+            {
+                openBISService.setStorageConfirmed(codes);
+                dssRegistrationLog.info(operationLog, "Storage has been confirmed in openBIS Application Server.");
             }
-            dssRegistrationLog.info(operationLog, "Storage has been confirmed in openBIS Application Server.");
         } catch (final Exception ex)
         {
             rollbackDelegate.markReadyForRecovery(this, ex);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
index d1caf622481..623f0a3c18a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
@@ -291,10 +291,11 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     // IEncapsulatedOpenBISService
     //
     @Override
-    public String getSessionToken() {
+    public String getSessionToken()
+    {
         return session.getSessionToken();
     }
-    
+
     @Override
     public Experiment tryGetExperiment(ExperimentIdentifier experimentIdentifier)
     {
@@ -904,9 +905,9 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     }
 
     @Override
-    public void setStorageConfirmed(String dataSetCode)
+    public void setStorageConfirmed(List<String> dataSetCodes)
     {
-        service.setStorageConfirmed(session.getSessionToken(), dataSetCode);
+        service.setStorageConfirmed(session.getSessionToken(), dataSetCodes);
     }
 
     @Override
@@ -1053,7 +1054,8 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     }
 
     @Override
-    public InputStream getAttachmentContent(AttachmentHolderKind attachmentHolderKind, Long attachmentHolderId, String fileName, Integer versionOrNull)
+    public InputStream getAttachmentContent(AttachmentHolderKind attachmentHolderKind, Long attachmentHolderId, String fileName,
+            Integer versionOrNull)
     {
         AttachmentWithContent attachment =
                 service.getAttachment(session.getSessionToken(), attachmentHolderKind, attachmentHolderId, fileName, versionOrNull);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
index 19a9baaf566..ca5e3ac7748 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
@@ -363,7 +363,7 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe
      */
     @ManagedAuthentication
     public boolean isDataSetOnTrashCanOrDeleted(String dataSetCode);
-    
+
     //
     // Archiving
     //
@@ -484,10 +484,10 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe
     public List<String> getTrustedCrossOriginDomains();
 
     /**
-     * {@link IServiceForDataStoreServer#setStorageConfirmed(String, String)}
+     * {@link IServiceForDataStoreServer#setStorageConfirmed(String, List)}
      */
     @ManagedAuthentication
-    public void setStorageConfirmed(String dataSetCode);
+    public void setStorageConfirmed(List<String> dataSetCodes);
 
     /**
      * {@link IServiceForDataStoreServer#markSuccessfulPostRegistration(String, String)}
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithmTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithmTest.java
index 9adacc7e75a..ad60f5d07ec 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithmTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DataSetRegistrationAlgorithmTest.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.concurrent.locks.Lock;
 
 import org.jmock.Expectations;
@@ -294,7 +295,7 @@ public class DataSetRegistrationAlgorithmTest extends AbstractFileSystemTestCase
             context.checking(new Expectations()
                 {
                     {
-                        one(openBisService).setStorageConfirmed(DATA_SET_CODE);
+                        one(openBisService).setStorageConfirmed(Collections.singletonList(DATA_SET_CODE));
                     }
                 });
         }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
index 2b396a07eec..0c767af6e1b 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
@@ -569,7 +569,7 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC
                     one(shareIdManager).setShareId(DATA_SET_CODE, "1");
 
                     allowing(limsService).setStorageConfirmed(with(equal(SESSION_TOKEN)),
-                            with(equal(DATA_SET_CODE)));
+                            with(equal(Collections.singletonList(DATA_SET_CODE))));
                 }
             });
         final LogMonitoringAppender appender =
@@ -620,7 +620,7 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC
                     one(shareIdManager).setShareId(DATA_SET_CODE, "1");
 
                     allowing(limsService).setStorageConfirmed(with(equal(SESSION_TOKEN)),
-                            with(equal(DATA_SET_CODE)));
+                            with(equal(Collections.singletonList(DATA_SET_CODE))));
                 }
             });
         final LogMonitoringAppender appender =
@@ -863,7 +863,7 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC
                     one(shareIdManager).setShareId(DATA_SET_CODE, "1");
 
                     allowing(limsService).setStorageConfirmed(with(equal(SESSION_TOKEN)),
-                            with(equal(DATA_SET_CODE)));
+                            with(equal(Collections.singletonList(DATA_SET_CODE))));
                 }
             });
         final LogMonitoringAppender appender =
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java
index 3d6e5e165dc..eced767be4a 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Properties;
 
 import org.jmock.Expectations;
@@ -89,8 +90,7 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest
         int index = 0;
         for (RecoveryTestCase t : testCases)
         {
-            resultsList[index++] = new Object[]
-            { t };
+            resultsList[index++] = new Object[] { t };
         }
 
         return resultsList;
@@ -1152,14 +1152,21 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest
             will(doAll(makeFileSystemUnavailableAction(),
                     returnValue(EntityOperationsState.OPERATION_SUCCEEDED)));
 
-            // third try - fail at storage confirmation
-            setStorageConfirmed(true);
-
-            // fourth try - success
-            setStorageConfirmed(false);
             if (withContainer)
             {
-                setStorageConfirmed(CONTAINER_DATA_SET_CODE, false);
+                // third try - fail at storage confirmation
+                setStorageConfirmed(true, CONTAINER_DATA_SET_CODE);
+
+                // fourth try - success
+                setStorageConfirmed(false, CONTAINER_DATA_SET_CODE);
+            } else
+            {
+                // third try - fail at storage confirmation
+                setStorageConfirmed(true);
+
+                // fourth try - success
+                setStorageConfirmed(false);
+
             }
         }
     }
@@ -1311,18 +1318,25 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest
         /**
          * @param shouldFail - if true the call to as should throw an exception
          */
-        protected void setStorageConfirmed(boolean shouldFail)
+        protected void setStorageConfirmed(boolean shouldFail, String... additionalCodes)
         {
-            setStorageConfirmed(DATA_SET_CODE, shouldFail);
+            List<String> codes = new LinkedList<String>();
+            codes.add(DATA_SET_CODE);
+
+            for (String code : additionalCodes)
+            {
+                codes.add(code);
+            }
+            setStorageConfirmed(codes, shouldFail);
         }
 
         /**
-         * @param dataSetCode - the dataset to be confirmed
+         * @param dataSetCodes - the datasets to be confirmed
          * @param shouldFail - if true the call to as should throw an exception
          */
-        protected void setStorageConfirmed(String dataSetCode, boolean shouldFail)
+        protected void setStorageConfirmed(List<String> dataSetCodes, boolean shouldFail)
         {
-            one(openBisService).setStorageConfirmed(dataSetCode);
+            one(openBisService).setStorageConfirmed(dataSetCodes);
             if (shouldFail)
             {
                 will(throwException(new EnvironmentFailureException(
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
index c28e0b73231..c7b6a023825 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
@@ -732,11 +732,15 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
 
                 protected void setStorageConfirmed()
                 {
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE);
 
                     if (testCase.shouldRegisterTwoDataSets)
                     {
-                        one(openBisService).setStorageConfirmed(DATA_SET_CODE_1);
+                        // two transactions
+                        one(openBisService).setStorageConfirmed(Arrays.asList(DATA_SET_CODE));
+                        one(openBisService).setStorageConfirmed(Arrays.asList(DATA_SET_CODE_1));
+                    } else
+                    {
+                        one(openBisService).setStorageConfirmed(Collections.singletonList(DATA_SET_CODE));
                     }
                 }
 
@@ -1199,8 +1203,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     one(openBisService).performEntityOperations(with(operations));
                     will(returnValue(new AtomicEntityOperationResult()));
 
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE + 1);
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE + 2);
+                    one(openBisService).setStorageConfirmed(Arrays.asList(DATA_SET_CODE + 1, DATA_SET_CODE + 2));
                 }
             });
 
@@ -1284,7 +1287,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
 
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE);
+                    one(openBisService).setStorageConfirmed(Arrays.asList(DATA_SET_CODE));
                 }
             });
 
@@ -1347,7 +1350,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
 
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE);
+                    one(openBisService).setStorageConfirmed(Arrays.asList(DATA_SET_CODE));
                 }
             });
 
@@ -1484,7 +1487,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
 
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE);
+                    one(openBisService).setStorageConfirmed(Arrays.asList(DATA_SET_CODE));
                 }
             });
 
@@ -1553,7 +1556,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     one(openBisService).performEntityOperations(with(atomicOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
 
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE);
+                    one(openBisService).setStorageConfirmed(Collections.singletonList(DATA_SET_CODE));
                 }
             });
 
@@ -1840,7 +1843,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     oneOf(storageRecoveryManager).registrationCompleted(
                             with(any(DataSetStorageAlgorithmRunner.class)));
 
-                    one(openBisService).setStorageConfirmed(DATA_SET_CODE);
+                    one(openBisService).setStorageConfirmed(Collections.singletonList(DATA_SET_CODE));
                 }
             });
 
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
index 65b34d6c822..3baf4570b20 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
@@ -21,6 +21,7 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.io.FileUtils;
@@ -529,7 +530,7 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa
                                 with(any(AtomicEntityOperationDetails.class)));
                         will(returnValue(new AtomicEntityOperationResult()));
 
-                        one(openBisService).setStorageConfirmed(with(any(String.class)));
+                        one(openBisService).setStorageConfirmed(with(any(List.class)));
                     }
                 }
             });
-- 
GitLab