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