1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.regionserver.wal;
22
23 import java.io.IOException;
24
25 import org.apache.hadoop.hbase.Coprocessor;
26 import org.apache.hadoop.hbase.HRegionInfo;
27 import org.apache.hadoop.hbase.coprocessor.*;
28 import org.apache.hadoop.classification.InterfaceAudience;
29 import org.apache.hadoop.conf.Configuration;
30
31
32
33
34
35 @InterfaceAudience.Private
36 public class WALCoprocessorHost
37 extends CoprocessorHost<WALCoprocessorHost.WALEnvironment> {
38
39
40
41
42 static class WALEnvironment extends CoprocessorHost.Environment
43 implements WALCoprocessorEnvironment {
44
45 private FSHLog wal;
46
47 @Override
48 public FSHLog getWAL() {
49 return wal;
50 }
51
52
53
54
55
56
57
58
59
60
61 public WALEnvironment(Class<?> implClass, final Coprocessor impl,
62 final int priority, final int seq, final Configuration conf,
63 final FSHLog hlog) {
64 super(impl, priority, seq, conf);
65 this.wal = hlog;
66 }
67 }
68
69 FSHLog wal;
70
71
72
73
74
75 public WALCoprocessorHost(final FSHLog log, final Configuration conf) {
76 this.wal = log;
77
78 loadSystemCoprocessors(conf, WAL_COPROCESSOR_CONF_KEY);
79 }
80
81 @Override
82 public WALEnvironment createEnvironment(final Class<?> implClass,
83 final Coprocessor instance, final int priority, final int seq,
84 final Configuration conf) {
85 return new WALEnvironment(implClass, instance, priority, seq, conf,
86 this.wal);
87 }
88
89
90
91
92
93
94
95
96 public boolean preWALWrite(HRegionInfo info, HLogKey logKey, WALEdit logEdit)
97 throws IOException {
98 boolean bypass = false;
99 ObserverContext<WALCoprocessorEnvironment> ctx = null;
100 for (WALEnvironment env: coprocessors) {
101 if (env.getInstance() instanceof
102 org.apache.hadoop.hbase.coprocessor.WALObserver) {
103 ctx = ObserverContext.createAndPrepare(env, ctx);
104 ((org.apache.hadoop.hbase.coprocessor.WALObserver)env.getInstance()).
105 preWALWrite(ctx, info, logKey, logEdit);
106 bypass |= ctx.shouldBypass();
107 if (ctx.shouldComplete()) {
108 break;
109 }
110 }
111 }
112 return bypass;
113 }
114
115
116
117
118
119
120
121 public void postWALWrite(HRegionInfo info, HLogKey logKey, WALEdit logEdit)
122 throws IOException {
123 ObserverContext<WALCoprocessorEnvironment> ctx = null;
124 for (WALEnvironment env: coprocessors) {
125 if (env.getInstance() instanceof
126 org.apache.hadoop.hbase.coprocessor.WALObserver) {
127 ctx = ObserverContext.createAndPrepare(env, ctx);
128 ((org.apache.hadoop.hbase.coprocessor.WALObserver)env.getInstance()).
129 postWALWrite(ctx, info, logKey, logEdit);
130 if (ctx.shouldComplete()) {
131 break;
132 }
133 }
134 }
135 }
136 }