Author: reschke
Date: Wed Feb 19 16:22:09 2014
New Revision: 1569810
URL: http://svn.apache.org/r1569810
Log:
OAK-1335 - ensure that all versions in a version history have distinct time
stamps, because other parts of the code rely on it
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java
jackrabbit/oak/trunk/oak-jcr/pom.xml
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ReadWriteVersionManager.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java?rev=1569810&r1=1569809&r2=1569810&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java
Wed Feb 19 16:22:09 2014
@@ -83,6 +83,8 @@ public class DateVersionSelector impleme
if (c > latestDate && c <= timestamp) {
latestDate = c;
latestVersion = v;
+ } else if (c == latestDate) {
+ throw new RepositoryException("two versions share the same
jcr:created timestamp in history:" + history);
}
}
return latestVersion;
Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1569810&r1=1569809&r2=1569810&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Feb 19 16:22:09 2014
@@ -92,8 +92,6 @@
org.apache.jackrabbit.test.api.version.MergeShallowTest
org.apache.jackrabbit.test.api.version.MergeNonVersionableSubNodeTest
org.apache.jackrabbit.test.api.version.MergeSubNodeTest
- org.apache.jackrabbit.test.api.version.RestoreTest#testRestoreName
<!-- OAK-1335 -->
- org.apache.jackrabbit.test.api.version.RestoreTest#testRestoreNameJcr2
<!-- OAK-1335 -->
<!-- Permission Evaluation -->
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=1569810&r1=1569809&r2=1569810&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
Wed Feb 19 16:22:09 2014
@@ -26,6 +26,7 @@ import javax.jcr.version.LabelExistsVers
import javax.jcr.version.VersionException;
import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
@@ -35,10 +36,12 @@ 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.test.ISO8601;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static org.apache.jackrabbit.JcrConstants.JCR_CREATED;
import static org.apache.jackrabbit.JcrConstants.JCR_ISCHECKEDOUT;
import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONLABELS;
import static
org.apache.jackrabbit.oak.plugins.version.VersionConstants.REP_ADD_VERSION_LABELS;
@@ -118,6 +121,15 @@ public class ReadWriteVersionManager ext
if (isCheckedOut(versionable)) {
versionable.setProperty(JCR_ISCHECKEDOUT,
Boolean.FALSE, Type.BOOLEAN);
+ Tree baseVersion = getBaseVersion(versionable);
+ 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
+ }
+ }
try {
sessionDelegate.commit();
refresh();