1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.io.hfile;
19 import org.apache.hadoop.classification.InterfaceAudience;
20 import org.apache.hadoop.hbase.HConstants;
21 import org.apache.hadoop.hbase.io.HeapSize;
22 import org.apache.hadoop.hbase.io.compress.Compression;
23 import org.apache.hadoop.hbase.io.crypto.Encryption;
24 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
25 import org.apache.hadoop.hbase.util.Bytes;
26 import org.apache.hadoop.hbase.util.ChecksumType;
27 import org.apache.hadoop.hbase.util.ClassSize;
28
29
30
31
32
33
34 @InterfaceAudience.Private
35 public class HFileContext implements HeapSize, Cloneable {
36
37 public static final int DEFAULT_BYTES_PER_CHECKSUM = 16 * 1024;
38 public static final ChecksumType DEFAULT_CHECKSUM_TYPE = ChecksumType.CRC32;
39
40
41 private boolean usesHBaseChecksum = true;
42
43 private boolean includesMvcc = true;
44
45 private boolean includesTags;
46
47 private Compression.Algorithm compressAlgo = Compression.Algorithm.NONE;
48
49 private boolean compressTags;
50
51 private ChecksumType checksumType = DEFAULT_CHECKSUM_TYPE;
52
53 private int bytesPerChecksum = DEFAULT_BYTES_PER_CHECKSUM;
54
55 private int blocksize = HConstants.DEFAULT_BLOCKSIZE;
56 private DataBlockEncoding encoding = DataBlockEncoding.NONE;
57
58 private Encryption.Context cryptoContext = Encryption.Context.NONE;
59
60
61 public HFileContext() {
62 }
63
64
65
66
67
68 public HFileContext(HFileContext context) {
69 this.usesHBaseChecksum = context.usesHBaseChecksum;
70 this.includesMvcc = context.includesMvcc;
71 this.includesTags = context.includesTags;
72 this.compressAlgo = context.compressAlgo;
73 this.compressTags = context.compressTags;
74 this.checksumType = context.checksumType;
75 this.bytesPerChecksum = context.bytesPerChecksum;
76 this.blocksize = context.blocksize;
77 this.encoding = context.encoding;
78 this.cryptoContext = context.cryptoContext;
79 }
80
81 public HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
82 Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
83 int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
84 Encryption.Context cryptoContext) {
85 this.usesHBaseChecksum = useHBaseChecksum;
86 this.includesMvcc = includesMvcc;
87 this.includesTags = includesTags;
88 this.compressAlgo = compressAlgo;
89 this.compressTags = compressTags;
90 this.checksumType = checksumType;
91 this.bytesPerChecksum = bytesPerChecksum;
92 this.blocksize = blockSize;
93 if (encoding != null) {
94 this.encoding = encoding;
95 }
96 this.cryptoContext = cryptoContext;
97 }
98
99 public Compression.Algorithm getCompression() {
100 return compressAlgo;
101 }
102
103 public void setCompression(Compression.Algorithm compressAlgo) {
104 this.compressAlgo = compressAlgo;
105 }
106
107 public boolean isUseHBaseChecksum() {
108 return usesHBaseChecksum;
109 }
110
111 public boolean isIncludesMvcc() {
112 return includesMvcc;
113 }
114
115 public void setIncludesMvcc(boolean includesMvcc) {
116 this.includesMvcc = includesMvcc;
117 }
118
119 public boolean isIncludesTags() {
120 return includesTags;
121 }
122
123 public void setIncludesTags(boolean includesTags) {
124 this.includesTags = includesTags;
125 }
126
127 public boolean isCompressTags() {
128 return compressTags;
129 }
130
131 public void setCompressTags(boolean compressTags) {
132 this.compressTags = compressTags;
133 }
134
135 public ChecksumType getChecksumType() {
136 return checksumType;
137 }
138
139 public int getBytesPerChecksum() {
140 return bytesPerChecksum;
141 }
142
143 public int getBlocksize() {
144 return blocksize;
145 }
146
147 public DataBlockEncoding getDataBlockEncoding() {
148 return encoding;
149 }
150
151 public void setDataBlockEncoding(DataBlockEncoding encoding) {
152 this.encoding = encoding;
153 }
154
155 public Encryption.Context getEncryptionContext() {
156 return cryptoContext;
157 }
158
159 public void setEncryptionContext(Encryption.Context cryptoContext) {
160 this.cryptoContext = cryptoContext;
161 }
162
163
164
165
166
167
168 @Override
169 public long heapSize() {
170 long size = ClassSize.align(ClassSize.OBJECT +
171
172 4 * ClassSize.REFERENCE +
173 2 * Bytes.SIZEOF_INT +
174
175 4 * Bytes.SIZEOF_BOOLEAN);
176 return size;
177 }
178
179 @Override
180 public HFileContext clone() {
181 try {
182 return (HFileContext)(super.clone());
183 } catch (CloneNotSupportedException e) {
184 throw new AssertionError();
185 }
186 }
187
188 @Override
189 public String toString() {
190 StringBuilder sb = new StringBuilder();
191 sb.append("HFileContext [");
192 sb.append(" usesHBaseChecksum="); sb.append(usesHBaseChecksum);
193 sb.append(" checksumType="); sb.append(checksumType);
194 sb.append(" bytesPerChecksum="); sb.append(bytesPerChecksum);
195 sb.append(" blocksize="); sb.append(blocksize);
196 sb.append(" encoding="); sb.append(encoding);
197 sb.append(" includesMvcc="); sb.append(includesMvcc);
198 sb.append(" includesTags="); sb.append(includesTags);
199 sb.append(" compressAlgo="); sb.append(compressAlgo);
200 sb.append(" compressTags="); sb.append(compressTags);
201 sb.append(" cryptoContext=[ "); sb.append(cryptoContext); sb.append(" ]");
202 sb.append(" ]");
203 return sb.toString();
204 }
205
206 }