@SafeVarargs
  public static TableDescriptorBuilder add(TableDescriptorBuilder builder,
    Pair<Class<? extends Constraint>, Configuration>... constraints) throws IOException {
    enable(builder);
    long priority = getNextPriority(builder);
    for (Pair<Class<? extends Constraint>, Configuration> pair : constraints) {
      addConstraint(builder, pair.getFirst(), pair.getSecond(), priority++);
    }
    return updateLatestPriority(builder, priority);
  }
Add constraints and their associated configurations to the table.
<p>
Adding the same constraint class twice will overwrite the first constraint's configuration
<p>
Each constraint, when added to the table, will have a specific priority, dictating the order in
which the {@link Constraint} will be run. A {@link Constraint} earlier in the list will be run
before those later in the list. The same logic applies between two Constraints over time
(earlier added is run first on the regionserver).
@param builder     {@link TableDescriptorBuilder} to add a {@link Constraint}
@param constraints {@link Pair} of a {@link Constraint} and its associated
                   {@link Configuration}. The Constraint will be configured on load with the
                   specified configuration.All constraints are considered automatically enabled
                   on add
@throws IOException if any constraint could not be deserialized. Assumes if 1 constraint is not
                    loaded properly, something has gone terribly wrong and that all constraints
                    need to be enforced.
hbase-server/src/main/java/org/apache/hadoop/hbase/constraint/Constraints.java