diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java index 5f23841b9a13acc067bf181a14541221287f6b69..63a70f7323bde694246ec2a4d1b25bc461bcad4b 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java @@ -26,16 +26,16 @@ import ch.systemsx.cisd.etlserver.IDataStoreStrategy; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional.IStorageProcessorTransaction; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; -import ch.systemsx.cisd.etlserver.registrator.AbstractNoFileDataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind; /** * @author jakubs */ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformation> implements - Serializable + Serializable, IDataSetStorageRecoveryAlgorithmWithState<T> { private static final long serialVersionUID = 1L; @@ -46,29 +46,17 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati private final File markerFile; - private boolean isContainer; - - /** - * simplified constructor for container algorithm - * - * @param dataSetInformation - * @param dataStoreStrategyKey - * @param incomingDataSetFile - * @param stagingDirectory - * @param preCommitDirectory - * @param dataStoreCode - */ public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, - File stagingDirectory, File preCommitDirectory, String dataStoreCode) + File stagingDirectory, File preCommitDirectory, String dataStoreCode, + DataSetKind dataSetKind) { this.recoveryAlgorithm = new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, - null); + null, dataSetKind); this.markerFile = null; this.transaction = null; - this.isContainer = true; } public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation, @@ -80,33 +68,15 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati this.recoveryAlgorithm = new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, - dataSetStoragePaths); + dataSetStoragePaths, DataSetKind.EXTERNAL); this.transaction = transaction; this.markerFile = markerFile; - this.isContainer = false; } public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( OmniscientTopLevelDataSetRegistratorState state) { - IDataStoreStrategy dataStoreStrategy = - state.getDataStrategyStore().getDataStoreStrategy( - recoveryAlgorithm.getDataStoreStrategyKey()); - - IMailClient mailClient = state.getGlobalState().getMailClient(); - IFileOperations fileOperations = state.getFileOperations(); - - IStorageProcessorTransactional storageProcessor = state.getStorageProcessor(); - - if (isContainer) - { - return new AbstractNoFileDataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, - fileOperations, mailClient, recoveryAlgorithm); - } else - { - return new DataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, - fileOperations, mailClient, this); - } + return recoveryAlgorithm.recoverDataSetStorageAlgorithm(state, this); } public IStorageProcessorTransaction getTransaction() @@ -188,4 +158,13 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati return recoveryAlgorithm; } + @Override + public DataSetStorageAlgorithm<T> createExternalDataSetStorageAlgorithm( + IDataStoreStrategy dataStoreStrategy, IStorageProcessorTransactional storageProcessor, + IFileOperations fileOperations, IMailClient mailClient) + { + return DataSetStorageAlgorithm.createFromPrecommittedRecoveryAlgorithm(dataStoreStrategy, + storageProcessor, fileOperations, mailClient, this); + } + } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageRecoveryAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageRecoveryAlgorithm.java index 626168c5eac228d3c154fd69770c2469da7b867a..bfccfec030ecd6540f2e95fa5cbfe1703e0820a1 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageRecoveryAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageRecoveryAlgorithm.java @@ -19,13 +19,19 @@ package ch.systemsx.cisd.etlserver.registrator.recovery; import java.io.File; import java.io.Serializable; +import ch.systemsx.cisd.common.filesystem.IFileOperations; +import ch.systemsx.cisd.common.mail.IMailClient; import ch.systemsx.cisd.etlserver.DataStoreStrategyKey; +import ch.systemsx.cisd.etlserver.IDataStoreStrategy; +import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; +import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; +import ch.systemsx.cisd.etlserver.registrator.ContainerDataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm; +import ch.systemsx.cisd.etlserver.registrator.LinkDataSetStorageAlgorithm; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind; /** - * - * * @author jakubs */ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> implements Serializable @@ -45,11 +51,13 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple private final T dataSetInformation; private final DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths; - + + private final DataSetKind dataSetKind; + public DataSetStorageRecoveryAlgorithm(T dataSetInformation, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, File stagingDirectory, File preCommitDirectory, String dataStoreCode, - DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths) + DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths, DataSetKind dataSetKind) { this.dataSetInformation = dataSetInformation; @@ -61,6 +69,8 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple this.dataStoreCode = dataStoreCode; this.dataSetStoragePaths = dataSetStoragePaths; + + this.dataSetKind = dataSetKind; } public String getDataSetCode() @@ -97,9 +107,42 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple { return dataStoreCode; } - + public DataSetStorageAlgorithm.DataSetStoragePaths getDataSetStoragePaths() { return dataSetStoragePaths; } + + public DataSetKind getDataSetKind() + { + return dataSetKind; + } + + public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( + OmniscientTopLevelDataSetRegistratorState state, + IDataSetStorageRecoveryAlgorithmWithState<T> algorithm) + { + IDataStoreStrategy dataStoreStrategy = + state.getDataStrategyStore().getDataStoreStrategy(getDataStoreStrategyKey()); + + IMailClient mailClient = state.getGlobalState().getMailClient(); + IFileOperations fileOperations = state.getFileOperations(); + + IStorageProcessorTransactional storageProcessor = state.getStorageProcessor(); + + switch (getDataSetKind()) + { + case CONTAINER: + return new ContainerDataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, + fileOperations, mailClient, this); + case LINK: + return new LinkDataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, + fileOperations, mailClient, this); + case EXTERNAL: + return algorithm.createExternalDataSetStorageAlgorithm(dataStoreStrategy, + storageProcessor, fileOperations, mailClient); + default: + throw new IllegalStateException("Unknown data set kind " + getDataSetKind()); + } + } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java index d2649add44b70eceb42b6e9c4999f642e013b600..5c5e518a60e5be8c9b483f7691e705d39ad28f00 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java @@ -25,28 +25,21 @@ import ch.systemsx.cisd.etlserver.DataStoreStrategyKey; import ch.systemsx.cisd.etlserver.IDataStoreStrategy; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; -import ch.systemsx.cisd.etlserver.registrator.AbstractNoFileDataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind; /** * @author jakubs */ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> implements - Serializable + Serializable, IDataSetStorageRecoveryAlgorithmWithState<T> { private static final long serialVersionUID = 1L; private DataSetStorageRecoveryAlgorithm<T> recoveryAlgorithm; - private boolean isContainer; - - public boolean isContainer() - { - return isContainer; - } - public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, File stagingDirectory, File preCommitDirectory, String dataStoreCode, @@ -55,41 +48,24 @@ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> recoveryAlgorithm = new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, - dataSetStoragePaths); - isContainer = false; + dataSetStoragePaths, DataSetKind.EXTERNAL); } public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, - File stagingDirectory, File preCommitDirectory, String dataStoreCode) + File stagingDirectory, File preCommitDirectory, String dataStoreCode, + DataSetKind dataSetKind) { recoveryAlgorithm = new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, - null); - isContainer = true; + null, dataSetKind); } public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( OmniscientTopLevelDataSetRegistratorState state) { - IDataStoreStrategy dataStoreStrategy = - state.getDataStrategyStore().getDataStoreStrategy(getDataStoreStrategyKey()); - - IMailClient mailClient = state.getGlobalState().getMailClient(); - IFileOperations fileOperations = state.getFileOperations(); - - IStorageProcessorTransactional storageProcessor = state.getStorageProcessor(); - - if (isContainer) - { - return new AbstractNoFileDataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, - fileOperations, mailClient, recoveryAlgorithm); - } else - { - return new DataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, - fileOperations, mailClient, this); - } + return recoveryAlgorithm.recoverDataSetStorageAlgorithm(state, this); } public DataSetStorageRecoveryAlgorithm<T> getRecoveryAlgorithm() @@ -161,4 +137,12 @@ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> return recoveryAlgorithm.getDataSetStoragePaths(); } + @Override + public DataSetStorageAlgorithm<T> createExternalDataSetStorageAlgorithm( + IDataStoreStrategy dataStoreStrategy, IStorageProcessorTransactional storageProcessor, + IFileOperations fileOperations, IMailClient mailClient) + { + return DataSetStorageAlgorithm.createFromStoredRecoveryAlgorithm(dataStoreStrategy, + storageProcessor, fileOperations, mailClient, this); + } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/IDataSetStorageRecoveryAlgorithmWithState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/IDataSetStorageRecoveryAlgorithmWithState.java new file mode 100644 index 0000000000000000000000000000000000000000..992699c3492fbc7d9eb542fa3bec32c2499c1e1c --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/IDataSetStorageRecoveryAlgorithmWithState.java @@ -0,0 +1,36 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.etlserver.registrator.recovery; + +import ch.systemsx.cisd.common.filesystem.IFileOperations; +import ch.systemsx.cisd.common.mail.IMailClient; +import ch.systemsx.cisd.etlserver.IDataStoreStrategy; +import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; +import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm; +import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; + +/** + * + * + * @author Jakub Straszewski + */ +public interface IDataSetStorageRecoveryAlgorithmWithState<T extends DataSetInformation> +{ + DataSetStorageAlgorithm<T> createExternalDataSetStorageAlgorithm( + IDataStoreStrategy dataStoreStrategy, IStorageProcessorTransactional storageProcessor, + IFileOperations fileOperations, IMailClient mailClient); +}