From 6d65038f3cf723fb3ca88e944018ec7ed979abd5 Mon Sep 17 00:00:00 2001 From: iKun <110004933+xuliang0317@users.noreply.github.com> Date: Sat, 30 May 2026 23:36:14 +0800 Subject: [PATCH 1/2] Refactor BloomFilterUtil by removing bitvals array Removed the static bit-value lookup array and updated the checkBit method to use bitwise operations directly. --- .../java/org/apache/hadoop/hbase/util/BloomFilterUtil.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) 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; } /** From 52805ba21645530848dd8c5704784bcec3f5e7c4 Mon Sep 17 00:00:00 2001 From: iKun <110004933+xuliang0317@users.noreply.github.com> Date: Sat, 30 May 2026 23:40:36 +0800 Subject: [PATCH 2/2] Update BloomFilterChunk.java bit operations replace array --- .../hadoop/hbase/util/BloomFilterChunk.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) 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() {