From df73abb814422cd9b83d6995cde2a67d55615ded Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Wed, 27 Jun 2012 12:13:30 +0000 Subject: [PATCH] SP-169 BIS-90 refactoring of recovery storage algorithms SVN: 25895 --- ...aSetStoragePrecommitRecoveryAlgorithm.java | 53 ++++++------------- .../DataSetStorageRecoveryAlgorithm.java | 53 +++++++++++++++++-- ...DataSetStorageStoredRecoveryAlgorithm.java | 46 ++++++---------- ...aSetStorageRecoveryAlgorithmWithState.java | 36 +++++++++++++ 4 files changed, 115 insertions(+), 73 deletions(-) create mode 100644 datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/IDataSetStorageRecoveryAlgorithmWithState.java 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 5f23841b9a1..63a70f7323b 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 626168c5eac..bfccfec030e 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 d2649add44b..5c5e518a60e 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 00000000000..992699c3492 --- /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); +} -- GitLab