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
20 import org.apache.hadoop.classification.InterfaceAudience;
21 import org.apache.hadoop.hbase.io.HeapSize;
22 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
23 import org.apache.hadoop.hbase.util.Bytes;
24 import org.apache.hadoop.hbase.util.ClassSize;
25
26
27
28
29 @InterfaceAudience.Private
30 public class BlockCacheKey implements HeapSize, java.io.Serializable {
31 private final String hfileName;
32 private final long offset;
33 private final DataBlockEncoding encoding;
34
35 public BlockCacheKey(String file, long offset, DataBlockEncoding encoding,
36 BlockType blockType) {
37 this.hfileName = file;
38 this.offset = offset;
39
40
41
42 this.encoding = (blockType == null || blockType.isData()) ? encoding :
43 DataBlockEncoding.NONE;
44 }
45
46
47
48
49
50
51 public BlockCacheKey(String file, long offset) {
52 this(file, offset, DataBlockEncoding.NONE, null);
53 }
54
55 @Override
56 public int hashCode() {
57 return hfileName.hashCode() * 127 + (int) (offset ^ (offset >>> 32)) +
58 encoding.ordinal() * 17;
59 }
60
61 @Override
62 public boolean equals(Object o) {
63 if (o instanceof BlockCacheKey) {
64 BlockCacheKey k = (BlockCacheKey) o;
65 return offset == k.offset
66 && (hfileName == null ? k.hfileName == null : hfileName
67 .equals(k.hfileName));
68 } else {
69 return false;
70 }
71 }
72
73 @Override
74 public String toString() {
75 return hfileName + "_" + offset
76 + (encoding == DataBlockEncoding.NONE ? "" : "_" + encoding);
77 }
78
79
80
81
82
83 @Override
84 public long heapSize() {
85 return ClassSize.align(ClassSize.OBJECT + 2 * hfileName.length() +
86 Bytes.SIZEOF_LONG + 2 * ClassSize.REFERENCE);
87 }
88
89
90
91
92
93 public String getHfileName() {
94 return hfileName;
95 }
96
97 public DataBlockEncoding getDataBlockEncoding() {
98 return encoding;
99 }
100 }