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