From cc95b29353fc9ee4d3966193e27871132e3814a3 Mon Sep 17 00:00:00 2001 From: ningjize Date: Tue, 17 Feb 2026 13:30:06 -0500 Subject: [PATCH] =?UTF-8?q?HBASE-29907=20ROWCOL=20bloom=20filter=20+=20Sto?= =?UTF-8?q?reScanner.trySkipToNextColumn=20can=20surface=20out-of-order=20?= =?UTF-8?q?cells,=20causing=20read=20failure=20=E2=80=9CisDelete=20failed?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit run spotless:apply --- .../org/apache/hadoop/hbase/regionserver/StoreScanner.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java index 76f3e15c90c8..634b6fffcf53 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java @@ -964,10 +964,8 @@ protected boolean trySkipToNextColumn(ExtendedCell cell) throws IOException { } while ((nextCell = this.heap.peek()) != null && CellUtil.matchingRowColumn(cell, nextCell)); // We need this check because it may happen that the new scanner that we get // during heap.next() is requiring reseek due of fake KV previously generated for - // ROWCOL bloom filter optimization. See HBASE-19863 for more details - if ( - useRowColBloom && nextCell != null && cell.getTimestamp() == PrivateConstants.OLDEST_TIMESTAMP - ) { + // ROWCOL bloom filter optimization. See HBASE-19863 and HBASE-29907 for more details + if (useRowColBloom && nextCell != null && matcher.compareKeyForNextColumn(nextCell, cell) < 0) { return false; } return true;