You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2019/10/24 06:25:13 UTC
svn commit: r1868846 - in /jackrabbit/oak/branches/1.4: ./ oak-jcr/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
Author: reschke
Date: Thu Oct 24 06:25:13 2019
New Revision: 1868846
URL: http://svn.apache.org/viewvc?rev=1868846&view=rev
Log:
OAK-7512: RestoreTest.testRestoreNameJcr2 occasionally failing caused by versions sharing timestamps (merged r1833347 into 1.4)
Modified:
jackrabbit/oak/branches/1.4/ (props changed)
jackrabbit/oak/branches/1.4/oak-jcr/ (props changed)
jackrabbit/oak/branches/1.4/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
Propchange: jackrabbit/oak/branches/1.4/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1833347
Propchange: jackrabbit/oak/branches/1.4/oak-jcr/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk/oak-jcr:r1833347
Modified: jackrabbit/oak/branches/1.4/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java?rev=1868846&r1=1868845&r2=1868846&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.4/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java (original)
+++ jackrabbit/oak/branches/1.4/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java Thu Oct 24 06:25:13 2019
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.plugins.version.ReadOnlyVersionManager;
import org.apache.jackrabbit.oak.util.TreeUtil;
+import org.apache.jackrabbit.oak.stats.Clock;
import org.apache.jackrabbit.util.ISO8601;
import static com.google.common.base.Preconditions.checkArgument;
@@ -52,6 +53,8 @@ public class ReadWriteVersionManager ext
private final VersionStorage versionStorage;
+ private final Clock clock = Clock.ACCURATE;
+
public ReadWriteVersionManager(@Nonnull SessionDelegate sessionDelegate) {
this.sessionDelegate = sessionDelegate;
this.versionStorage = new VersionStorage(sessionDelegate.getRoot());
@@ -118,12 +121,15 @@ public class ReadWriteVersionManager ext
Tree baseVersion = getExistingBaseVersion(versionable);
versionable.setProperty(JCR_ISCHECKEDOUT, Boolean.FALSE, Type.BOOLEAN);
PropertyState created = baseVersion.getProperty(JCR_CREATED);
- if (created != null) {
- long c = ISO8601.parse(created.getValue(Type.DATE)).getTimeInMillis();
- while (System.currentTimeMillis() == c) {
- // busy-wait for System.currentTimeMillis to change
- // so that the new version has a distinct timestamp
- }
+ long c = created == null ? 0 : ISO8601.parse(created.getValue(Type.DATE)).getTimeInMillis();
+ try {
+ long last = Math.max(c, clock.getTimeIncreasing());
+ // wait for clock to change so that the new version has a distinct
+ // timestamp from the last checkin performed by this VersionManager
+ // see https://issues.apache.org/jira/browse/OAK-7512
+ clock.waitUntil(last);
+ } catch (InterruptedException e) {
+ throw new RepositoryException(e);
}
try {
sessionDelegate.commit();