You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2025/03/11 17:32:18 UTC

(hbase) branch branch-3 updated: HBASE-29174 NPE on MemstoreFlusher when flush is triggered by too many wals after a wal rolling (#6771)

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 <wc...@apache.org>
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 <zh...@apache.org>
    
    (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);