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

wchevreuil 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 6ea66645aa4 HBASE-29174 NPE on MemstoreFlusher when flush is triggered 
by too many wals after a wal rolling (#6771)
6ea66645aa4 is described below

commit 6ea66645aa469b565261283cbd53fd6c0da864f9
Author: Wellington Ramos Chevreuil <[email protected]>
AuthorDate: Tue Mar 11 15:03:26 2025 +0000

    HBASE-29174 NPE on MemstoreFlusher when flush is triggered by too many wals 
after a wal rolling (#6771)
    
    Signed-off-by: Duo Zhang <[email protected]>
    
    (cherry picked from commit 9b960f90ddea1fadb75530127b32942b68b5e3df)
---
 .../hadoop/hbase/regionserver/wal/SequenceIdAccounting.java      | 5 +++++
 .../hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java  | 9 +++++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java
index 1073d841ba4..8997c6433e7 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java
@@ -480,6 +480,11 @@ public class SequenceIdAccounting {
           continue;
         }
         for (Map.Entry<ImmutableByteArray, Long> me : m.entrySet()) {
+          // FLUSH events produce an entry in the wal with a "fake" METAFAMILY 
CF. We need to ignore
+          // these entries here, as there is actual no such store.
+          if (me.getKey().toString().equals("METAFAMILY")) {
+            continue;
+          }
           if (me.getValue() <= e.getValue()) {
             if (toFlush == null) {
               toFlush = new TreeMap(Bytes.BYTES_COMPARATOR);
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java
index 5cf9853714c..0ab5312e204 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java
@@ -149,10 +149,11 @@ public class TestSequenceIdAccounting {
     sida.getOrCreateLowestSequenceIds(ENCODED_REGION_NAME);
     Map<byte[], Long> m = new HashMap<>();
     m.put(ENCODED_REGION_NAME, HConstants.NO_SEQNUM);
-    long sequenceid = 1;
-    sida.update(ENCODED_REGION_NAME, FAMILIES, sequenceid, true);
-    sida.update(ENCODED_REGION_NAME, FAMILIES, sequenceid++, true);
-    sida.update(ENCODED_REGION_NAME, FAMILIES, sequenceid++, true);
+    sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, 1, true);
+    sida.update(ENCODED_REGION_NAME, FAMILIES, 2, true);
+    sida.update(ENCODED_REGION_NAME, FAMILIES, 3, true);
+    sida.update(ENCODED_REGION_NAME, FAMILIES, 4, true);
+    m.put(ENCODED_REGION_NAME, 1L);
     assertTrue(sida.findLower(m) == null);
     m.put(ENCODED_REGION_NAME, sida.getLowestSequenceId(ENCODED_REGION_NAME));
     assertTrue(sida.findLower(m).size() == 1);

Reply via email to