Skip to content
Snippets Groups Projects
Commit df73abb8 authored by jakubs's avatar jakubs
Browse files

SP-169 BIS-90 refactoring of recovery storage algorithms

SVN: 25895
parent 002fe932
No related branches found
No related tags found
No related merge requests found
...@@ -26,16 +26,16 @@ import ch.systemsx.cisd.etlserver.IDataStoreStrategy; ...@@ -26,16 +26,16 @@ import ch.systemsx.cisd.etlserver.IDataStoreStrategy;
import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional;
import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional.IStorageProcessorTransaction; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional.IStorageProcessorTransaction;
import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; 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;
import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths;
import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind;
/** /**
* @author jakubs * @author jakubs
*/ */
public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformation> implements public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformation> implements
Serializable Serializable, IDataSetStorageRecoveryAlgorithmWithState<T>
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -46,29 +46,17 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati ...@@ -46,29 +46,17 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati
private final File markerFile; 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, public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation,
DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile,
File stagingDirectory, File preCommitDirectory, String dataStoreCode) File stagingDirectory, File preCommitDirectory, String dataStoreCode,
DataSetKind dataSetKind)
{ {
this.recoveryAlgorithm = this.recoveryAlgorithm =
new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey,
incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode,
null); null, dataSetKind);
this.markerFile = null; this.markerFile = null;
this.transaction = null; this.transaction = null;
this.isContainer = true;
} }
public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation, public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation,
...@@ -80,33 +68,15 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati ...@@ -80,33 +68,15 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati
this.recoveryAlgorithm = this.recoveryAlgorithm =
new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey,
incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode,
dataSetStoragePaths); dataSetStoragePaths, DataSetKind.EXTERNAL);
this.transaction = transaction; this.transaction = transaction;
this.markerFile = markerFile; this.markerFile = markerFile;
this.isContainer = false;
} }
public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm(
OmniscientTopLevelDataSetRegistratorState state) OmniscientTopLevelDataSetRegistratorState state)
{ {
IDataStoreStrategy dataStoreStrategy = return recoveryAlgorithm.recoverDataSetStorageAlgorithm(state, this);
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);
}
} }
public IStorageProcessorTransaction getTransaction() public IStorageProcessorTransaction getTransaction()
...@@ -188,4 +158,13 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati ...@@ -188,4 +158,13 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati
return recoveryAlgorithm; return recoveryAlgorithm;
} }
@Override
public DataSetStorageAlgorithm<T> createExternalDataSetStorageAlgorithm(
IDataStoreStrategy dataStoreStrategy, IStorageProcessorTransactional storageProcessor,
IFileOperations fileOperations, IMailClient mailClient)
{
return DataSetStorageAlgorithm.createFromPrecommittedRecoveryAlgorithm(dataStoreStrategy,
storageProcessor, fileOperations, mailClient, this);
}
} }
...@@ -19,13 +19,19 @@ package ch.systemsx.cisd.etlserver.registrator.recovery; ...@@ -19,13 +19,19 @@ package ch.systemsx.cisd.etlserver.registrator.recovery;
import java.io.File; import java.io.File;
import java.io.Serializable; 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.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.DataSetStorageAlgorithm;
import ch.systemsx.cisd.etlserver.registrator.LinkDataSetStorageAlgorithm;
import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind;
/** /**
*
*
* @author jakubs * @author jakubs
*/ */
public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> implements Serializable public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> implements Serializable
...@@ -45,11 +51,13 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple ...@@ -45,11 +51,13 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple
private final T dataSetInformation; private final T dataSetInformation;
private final DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths; private final DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths;
private final DataSetKind dataSetKind;
public DataSetStorageRecoveryAlgorithm(T dataSetInformation, public DataSetStorageRecoveryAlgorithm(T dataSetInformation,
DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile,
File stagingDirectory, File preCommitDirectory, String dataStoreCode, File stagingDirectory, File preCommitDirectory, String dataStoreCode,
DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths) DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths, DataSetKind dataSetKind)
{ {
this.dataSetInformation = dataSetInformation; this.dataSetInformation = dataSetInformation;
...@@ -61,6 +69,8 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple ...@@ -61,6 +69,8 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple
this.dataStoreCode = dataStoreCode; this.dataStoreCode = dataStoreCode;
this.dataSetStoragePaths = dataSetStoragePaths; this.dataSetStoragePaths = dataSetStoragePaths;
this.dataSetKind = dataSetKind;
} }
public String getDataSetCode() public String getDataSetCode()
...@@ -97,9 +107,42 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple ...@@ -97,9 +107,42 @@ public class DataSetStorageRecoveryAlgorithm<T extends DataSetInformation> imple
{ {
return dataStoreCode; return dataStoreCode;
} }
public DataSetStorageAlgorithm.DataSetStoragePaths getDataSetStoragePaths() public DataSetStorageAlgorithm.DataSetStoragePaths getDataSetStoragePaths()
{ {
return dataSetStoragePaths; 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());
}
}
} }
...@@ -25,28 +25,21 @@ import ch.systemsx.cisd.etlserver.DataStoreStrategyKey; ...@@ -25,28 +25,21 @@ import ch.systemsx.cisd.etlserver.DataStoreStrategyKey;
import ch.systemsx.cisd.etlserver.IDataStoreStrategy; import ch.systemsx.cisd.etlserver.IDataStoreStrategy;
import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional;
import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; 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;
import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths;
import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind;
/** /**
* @author jakubs * @author jakubs
*/ */
public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> implements public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> implements
Serializable Serializable, IDataSetStorageRecoveryAlgorithmWithState<T>
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private DataSetStorageRecoveryAlgorithm<T> recoveryAlgorithm; private DataSetStorageRecoveryAlgorithm<T> recoveryAlgorithm;
private boolean isContainer;
public boolean isContainer()
{
return isContainer;
}
public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation, public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation,
DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile,
File stagingDirectory, File preCommitDirectory, String dataStoreCode, File stagingDirectory, File preCommitDirectory, String dataStoreCode,
...@@ -55,41 +48,24 @@ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> ...@@ -55,41 +48,24 @@ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation>
recoveryAlgorithm = recoveryAlgorithm =
new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey,
incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode,
dataSetStoragePaths); dataSetStoragePaths, DataSetKind.EXTERNAL);
isContainer = false;
} }
public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation, public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation,
DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile,
File stagingDirectory, File preCommitDirectory, String dataStoreCode) File stagingDirectory, File preCommitDirectory, String dataStoreCode,
DataSetKind dataSetKind)
{ {
recoveryAlgorithm = recoveryAlgorithm =
new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey,
incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode,
null); null, dataSetKind);
isContainer = true;
} }
public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm(
OmniscientTopLevelDataSetRegistratorState state) OmniscientTopLevelDataSetRegistratorState state)
{ {
IDataStoreStrategy dataStoreStrategy = return recoveryAlgorithm.recoverDataSetStorageAlgorithm(state, this);
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);
}
} }
public DataSetStorageRecoveryAlgorithm<T> getRecoveryAlgorithm() public DataSetStorageRecoveryAlgorithm<T> getRecoveryAlgorithm()
...@@ -161,4 +137,12 @@ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> ...@@ -161,4 +137,12 @@ public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation>
return recoveryAlgorithm.getDataSetStoragePaths(); return recoveryAlgorithm.getDataSetStoragePaths();
} }
@Override
public DataSetStorageAlgorithm<T> createExternalDataSetStorageAlgorithm(
IDataStoreStrategy dataStoreStrategy, IStorageProcessorTransactional storageProcessor,
IFileOperations fileOperations, IMailClient mailClient)
{
return DataSetStorageAlgorithm.createFromStoredRecoveryAlgorithm(dataStoreStrategy,
storageProcessor, fileOperations, mailClient, this);
}
} }
/*
* 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);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment