Author: thomasm
Date: Fri Dec  1 07:57:05 2017
New Revision: 1816801

URL: http://svn.apache.org/viewvc?rev=1816801&view=rev
Log:
OAK-5173 Path in uniqueness constraint violation exception is always the root

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java?rev=1816801&r1=1816800&r2=1816801&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java
 Fri Dec  1 07:57:05 2017
@@ -31,6 +31,7 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexUtil.encode;
 
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
@@ -318,9 +319,8 @@ class PropertyIndexEditor implements Ind
                         keysToCheckForUniqueness, indexMeta);
                 if (failed != null) {
                     String msg = String.format(
-                            "Uniqueness constraint violated at path [%s] for 
one of the "
-                                    + "property in %s having value %s",
-                            getPath(), propertyNames, failed);
+                            "Uniqueness constraint violated property %s having 
value %s",
+                            propertyNames, failed);
                     throw new CommitFailedException(CONSTRAINT, 30, msg);
                 }
             }
@@ -364,6 +364,10 @@ class PropertyIndexEditor implements Ind
             for (IndexStoreStrategy s : getStrategies(true)) {
                 count += s.count(root, indexMeta, singleton(key), 2);
                 if (count > 1) {
+                    Iterator<String> it = s.query(null, null, indexMeta, 
singleton(key)).iterator();
+                    if (it.hasNext()) {
+                        return key + ": " + it.next();
+                    }
                     return key;
                 }
             }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java?rev=1816801&r1=1816800&r2=1816801&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java
 Fri Dec  1 07:57:05 2017
@@ -136,7 +136,18 @@ public class UniqueEntryStoreStrategy im
             @Override
             public String produce(NodeState indexHit, String pathName) {
                 PropertyState s = indexHit.getProperty("entry");
-                return s.getValue(Type.STRING, 0);
+                if (s.count() <= 1) {
+                    return s.getValue(Type.STRING, 0);
+                } else {
+                    StringBuilder buff = new StringBuilder();
+                    for (int i = 0; i < s.count(); i++) {
+                        if (i > 0) {
+                            buff.append(", ");
+                        }
+                        buff.append(s.getValue(Type.STRING, i));
+                    }
+                    return buff.toString();
+                }
             }
         });        
     }


Reply via email to