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.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.coprocessor.BaseRegionObserver;
31 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
32 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
33 import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
34
35
36
37
38
39
40
41 @InterfaceAudience.Private
42 public class ConstraintProcessor extends BaseRegionObserver {
43
44 private static final Log LOG = LogFactory.getLog(ConstraintProcessor.class);
45
46 private final ClassLoader classloader;
47
48 private List<? extends Constraint> constraints = new ArrayList<Constraint>();
49
50
51
52
53
54
55 public ConstraintProcessor() {
56 classloader = this.getClass().getClassLoader();
57 }
58
59 @Override
60 public void start(CoprocessorEnvironment environment) {
61
62 if (!(environment instanceof RegionCoprocessorEnvironment)) {
63 throw new IllegalArgumentException(
64 "Constraints only act on regions - started in an environment that was not a region");
65 }
66 RegionCoprocessorEnvironment env = (RegionCoprocessorEnvironment) environment;
67 HTableDescriptor desc = env.getRegion().getTableDesc();
68
69 try {
70 this.constraints = Constraints.getConstraints(desc, classloader);
71 } catch (IOException e) {
72 throw new IllegalArgumentException(e);
73 }
74
75 if (LOG.isInfoEnabled()) {
76 LOG.info("Finished loading " + constraints.size()
77 + " user Constraints on table: " + new String(desc.getName()));
78 }
79
80 }
81
82 @Override
83 public void prePut(ObserverContext<RegionCoprocessorEnvironment> e, Put put,
84 WALEdit edit, boolean writeToWAL) throws IOException {
85
86 for (Constraint c : constraints) {
87 c.check(put);
88 }
89
90 }
91 }