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