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.hbase.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
39
40 private boolean usesHBaseChecksum = true;
41
42 private boolean includesMvcc = true;
43
44 private boolean includesTags;
45
46 private Compression.Algorithm compressAlgo = Compression.Algorithm.NONE;
47
48 private boolean compressTags;
49
50 private ChecksumType checksumType = ChecksumType.getDefaultChecksumType();
51
52 private int bytesPerChecksum = DEFAULT_BYTES_PER_CHECKSUM;
53
54 private int blocksize = HConstants.DEFAULT_BLOCKSIZE;
55 private DataBlockEncoding encoding = DataBlockEncoding.NONE;
56
57 private Encryption.Context cryptoContext = Encryption.Context.NONE;
58 private long fileCreateTime;
59 private String hfileName;
60 private byte[] columnFamily;
61 private byte[] tableName;
62
63
64 public HFileContext() {
65 }
66
67
68
69
70
71 public HFileContext(HFileContext context) {
72 this.usesHBaseChecksum = context.usesHBaseChecksum;
73 this.includesMvcc = context.includesMvcc;
74 this.includesTags = context.includesTags;
75 this.compressAlgo = context.compressAlgo;
76 this.compressTags = context.compressTags;
77 this.checksumType = context.checksumType;
78 this.bytesPerChecksum = context.bytesPerChecksum;
79 this.blocksize = context.blocksize;
80 this.encoding = context.encoding;
81 this.cryptoContext = context.cryptoContext;
82 this.fileCreateTime = context.fileCreateTime;
83 this.hfileName = context.hfileName;
84 this.columnFamily = context.columnFamily;
85 this.tableName = context.tableName;
86 }
87
88 public HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
89 Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
90 int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
91 Encryption.Context cryptoContext, long fileCreateTime, String hfileName,
92 byte[] columnFamily, byte[] tableName) {
93 this.usesHBaseChecksum = useHBaseChecksum;
94 this.includesMvcc = includesMvcc;
95 this.includesTags = includesTags;
96 this.compressAlgo = compressAlgo;
97 this.compressTags = compressTags;
98 this.checksumType = checksumType;
99 this.bytesPerChecksum = bytesPerChecksum;
100 this.blocksize = blockSize;
101 if (encoding != null) {
102 this.encoding = encoding;
103 }
104 this.cryptoContext = cryptoContext;
105 this.fileCreateTime = fileCreateTime;
106 this.hfileName = hfileName;
107 this.columnFamily = columnFamily;
108 this.tableName = tableName;
109 }
110
111
112
113
114
115 public boolean isCompressedOrEncrypted() {
116 Compression.Algorithm compressAlgo = getCompression();
117 boolean compressed =
118 compressAlgo != null
119 && compressAlgo != Compression.Algorithm.NONE;
120
121 Encryption.Context cryptoContext = getEncryptionContext();
122 boolean encrypted = cryptoContext != null
123 && cryptoContext != Encryption.Context.NONE;
124
125 return compressed || encrypted;
126 }
127
128 public Compression.Algorithm getCompression() {
129 return compressAlgo;
130 }
131
132 public void setCompression(Compression.Algorithm compressAlgo) {
133 this.compressAlgo = compressAlgo;
134 }
135
136 public boolean isUseHBaseChecksum() {
137 return usesHBaseChecksum;
138 }
139
140 public boolean isIncludesMvcc() {
141 return includesMvcc;
142 }
143
144 public void setIncludesMvcc(boolean includesMvcc) {
145 this.includesMvcc = includesMvcc;
146 }
147
148 public boolean isIncludesTags() {
149 return includesTags;
150 }
151
152 public void setIncludesTags(boolean includesTags) {
153 this.includesTags = includesTags;
154 }
155
156 public void setFileCreateTime(long fileCreateTime) {
157 this.fileCreateTime = fileCreateTime;
158 }
159
160 public boolean isCompressTags() {
161 return compressTags;
162 }
163
164 public void setCompressTags(boolean compressTags) {
165 this.compressTags = compressTags;
166 }
167
168 public ChecksumType getChecksumType() {
169 return checksumType;
170 }
171
172 public int getBytesPerChecksum() {
173 return bytesPerChecksum;
174 }
175
176 public int getBlocksize() {
177 return blocksize;
178 }
179
180 public long getFileCreateTime() {
181 return fileCreateTime;
182 }
183
184 public DataBlockEncoding getDataBlockEncoding() {
185 return encoding;
186 }
187
188 public void setDataBlockEncoding(DataBlockEncoding encoding) {
189 this.encoding = encoding;
190 }
191
192 public Encryption.Context getEncryptionContext() {
193 return cryptoContext;
194 }
195
196 public void setEncryptionContext(Encryption.Context cryptoContext) {
197 this.cryptoContext = cryptoContext;
198 }
199
200 public String getHFileName() {
201 return this.hfileName;
202 }
203
204 public byte[] getColumnFamily() {
205 return this.columnFamily;
206 }
207
208 public byte[] getTableName() {
209 return this.tableName;
210 }
211
212
213
214
215
216
217 @Override
218 public long heapSize() {
219 long size = ClassSize.align(ClassSize.OBJECT +
220
221 5 * ClassSize.REFERENCE +
222 2 * Bytes.SIZEOF_INT +
223
224 4 * Bytes.SIZEOF_BOOLEAN +
225
226 2 * ClassSize.ARRAY + 2 * ClassSize.REFERENCE +
227 Bytes.SIZEOF_LONG);
228 if (this.columnFamily != null){
229 size += ClassSize.sizeOf(this.columnFamily, this.columnFamily.length);
230 }
231 if (this.tableName != null){
232 size += ClassSize.sizeOf(this.tableName, this.tableName.length);
233 }
234 return size;
235 }
236
237 @Override
238 public HFileContext clone() {
239 try {
240 return (HFileContext)(super.clone());
241 } catch (CloneNotSupportedException e) {
242 throw new AssertionError();
243 }
244 }
245
246 @Override
247 public String toString() {
248 StringBuilder sb = new StringBuilder();
249 sb.append("HFileContext [");
250 sb.append(" usesHBaseChecksum="); sb.append(usesHBaseChecksum);
251 sb.append(" checksumType="); sb.append(checksumType);
252 sb.append(" bytesPerChecksum="); sb.append(bytesPerChecksum);
253 sb.append(" blocksize="); sb.append(blocksize);
254 sb.append(" encoding="); sb.append(encoding);
255 sb.append(" includesMvcc="); sb.append(includesMvcc);
256 sb.append(" includesTags="); sb.append(includesTags);
257 sb.append(" compressAlgo="); sb.append(compressAlgo);
258 sb.append(" compressTags="); sb.append(compressTags);
259 sb.append(" cryptoContext=[ "); sb.append(cryptoContext);
260 sb.append(" ]");
261 if (tableName != null) {
262 sb.append(", tableName=");
263 sb.append(Bytes.toString(tableName));
264 }
265 if (columnFamily != null) {
266 sb.append(", columnFamily=");
267 sb.append(Bytes.toString(columnFamily));
268 }
269 sb.append(" ]");
270 return sb.toString();
271 }
272 }