Author: reschke
Date: Mon Jun 11 17:51:00 2018
New Revision: 1833347
URL: http://svn.apache.org/viewvc?rev=1833347&view=rev
Log:
OAK-7512: RestoreTest.testRestoreNameJcr2 occasionally failing caused by
versions sharing timestamps
(Patch by Marcel Reutegger)
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java?rev=1833347&r1=1833346&r2=1833347&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
Mon Jun 11 17:51:00 2018
@@ -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.plugins.tree.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();