diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationDetails.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationDetails.java index b869ab0225b2be81278f444aeba9499e715c823c..bc884f697cbb8dcd6677d8ad230ccaac107fdaf6 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationDetails.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationDetails.java @@ -64,6 +64,11 @@ public class DataSetRegistrationDetails<T extends DataSetInformation> implements } public LocatorType getLocatorType(File incomingDataSetPath) + { + return getLocatorType(); + } + + public LocatorType getLocatorType() { return new LocatorType(LocatorType.DEFAULT_LOCATOR_TYPE_CODE); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java index 23ad02811386f7ee55070c6b0edfd0e1be112718..1a83fdee2e6d642842de30ceca99696cbdf13c21 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java @@ -57,9 +57,9 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements private final File stagingDirectory; /** - * The currently live child transaction. + * All transactions ever created on this service. */ - private DataSetRegistrationTransaction<T> liveTransactionOrNull; + private final ArrayList<DataSetRegistrationTransaction<T>> transactions; /** * A data set that will be created but might not yet exist. @@ -106,6 +106,8 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements { stagingDirectory = new File(stagingDirString); } + + transactions = new ArrayList<DataSetRegistrationTransaction<T>>(); } public OmniscientTopLevelDataSetRegistratorState getRegistratorContext() @@ -147,18 +149,16 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements public IDataSetRegistrationTransaction transaction(File dataSetFile, IDataSetRegistrationDetailsFactory<T> detailsFactory) { - // If a transaction is hanging around, commit it before starting a new one - commitExtantTransaction(); - File workingDirectory = dataSetFile.getParentFile(); // Clone this service for the transaction to keep them independent - liveTransactionOrNull = + DataSetRegistrationTransaction<T> transaction = new DataSetRegistrationTransaction<T>(registrator.getGlobalState() .getStoreRootDir(), workingDirectory, stagingDirectory, this, detailsFactory); - return liveTransactionOrNull; + transactions.add(transaction); + return transaction; } /** @@ -167,7 +167,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements public void commit() { // If a transaction is hanging around, commit it - commitExtantTransaction(); + commitExtantTransactions(); for (DataSetRegistrationAlgorithm registrationAlgorithm : dataSetRegistrations) { @@ -181,7 +181,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements */ public void abort() { - rollbackExtantTransaction(); + rollbackExtantTransactions(); dataSetRegistrations.clear(); } @@ -221,21 +221,27 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements /** * If a transaction is hanging around, commit it */ - private void commitExtantTransaction() + private void commitExtantTransactions() { - if (null != liveTransactionOrNull - && false == liveTransactionOrNull.isCommittedOrRolledback()) + for (DataSetRegistrationTransaction<T> transaction : transactions) { - // Commit the existing transaction - liveTransactionOrNull.commit(); + if (false == transaction.isCommittedOrRolledback()) + { + // Commit the existing transaction + transaction.commit(); + } } } - private void rollbackExtantTransaction() + private void rollbackExtantTransactions() { - if (null != liveTransactionOrNull) + for (DataSetRegistrationTransaction<T> transaction : transactions) { - liveTransactionOrNull.rollback(); + if (false == transaction.isCommittedOrRolledback()) + { + // Rollback the existing transaction + transaction.rollback(); + } } } @@ -260,15 +266,15 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements DataSetRegistrationAlgorithmState state = new DataSetRegistrationAlgorithmState(incomingDataSetFile, - globalState.getOpenBisService(), - cleanAfterwardsAction, registratorContext.getPreRegistrationAction(), + globalState.getOpenBisService(), cleanAfterwardsAction, + registratorContext.getPreRegistrationAction(), registratorContext.getPostRegistrationAction(), - details.getDataSetInformation(), - dataStoreStrategy, details, registratorContext.getStorageProcessor(), - registratorContext.getFileOperations(), - globalState.getDataSetValidator(), globalState.getMailClient(), - globalState.isDeleteUnidentified(), registratorContext.getRegistrationLock(), - globalState.getDssCode(), globalState.isNotifySuccessfulRegistration()); + details.getDataSetInformation(), dataStoreStrategy, details, + registratorContext.getStorageProcessor(), + registratorContext.getFileOperations(), globalState.getDataSetValidator(), + globalState.getMailClient(), globalState.isDeleteUnidentified(), + registratorContext.getRegistrationLock(), globalState.getDssCode(), + globalState.isNotifySuccessfulRegistration()); return new DataSetRegistrationAlgorithm(state, this, new DefaultApplicationServerRegistrator(registrator, details.getDataSetInformation()));