use of org.apache.accumulo.core.data.impl.ComparableBytes in project accumulo by apache.
the class ConstraintChecker method check.
public Violations check(Environment env, Mutation m) {
if (!env.getExtent().contains(new ComparableBytes(m.getRow()))) {
Violations violations = new Violations();
ConstraintViolationSummary cvs = new ConstraintViolationSummary(SystemConstraint.class.getName(), (short) -1, "Mutation outside of tablet extent", 1);
violations.add(cvs);
// do not bother with further checks since this mutation does not go with this tablet
return violations;
}
// violations is intentionally initialized as null for performance
Violations violations = null;
for (Constraint constraint : getConstraints()) {
try {
List<Short> violationCodes = constraint.check(env, m);
if (violationCodes != null) {
String className = constraint.getClass().getName();
for (Short vcode : violationCodes) {
violations = addViolation(violations, new ConstraintViolationSummary(className, vcode, constraint.getViolationDescription(vcode), 1));
}
}
} catch (Throwable throwable) {
log.warn("CONSTRAINT FAILED : {}", throwable.getMessage(), throwable);
// constraint failed in some way, do not allow mutation to pass
short vcode;
String msg;
if (throwable instanceof NullPointerException) {
vcode = -1;
msg = "threw NullPointerException";
} else if (throwable instanceof ArrayIndexOutOfBoundsException) {
vcode = -2;
msg = "threw ArrayIndexOutOfBoundsException";
} else if (throwable instanceof NumberFormatException) {
vcode = -3;
msg = "threw NumberFormatException";
} else if (throwable instanceof IOException) {
vcode = -4;
msg = "threw IOException (or subclass of)";
} else {
vcode = -100;
msg = "threw some Exception";
}
violations = addViolation(violations, new ConstraintViolationSummary(constraint.getClass().getName(), vcode, "CONSTRAINT FAILED : " + msg, 1));
}
}
return violations;
}
Aggregations