You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2026/09/15 09:19:01 UTC

(hbase) branch branch-3 updated: HBASE-30149 Fix PrefixFilter and range scans on hbase:meta (#8610)

This is an automated email from the ASF dual-hosted git repository.

Apache9 pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-3 by this push:
     new cd4c7a13d37 HBASE-30149 Fix PrefixFilter and range scans on hbase:meta (#8610)
cd4c7a13d37 is described below

commit cd4c7a13d37474983909fd1463942cd65f743435
Author: Ma Zhengxuan <49...@users.noreply.github.com>
AuthorDate: Tue Sep 15 15:07:15 2026 +0800

    HBASE-30149 Fix PrefixFilter and range scans on hbase:meta (#8610)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
    (cherry picked from commit db9eff6e76d2308bf30b302022b45f862047e779)
---
 .../java/org/apache/hadoop/hbase/MetaCellComparator.java    |  6 +++---
 .../java/org/apache/hadoop/hbase/TestMetaTableAccessor.java | 13 +++++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/MetaCellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/MetaCellComparator.java
index 2a7d86ded11..925b0af9f6d 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/MetaCellComparator.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/MetaCellComparator.java
@@ -148,11 +148,11 @@ public class MetaCellComparator extends CellComparatorImpl {
     if (result != 0) {
       return result;
     } else {
-      if (leftDelimiter < 0 && rightDelimiter >= 0) {
+      if (leftFarDelimiter < 0 && rightFarDelimiter >= 0) {
         return -1;
-      } else if (rightDelimiter < 0 && leftDelimiter >= 0) {
+      } else if (rightFarDelimiter < 0 && leftFarDelimiter >= 0) {
         return 1;
-      } else if (leftDelimiter < 0) {
+      } else if (leftFarDelimiter < 0) {
         return 0;
       }
     }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java
index d3cde97a741..dac46485cd8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java
@@ -41,7 +41,9 @@ import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionLocator;
 import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Table;
+import org.apache.hadoop.hbase.filter.PrefixFilter;
 import org.apache.hadoop.hbase.ipc.CallRunner;
 import org.apache.hadoop.hbase.ipc.DelegatingRpcScheduler;
 import org.apache.hadoop.hbase.ipc.PriorityFunction;
@@ -428,6 +430,17 @@ public class TestMetaTableAccessor {
     doReturn(true).when(visitor).visit(any());
     MetaTableAccessor.scanMeta(connection, visitor, tableName, Bytes.toBytes("region_ac"), 1);
     verify(visitor, times(1)).visit(any());
+
+    byte[] prefix = Bytes.add(tableName.getName(), new byte[] { HConstants.DELIMITER });
+    try (Table metaTable = connection.getTable(TableName.META_TABLE_NAME)) {
+      Scan rangeScan = new Scan().withStartRow(prefix)
+        .withStopRow(Bytes.add(tableName.getName(), new byte[] { HConstants.DELIMITER + 1 }));
+      assertEquals(3, HBaseTestingUtil.countRows(metaTable, rangeScan));
+
+      Scan prefixScan = new Scan();
+      prefixScan.setFilter(new PrefixFilter(prefix));
+      assertEquals(3, HBaseTestingUtil.countRows(metaTable, prefixScan));
+    }
     table.close();
   }