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 2021/01/11 10:28:16 UTC

[hbase] branch branch-2.4 updated: HBASE-25459 WAL can't be cleaned in some scenes (#2848)

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

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


The following commit(s) were added to refs/heads/branch-2.4 by this push:
     new aa27488  HBASE-25459 WAL can't be cleaned in some scenes (#2848)
aa27488 is described below

commit aa2748826841e57a0b57d62a56fd583b8f448614
Author: xijiawen <15...@163.com>
AuthorDate: Sat Jan 9 00:00:15 2021 +0800

    HBASE-25459 WAL can't be cleaned in some scenes (#2848)
    
    Signed-off-by: Wellington Chevreuil <wc...@apache.org>
    (cherry picked from commit 6a401d89f89c4c394ea7f4282edcd07afbac167a)
---
 .../hbase/regionserver/wal/SequenceIdAccounting.java   |  6 +++++-
 .../regionserver/wal/TestSequenceIdAccounting.java     | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

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 d96aafe..4618b87 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
@@ -249,7 +249,11 @@ class SequenceIdAccounting {
    */
   private static long getLowestSequenceId(Map<?, Long> sequenceids) {
     long lowest = HConstants.NO_SEQNUM;
-    for (Long sid: sequenceids.values()) {
+    for (Map.Entry<? , Long> entry : sequenceids.entrySet()){
+      if (entry.getKey().toString().equals("METAFAMILY")){
+        continue;
+      }
+      Long sid = entry.getValue();
       if (lowest == HConstants.NO_SEQNUM || sid.longValue() < lowest) {
         lowest = sid.longValue();
       }
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 ad52bd3..bc9def6 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
@@ -42,10 +42,14 @@ public class TestSequenceIdAccounting {
 
   private static final byte [] ENCODED_REGION_NAME = Bytes.toBytes("r");
   private static final byte [] FAMILY_NAME = Bytes.toBytes("cf");
+  private static final byte [] META_FAMILY = Bytes.toBytes("METAFAMILY");
   private static final Set<byte[]> FAMILIES;
+  private static final Set<byte[]> META_FAMILY_SET;
   static {
     FAMILIES = new HashSet<>();
     FAMILIES.add(FAMILY_NAME);
+    META_FAMILY_SET = new HashSet<>();
+    META_FAMILY_SET.add(META_FAMILY);
   }
 
   @Test
@@ -117,6 +121,20 @@ public class TestSequenceIdAccounting {
     sida.update(ENCODED_REGION_NAME, FAMILIES, ++sequenceid, true);
     sida.update(ENCODED_REGION_NAME, FAMILIES, ++sequenceid, true);
     assertTrue(sida.areAllLower(m));
+    m.put(ENCODED_REGION_NAME, sequenceid);
+    assertFalse(sida.areAllLower(m));
+
+    // Test the METAFAMILY is filtered in SequenceIdAccounting.lowestUnflushedSequenceIds
+    SequenceIdAccounting meta_sida = new SequenceIdAccounting();
+    Map<byte[], Long> meta_m = new HashMap<>();
+    meta_sida.getOrCreateLowestSequenceIds(ENCODED_REGION_NAME);
+    meta_m.put(ENCODED_REGION_NAME, sequenceid);
+    meta_sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, ++sequenceid, true);
+    meta_sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, ++sequenceid, true);
+    meta_sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, ++sequenceid, true);
+    assertTrue(meta_sida.areAllLower(meta_m));
+    meta_m.put(ENCODED_REGION_NAME, sequenceid);
+    assertTrue(meta_sida.areAllLower(meta_m));
   }
 
   @Test