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.hbase.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 static final long serialVersionUID = -5199992013113130534L;
32 private final String hfileName;
33 private final long offset;
34 private final DataBlockEncoding encoding;
35
36 public BlockCacheKey(String file, long offset, DataBlockEncoding encoding,
37 BlockType blockType) {
38 this.hfileName = file;
39 this.offset = offset;
40
41
42
43 this.encoding = (encoding != null && (blockType == null
44 || blockType.isData())) ? encoding : DataBlockEncoding.NONE;
45 }
46
47
48
49
50
51
52 public BlockCacheKey(String file, long offset) {
53 this(file, offset, DataBlockEncoding.NONE, null);
54 }
55
56 @Override
57 public int hashCode() {
58 return hfileName.hashCode() * 127 + (int) (offset ^ (offset >>> 32)) +
59 encoding.ordinal() * 17;
60 }
61
62 @Override
63 public boolean equals(Object o) {
64 if (o instanceof BlockCacheKey) {
65 BlockCacheKey k = (BlockCacheKey) o;
66 return offset == k.offset && encoding == k.encoding
67 && (hfileName == null ? k.hfileName == null : hfileName
68 .equals(k.hfileName));
69 } else {
70 return false;
71 }
72 }
73
74 @Override
75 public String toString() {
76 return hfileName + "_" + offset
77 + (encoding == DataBlockEncoding.NONE ? "" : "_" + encoding);
78 }
79
80
81
82
83
84 @Override
85 public long heapSize() {
86 return ClassSize.align(ClassSize.OBJECT + 2 * hfileName.length() +
87 Bytes.SIZEOF_LONG + 2 * ClassSize.REFERENCE);
88 }
89
90
91
92
93
94 public String getHfileName() {
95 return hfileName;
96 }
97
98 public DataBlockEncoding getDataBlockEncoding() {
99 return encoding;
100 }
101
102 public long getOffset() {
103 return offset;
104 }
105 }