You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2020/09/10 16:48:39 UTC

[hbase] branch branch-2 updated: HBASE-24958 CompactingMemStore.timeOfOldestEdit error update (#2321)

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

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


The following commit(s) were added to refs/heads/branch-2 by this push:
     new aa3e9de  HBASE-24958 CompactingMemStore.timeOfOldestEdit error update (#2321)
aa3e9de is described below

commit aa3e9dedf027aebc54769f319639ee00983022dd
Author: WenFeiYi <we...@gmail.com>
AuthorDate: Fri Sep 11 00:46:04 2020 +0800

    HBASE-24958 CompactingMemStore.timeOfOldestEdit error update (#2321)
---
 .../hbase/regionserver/AbstractMemStore.java       |  6 +++++-
 .../hbase/regionserver/CompactingMemStore.java     |  1 +
 .../hadoop/hbase/regionserver/DefaultMemStore.java |  1 +
 .../hbase/regionserver/TestCompactingMemStore.java | 24 ++++++++++++++++++++++
 4 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
index 3c3834a..60cc92f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
@@ -80,6 +80,7 @@ public abstract class AbstractMemStore implements MemStore {
     this.comparator = c;
     this.regionServices = regionServices;
     resetActive();
+    resetTimeOfOldestEdit();
     this.snapshot = SegmentFactory.instance().createImmutableSegment(c);
     this.snapshotId = NO_SNAPSHOT_ID;
   }
@@ -95,7 +96,10 @@ public abstract class AbstractMemStore implements MemStore {
         memstoreAccounting.getHeapSize(), memstoreAccounting.getOffHeapSize(),
         memstoreAccounting.getCellsCount());
     }
-    timeOfOldestEdit = Long.MAX_VALUE;
+  }
+
+  protected void resetTimeOfOldestEdit() {
+    this.timeOfOldestEdit = Long.MAX_VALUE;
   }
 
   /**
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
index cd653ac..6427fa5 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
@@ -212,6 +212,7 @@ public class CompactingMemStore extends AbstractMemStore {
       // region level lock ensures pushing active to pipeline is done in isolation
       // no concurrent update operations trying to flush the active segment
       pushActiveToPipeline(getActive());
+      resetTimeOfOldestEdit();
       snapshotId = EnvironmentEdgeManager.currentTime();
       // in both cases whatever is pushed to snapshot is cleared from the pipeline
       if (compositeSnapshot) {
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
index a50d0fc..e38c5a3 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
@@ -109,6 +109,7 @@ public class DefaultMemStore extends AbstractMemStore {
         }
         this.snapshot = immutableSegment;
         resetActive();
+        resetTimeOfOldestEdit();
       }
     }
     return new MemStoreSnapshot(this.snapshotId, this.snapshot);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java
index 0e18022..6d67afe 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.hbase.regionserver;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -130,6 +131,29 @@ public class TestCompactingMemStore extends TestDefaultMemStore {
   }
 
   /**
+   * A simple test which flush in memory affect timeOfOldestEdit
+   */
+  @Test
+  public void testTimeOfOldestEdit() {
+    assertEquals(Long.MAX_VALUE,  memstore.timeOfOldestEdit());
+    final byte[] r = Bytes.toBytes("r");
+    final byte[] f = Bytes.toBytes("f");
+    final byte[] q = Bytes.toBytes("q");
+    final byte[] v = Bytes.toBytes("v");
+    final KeyValue kv = new KeyValue(r, f, q, v);
+    memstore.add(kv, null);
+    long timeOfOldestEdit = memstore.timeOfOldestEdit();
+    assertNotEquals(Long.MAX_VALUE, timeOfOldestEdit);
+
+    ((CompactingMemStore)memstore).flushInMemory();
+    assertEquals(timeOfOldestEdit, memstore.timeOfOldestEdit());
+    memstore.add(kv, null);
+    assertEquals(timeOfOldestEdit, memstore.timeOfOldestEdit());
+    memstore.snapshot();
+    assertEquals(Long.MAX_VALUE, memstore.timeOfOldestEdit());
+  }
+
+  /**
    * A simple test which verifies the 3 possible states when scanning across snapshot.
    *
    * @throws IOException