diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterChunk.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterChunk.java index bc0ca0490932..d0542592ab4f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterChunk.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterChunk.java @@ -203,12 +203,12 @@ private void setHashLoc(int hash1, int hash2) { * @param pos index of bit */ void set(long pos) { - int bytePos = (int) (pos / 8); - int bitPos = (int) (pos % 8); + int bytePos = (int) (pos >> 3); + int bitPos = (int) (pos & 7); byte curByte = bloom.get(bytePos); - curByte |= BloomFilterUtil.bitvals[bitPos]; + curByte |= (1 << bitPos); bloom.put(bytePos, curByte); - } +} /** * Check if bit at specified index is 1. @@ -216,13 +216,11 @@ void set(long pos) { * @return true if bit at specified index is 1, false if 0. */ static boolean get(int pos, ByteBuffer bloomBuf, int bloomOffset) { - int bytePos = pos >> 3; // pos / 8 - int bitPos = pos & 0x7; // pos % 8 - // TODO access this via Util API which can do Unsafe access if possible(?) + int bytePos = pos >> 3; + int bitPos = pos & 0x7; byte curByte = bloomBuf.get(bloomOffset + bytePos); - curByte &= BloomFilterUtil.bitvals[bitPos]; - return (curByte != 0); - } + return (curByte & (1 << bitPos)) != 0; +} @Override public long getKeyCount() { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterUtil.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterUtil.java index 5b24a2714747..f82f5e2061d3 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterUtil.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/BloomFilterUtil.java @@ -49,10 +49,6 @@ public final class BloomFilterUtil { public static final String PREFIX_LENGTH_KEY = "RowPrefixBloomFilter.prefix_length"; - /** Bit-value lookup array to prevent doing the same work over and over */ - public static final byte[] bitvals = { (byte) 0x01, (byte) 0x02, (byte) 0x04, (byte) 0x08, - (byte) 0x10, (byte) 0x20, (byte) 0x40, (byte) 0x80 }; - /** * Private constructor to keep this class from being instantiated. */ @@ -221,8 +217,7 @@ static boolean checkBit(int pos, ByteBuff bloomBuf, int bloomOffset) { int bytePos = pos >> 3; // pos / 8 int bitPos = pos & 0x7; // pos % 8 byte curByte = bloomBuf.get(bloomOffset + bytePos); - curByte &= bitvals[bitPos]; - return (curByte != 0); + return (curByte & (1 << bitPos)) != 0; } /**