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