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();


Reply via email to