1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.regionserver.wal;
20
21 import java.lang.reflect.Constructor;
22 import java.lang.reflect.InvocationTargetException;
23
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.io.TagCompressionContext;
26 import org.apache.hadoop.hbase.io.util.Dictionary;
27
28
29
30
31 @InterfaceAudience.Private
32 class CompressionContext {
33
34 static final String ENABLE_WAL_TAGS_COMPRESSION =
35 "hbase.regionserver.wal.tags.enablecompression";
36
37 final Dictionary regionDict;
38 final Dictionary tableDict;
39 final Dictionary familyDict;
40 final Dictionary qualifierDict;
41 final Dictionary rowDict;
42
43 TagCompressionContext tagCompressionContext = null;
44
45 public CompressionContext(Class<? extends Dictionary> dictType, boolean recoveredEdits,
46 boolean hasTagCompression) throws SecurityException, NoSuchMethodException,
47 InstantiationException, IllegalAccessException, InvocationTargetException {
48 Constructor<? extends Dictionary> dictConstructor =
49 dictType.getConstructor();
50 regionDict = dictConstructor.newInstance();
51 tableDict = dictConstructor.newInstance();
52 familyDict = dictConstructor.newInstance();
53 qualifierDict = dictConstructor.newInstance();
54 rowDict = dictConstructor.newInstance();
55 if (recoveredEdits) {
56
57 regionDict.init(1);
58 tableDict.init(1);
59 } else {
60 regionDict.init(Short.MAX_VALUE);
61 tableDict.init(Short.MAX_VALUE);
62 }
63 rowDict.init(Short.MAX_VALUE);
64 familyDict.init(Byte.MAX_VALUE);
65 qualifierDict.init(Byte.MAX_VALUE);
66 if (hasTagCompression) {
67 tagCompressionContext = new TagCompressionContext(dictType, Short.MAX_VALUE);
68 }
69 }
70
71 void clear() {
72 regionDict.clear();
73 tableDict.clear();
74 familyDict.clear();
75 qualifierDict.clear();
76 rowDict.clear();
77 if (tagCompressionContext != null) {
78 tagCompressionContext.clear();
79 }
80 }
81 }