Skip to content
Snippets Groups Projects
Commit 4359cfa2 authored by tpylak's avatar tpylak
Browse files

LMS-2033 from Sekhar: allow to open many transactions

SVN: 19878
parent 39f4416d
No related branches found
No related tags found
No related merge requests found
...@@ -64,6 +64,11 @@ public class DataSetRegistrationDetails<T extends DataSetInformation> implements ...@@ -64,6 +64,11 @@ public class DataSetRegistrationDetails<T extends DataSetInformation> implements
} }
public LocatorType getLocatorType(File incomingDataSetPath) public LocatorType getLocatorType(File incomingDataSetPath)
{
return getLocatorType();
}
public LocatorType getLocatorType()
{ {
return new LocatorType(LocatorType.DEFAULT_LOCATOR_TYPE_CODE); return new LocatorType(LocatorType.DEFAULT_LOCATOR_TYPE_CODE);
} }
......
...@@ -57,9 +57,9 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements ...@@ -57,9 +57,9 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
private final File stagingDirectory; 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. * A data set that will be created but might not yet exist.
...@@ -106,6 +106,8 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements ...@@ -106,6 +106,8 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
{ {
stagingDirectory = new File(stagingDirString); stagingDirectory = new File(stagingDirString);
} }
transactions = new ArrayList<DataSetRegistrationTransaction<T>>();
} }
public OmniscientTopLevelDataSetRegistratorState getRegistratorContext() public OmniscientTopLevelDataSetRegistratorState getRegistratorContext()
...@@ -147,18 +149,16 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements ...@@ -147,18 +149,16 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
public IDataSetRegistrationTransaction transaction(File dataSetFile, public IDataSetRegistrationTransaction transaction(File dataSetFile,
IDataSetRegistrationDetailsFactory<T> detailsFactory) IDataSetRegistrationDetailsFactory<T> detailsFactory)
{ {
// If a transaction is hanging around, commit it before starting a new one
commitExtantTransaction();
File workingDirectory = dataSetFile.getParentFile(); File workingDirectory = dataSetFile.getParentFile();
// Clone this service for the transaction to keep them independent // Clone this service for the transaction to keep them independent
liveTransactionOrNull = DataSetRegistrationTransaction<T> transaction =
new DataSetRegistrationTransaction<T>(registrator.getGlobalState() new DataSetRegistrationTransaction<T>(registrator.getGlobalState()
.getStoreRootDir(), workingDirectory, stagingDirectory, this, .getStoreRootDir(), workingDirectory, stagingDirectory, this,
detailsFactory); detailsFactory);
return liveTransactionOrNull; transactions.add(transaction);
return transaction;
} }
/** /**
...@@ -167,7 +167,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements ...@@ -167,7 +167,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
public void commit() public void commit()
{ {
// If a transaction is hanging around, commit it // If a transaction is hanging around, commit it
commitExtantTransaction(); commitExtantTransactions();
for (DataSetRegistrationAlgorithm registrationAlgorithm : dataSetRegistrations) for (DataSetRegistrationAlgorithm registrationAlgorithm : dataSetRegistrations)
{ {
...@@ -181,7 +181,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements ...@@ -181,7 +181,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
*/ */
public void abort() public void abort()
{ {
rollbackExtantTransaction(); rollbackExtantTransactions();
dataSetRegistrations.clear(); dataSetRegistrations.clear();
} }
...@@ -221,21 +221,27 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements ...@@ -221,21 +221,27 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
/** /**
* If a transaction is hanging around, commit it * If a transaction is hanging around, commit it
*/ */
private void commitExtantTransaction() private void commitExtantTransactions()
{ {
if (null != liveTransactionOrNull for (DataSetRegistrationTransaction<T> transaction : transactions)
&& false == liveTransactionOrNull.isCommittedOrRolledback())
{ {
// Commit the existing transaction if (false == transaction.isCommittedOrRolledback())
liveTransactionOrNull.commit(); {
// 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 ...@@ -260,15 +266,15 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
DataSetRegistrationAlgorithmState state = DataSetRegistrationAlgorithmState state =
new DataSetRegistrationAlgorithmState(incomingDataSetFile, new DataSetRegistrationAlgorithmState(incomingDataSetFile,
globalState.getOpenBisService(), globalState.getOpenBisService(), cleanAfterwardsAction,
cleanAfterwardsAction, registratorContext.getPreRegistrationAction(), registratorContext.getPreRegistrationAction(),
registratorContext.getPostRegistrationAction(), registratorContext.getPostRegistrationAction(),
details.getDataSetInformation(), details.getDataSetInformation(), dataStoreStrategy, details,
dataStoreStrategy, details, registratorContext.getStorageProcessor(), registratorContext.getStorageProcessor(),
registratorContext.getFileOperations(), registratorContext.getFileOperations(), globalState.getDataSetValidator(),
globalState.getDataSetValidator(), globalState.getMailClient(), globalState.getMailClient(), globalState.isDeleteUnidentified(),
globalState.isDeleteUnidentified(), registratorContext.getRegistrationLock(), registratorContext.getRegistrationLock(), globalState.getDssCode(),
globalState.getDssCode(), globalState.isNotifySuccessfulRegistration()); globalState.isNotifySuccessfulRegistration());
return new DataSetRegistrationAlgorithm(state, this, return new DataSetRegistrationAlgorithm(state, this,
new DefaultApplicationServerRegistrator(registrator, new DefaultApplicationServerRegistrator(registrator,
details.getDataSetInformation())); details.getDataSetInformation()));
......
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