Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2023-01-31 08:37:05 +0000
committerEike Stepper2023-01-31 08:37:05 +0000
commitfd83407e34f17aa473838908c6f53e14e407c86a (patch)
treec862d8ece12891b7fb7ad88eb569a4b807c5f5b1 /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf
parentd31dc99aed7099d4f14c75320589127b785ef093 (diff)
downloadcdo-fd83407e34f17aa473838908c6f53e14e407c86a.tar.gz
cdo-fd83407e34f17aa473838908c6f53e14e407c86a.tar.xz
cdo-fd83407e34f17aa473838908c6f53e14e407c86a.zip
[581443] Provide a faster CDOTransaction.commitAndClose() method
https://bugs.eclipse.org/bugs/show_bug.cgi?id=581443
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java6
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java5
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java52
3 files changed, 56 insertions, 7 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java
index d28fcfdb5e..99c213e232 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java
@@ -329,6 +329,12 @@ public class CDOPushTransaction extends Notifier implements CDOTransaction
}
@Override
+ public CDOCommitInfo commitAndClose(IProgressMonitor monitor, boolean keepOpenAfterCommitProblem) throws CommitException
+ {
+ return delegate.commitAndClose(monitor, keepOpenAfterCommitProblem);
+ }
+
+ @Override
public void rollback()
{
throw new UnsupportedOperationException("Rollback not supported for push transactions");
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
index 040bbcec11..dd094699bd 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
@@ -310,6 +310,11 @@ public interface CDOTransaction extends CDOView, CDOCommonTransaction, CDOUserTr
*/
public CDOCommitInfo commit(Runnable runnable, int attempts, IProgressMonitor monitor) throws ConcurrentAccessException, CommitException;
+ /**
+ * @since 4.21
+ */
+ public CDOCommitInfo commitAndClose(IProgressMonitor monitor, boolean keepOpenAfterCommitProblem) throws CommitException;
+
@Override
public Options options();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index d2a7f0a09c..eb21e32acf 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -1699,6 +1699,50 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
@Override
public CDOCommitInfo commit(IProgressMonitor monitor) throws CommitException
{
+ CDOCommitInfo info = commitAfterResolveConflicts(monitor);
+ if (info != null)
+ {
+ waitForCommitInfo(info.getTimeStamp());
+ }
+
+ return info;
+ }
+
+ @Override
+ public CDOCommitInfo commitAndClose(IProgressMonitor monitor, boolean keepOpenAfterCommitProblem) throws CommitException
+ {
+ CDOCommitInfo info;
+
+ try
+ {
+ info = commitAfterResolveConflicts(monitor);
+ }
+ catch (Error | RuntimeException | CommitException ex)
+ {
+ if (!keepOpenAfterCommitProblem)
+ {
+ try
+ {
+ close();
+ }
+ catch (Exception ex1)
+ {
+ if (isActive())
+ {
+ OM.LOG.error(ex1);
+ }
+ }
+ }
+
+ throw ex;
+ }
+
+ close();
+ return info;
+ }
+
+ private CDOCommitInfo commitAfterResolveConflicts(IProgressMonitor monitor) throws CommitException
+ {
CDOConflictResolver[] conflictResolvers = options().getConflictResolvers();
if (conflictResolvers.length != 0)
{
@@ -1724,13 +1768,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
}
}
- CDOCommitInfo info = commitSynced(monitor);
- if (info != null)
- {
- waitForCommitInfo(info.getTimeStamp());
- }
-
- return info;
+ return commitSynced(monitor);
}
private void waitForCommitInfo(long timeStamp)

Back to the top