1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.constraint;
19
20 import java.io.IOException;
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.hadoop.hbase.classification.InterfaceAudience;
27 import org.apache.hadoop.hbase.CoprocessorEnvironment;
28 import org.apache.hadoop.hbase.HTableDescriptor;
29 import org.apache.hadoop.hbase.client.Put;
30 import org.apache.hadoop.hbase.client.Durability;
31 import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
32 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
33 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
34 import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
35
36
37
38
39
40
41
42 @InterfaceAudience.Private
43 public class ConstraintProcessor extends BaseRegionObserver {
44
45 private static final Log LOG = LogFactory.getLog(ConstraintProcessor.class);
46
47 private final ClassLoader classloader;
48
49 private List<? extends Constraint> constraints = new ArrayList<Constraint>();
50
51
52
53
54
55
56 public ConstraintProcessor() {
57 classloader = this.getClass().getClassLoader();
58 }
59
60 @Override
61 public void start(CoprocessorEnvironment environment) {
62
63 if (!(environment instanceof RegionCoprocessorEnvironment)) {
64 throw new IllegalArgumentException(
65 "Constraints only act on regions - started in an environment that was not a region");
66 }
67 RegionCoprocessorEnvironment env = (RegionCoprocessorEnvironment) environment;
68 HTableDescriptor desc = env.getRegion().getTableDesc();
69
70 try {
71 this.constraints = Constraints.getConstraints(desc, classloader);
72 } catch (IOException e) {
73 throw new IllegalArgumentException(e);
74 }
75
76 if (LOG.isInfoEnabled()) {
77 LOG.info("Finished loading " + constraints.size()
78 + " user Constraints on table: " + desc.getTableName());
79 }
80
81 }
82
83 @Override
84 public void prePut(ObserverContext<RegionCoprocessorEnvironment> e, Put put,
85 WALEdit edit, Durability durability) throws IOException {
86
87 for (Constraint c : constraints) {
88 c.check(put);
89 }
90
91 }
92 }