[581443] Provide a faster CDOTransaction.commitAndClose() method
https://bugs.eclipse.org/bugs/show_bug.cgi?id=581443
diff --git a/features/org.eclipse.emf.cdo-feature/feature.xml b/features/org.eclipse.emf.cdo-feature/feature.xml
index 4d60068..7076e52 100644
--- a/features/org.eclipse.emf.cdo-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo-feature/feature.xml
@@ -13,7 +13,7 @@
<feature
id="org.eclipse.emf.cdo"
label="%featureName"
- version="4.21.0.qualifier"
+ version="4.22.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.emf.cdo-feature/pom.xml b/features/org.eclipse.emf.cdo-feature/pom.xml
index fc2e94f..09fee1d 100644
--- a/features/org.eclipse.emf.cdo-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo</artifactId>
- <version>4.21.0-SNAPSHOT</version>
+ <version>4.22.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.tests-feature/feature.xml b/features/org.eclipse.emf.cdo.tests-feature/feature.xml
index a5aa888..acd0911 100644
--- a/features/org.eclipse.emf.cdo.tests-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.tests-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.tests"
label="%featureName"
- version="4.6.2.qualifier"
+ version="4.6.3.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.emf.cdo.tests-feature/pom.xml b/features/org.eclipse.emf.cdo.tests-feature/pom.xml
index 0cd67ad..e9d2c4f 100644
--- a/features/org.eclipse.emf.cdo.tests-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.tests-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.tests</artifactId>
- <version>4.6.2-SNAPSHOT</version>
+ <version>4.6.3-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
index abb1d05..f801b61 100644
--- a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.emf.cdo; singleton:=true
-Bundle-Version: 4.20.0.qualifier
+Bundle-Version: 4.21.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
Bundle-Localization: plugin
@@ -10,28 +10,28 @@
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)";resolution:=optional,
org.eclipse.emf.cdo.common;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.cdo;version="4.20.0",
- org.eclipse.emf.cdo.eresource;version="4.20.0",
- org.eclipse.emf.cdo.eresource.impl;version="4.20.0",
- org.eclipse.emf.cdo.eresource.util;version="4.20.0",
- org.eclipse.emf.cdo.eresource.validation;version="4.20.0",
- org.eclipse.emf.cdo.etypes;version="4.20.0",
- org.eclipse.emf.cdo.etypes.impl;version="4.20.0",
- org.eclipse.emf.cdo.etypes.util;version="4.20.0",
- org.eclipse.emf.cdo.session;version="4.20.0",
- org.eclipse.emf.cdo.session.remote;version="4.20.0",
- org.eclipse.emf.cdo.transaction;version="4.20.0",
- org.eclipse.emf.cdo.util;version="4.20.0",
- org.eclipse.emf.cdo.view;version="4.20.0",
- org.eclipse.emf.internal.cdo;version="4.20.0",
- org.eclipse.emf.internal.cdo.analyzer;version="4.20.0";
+Export-Package: org.eclipse.emf.cdo;version="4.21.0",
+ org.eclipse.emf.cdo.eresource;version="4.21.0",
+ org.eclipse.emf.cdo.eresource.impl;version="4.21.0",
+ org.eclipse.emf.cdo.eresource.util;version="4.21.0",
+ org.eclipse.emf.cdo.eresource.validation;version="4.21.0",
+ org.eclipse.emf.cdo.etypes;version="4.21.0",
+ org.eclipse.emf.cdo.etypes.impl;version="4.21.0",
+ org.eclipse.emf.cdo.etypes.util;version="4.21.0",
+ org.eclipse.emf.cdo.session;version="4.21.0",
+ org.eclipse.emf.cdo.session.remote;version="4.21.0",
+ org.eclipse.emf.cdo.transaction;version="4.21.0",
+ org.eclipse.emf.cdo.util;version="4.21.0",
+ org.eclipse.emf.cdo.view;version="4.21.0",
+ org.eclipse.emf.internal.cdo;version="4.21.0",
+ org.eclipse.emf.internal.cdo.analyzer;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.bundle;version="4.20.0";x-friends:="org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.messages;version="4.20.0";x-internal:=true,
- org.eclipse.emf.internal.cdo.object;version="4.20.0";
+ org.eclipse.emf.internal.cdo.bundle;version="4.21.0";x-friends:="org.eclipse.emf.cdo.ui",
+ org.eclipse.emf.internal.cdo.messages;version="4.21.0";x-internal:=true,
+ org.eclipse.emf.internal.cdo.object;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
@@ -40,12 +40,12 @@
org.eclipse.emf.cdo.explorer,
org.eclipse.emf.cdo.explorer.ui,
org.eclipse.emf.cdo.edit",
- org.eclipse.emf.internal.cdo.query;version="4.20.0";
+ org.eclipse.emf.internal.cdo.query;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.session;version="4.20.0";
+ org.eclipse.emf.internal.cdo.session;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
@@ -55,23 +55,23 @@
org.eclipse.emf.cdo.security.ui,
org.eclipse.emf.cdo.explorer,
org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.internal.cdo.session.remote;version="4.20.0";
+ org.eclipse.emf.internal.cdo.session.remote;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.transaction;version="4.20.0";
+ org.eclipse.emf.internal.cdo.transaction;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui,
org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.internal.cdo.util;version="4.20.0";
+ org.eclipse.emf.internal.cdo.util;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.view;version="4.20.0";
+ org.eclipse.emf.internal.cdo.view;version="4.21.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
@@ -79,6 +79,6 @@
org.eclipse.emf.cdo.ui.ide,
org.eclipse.emf.cdo.explorer,
org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.spi.cdo;version="4.20.0"
+ org.eclipse.emf.spi.cdo;version="4.21.0"
Bundle-ActivationPolicy: lazy
Automatic-Module-Name: org.eclipse.emf.cdo
diff --git a/plugins/org.eclipse.emf.cdo/pom.xml b/plugins/org.eclipse.emf.cdo/pom.xml
index db6740a..05dd658 100644
--- a/plugins/org.eclipse.emf.cdo/pom.xml
+++ b/plugins/org.eclipse.emf.cdo/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo</groupId>
<artifactId>org.eclipse.emf.cdo</artifactId>
- <version>4.20.0-SNAPSHOT</version>
+ <version>4.21.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
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 d28fcfd..99c213e 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 @@
}
@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 040bbce..dd09469 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 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 d2a7f0a..eb21e32 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 @@
@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 @@
}
}
- CDOCommitInfo info = commitSynced(monitor);
- if (info != null)
- {
- waitForCommitInfo(info.getTimeStamp());
- }
-
- return info;
+ return commitSynced(monitor);
}
private void waitForCommitInfo(long timeStamp)