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