This is an automated email from the ASF dual-hosted git repository.
kturner pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push:
new 9c19662d9d adds constraint class name to error message (#5926)
9c19662d9d is described below
commit 9c19662d9da85982a743b4178a47af8cbfccdeda
Author: Keith Turner <[email protected]>
AuthorDate: Wed Sep 24 13:52:50 2025 -0400
adds constraint class name to error message (#5926)
fixes #5914
---
.../core/client/MutationsRejectedException.java | 31 +++++++++++-----------
.../accumulo/test/functional/ConstraintIT.java | 16 ++++++++---
2 files changed, 28 insertions(+), 19 deletions(-)
diff --git
a/core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
b/core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
index 30e6fbd183..f34761576b 100644
---
a/core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
+++
b/core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
@@ -18,6 +18,10 @@
*/
package org.apache.accumulo.core.client;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Collectors.mapping;
+import static java.util.stream.Collectors.toSet;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -26,7 +30,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.stream.Collectors;
import org.apache.accumulo.core.client.security.SecurityErrorCode;
import org.apache.accumulo.core.clientImpl.ClientContext;
@@ -59,13 +62,12 @@ public class MutationsRejectedException extends
AccumuloException {
public MutationsRejectedException(Instance instance,
List<ConstraintViolationSummary> cvsList,
Map<TabletId,Set<SecurityErrorCode>> hashMap, Collection<String>
serverSideErrors,
int unknownErrors, Throwable cause) {
- super(
- "constraint violation codes : "
- +
cvsList.stream().map(ConstraintViolationSummary::getViolationCode)
- .collect(Collectors.toSet())
- + " security codes: " + hashMap.toString() + " # server errors "
- + serverSideErrors.size() + " # exceptions " + unknownErrors,
- cause);
+ super("constraint violation codes : "
+ + cvsList.stream()
+ .collect(groupingBy(ConstraintViolationSummary::getConstrainClass,
+ mapping(ConstraintViolationSummary::getViolationCode,
toSet())))
+ + " security codes: " + hashMap.toString() + " # server errors " +
serverSideErrors.size()
+ + " # exceptions " + unknownErrors, cause);
this.cvsl.addAll(cvsList);
this.af.putAll(hashMap);
this.es.addAll(serverSideErrors);
@@ -86,13 +88,12 @@ public class MutationsRejectedException extends
AccumuloException {
public MutationsRejectedException(AccumuloClient client,
List<ConstraintViolationSummary> cvsList,
Map<TabletId,Set<SecurityErrorCode>> hashMap, Collection<String>
serverSideErrors,
int unknownErrors, Throwable cause) {
- super(
- "constraint violation codes : "
- +
cvsList.stream().map(ConstraintViolationSummary::getViolationCode).collect(
- Collectors.toSet())
- + " security codes: " + format(hashMap, (ClientContext) client) +
" # server errors "
- + serverSideErrors.size() + " # exceptions " + unknownErrors,
- cause);
+ super("constraint violation codes : "
+ + cvsList.stream()
+ .collect(groupingBy(ConstraintViolationSummary::getConstrainClass,
+ mapping(ConstraintViolationSummary::getViolationCode,
toSet())))
+ + " security codes: " + format(hashMap, (ClientContext) client) + "
# server errors "
+ + serverSideErrors.size() + " # exceptions " + unknownErrors, cause);
this.cvsl.addAll(cvsList);
this.af.putAll(hashMap);
this.es.addAll(serverSideErrors);
diff --git
a/test/src/main/java/org/apache/accumulo/test/functional/ConstraintIT.java
b/test/src/main/java/org/apache/accumulo/test/functional/ConstraintIT.java
index 9f99d7e390..dd30465067 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/ConstraintIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/ConstraintIT.java
@@ -19,6 +19,7 @@
package org.apache.accumulo.test.functional;
import static
org.apache.accumulo.core.util.UtilWaitThread.sleepUninterruptibly;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.Duration;
import java.util.HashMap;
@@ -135,6 +136,9 @@ public class ConstraintIT extends AccumuloClusterHarness {
throw new Exception("Unexpected # violating mutations " +
cvs.numberOfViolatingMutations);
}
}
+
+ assertTrue(mre.getMessage().contains(
+ "constraint violation codes :
{org.apache.accumulo.test.constraints.NumericValueConstraint=[1]}"));
}
if (!sawMRE) {
@@ -290,7 +294,7 @@ public class ConstraintIT extends AccumuloClusterHarness {
}
}
bw.addMutation(newMut("r1", "cf1", "cq3", "I'm a naughty value"));
- bw.addMutation(newMut("@bad row@", "cf1", "cq2", "456"));
+ bw.addMutation(newMut("r1", "@bad fam@", "@bad qual@", "456"));
bw.addMutation(newMut("r1", "cf1", "cq4", "789"));
boolean sawMRE = false;
@@ -300,14 +304,12 @@ public class ConstraintIT extends AccumuloClusterHarness {
// should not get here
throw new Exception("Test failed, constraint did not catch bad
mutation");
} catch (MutationsRejectedException mre) {
- System.out.println(mre);
-
sawMRE = true;
// verify constraint violation summary
List<ConstraintViolationSummary> cvsl =
mre.getConstraintViolationSummaries();
- if (cvsl.size() != 2) {
+ if (cvsl.size() != 3) {
throw new Exception("Unexpected constraints");
}
@@ -322,6 +324,12 @@ public class ConstraintIT extends AccumuloClusterHarness {
"Unexpected " + cvs.constrainClass + " " +
cvs.numberOfViolatingMutations);
}
}
+
+ assertTrue(mre.getMessage().contains(
+ "constraint violation codes :
{org.apache.accumulo.test.constraints.NumericValueConstraint=[1],
org.apache.accumulo.test.constraints.AlphaNumKeyConstraint=[2, 3]}")
+ || mre.getMessage().contains(
+ "constraint violation codes :
{org.apache.accumulo.test.constraints.AlphaNumKeyConstraint=[2, 3],
org.apache.accumulo.test.constraints.NumericValueConstraint=[1]}"),
+ mre::getMessage);
}
if (!sawMRE) {