diff options
author | Eike Stepper | 2023-01-31 08:37:05 +0000 |
---|---|---|
committer | Eike Stepper | 2023-01-31 08:37:05 +0000 |
commit | fd83407e34f17aa473838908c6f53e14e407c86a (patch) | |
tree | c862d8ece12891b7fb7ad88eb569a4b807c5f5b1 /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction | |
parent | d31dc99aed7099d4f14c75320589127b785ef093 (diff) | |
download | cdo-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/internal/cdo/transaction')
-rw-r--r-- | plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java | 52 |
1 files changed, 45 insertions, 7 deletions
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) |