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 2014/10/31 03:32:25 UTC
[2/2] git commit: HBASE-12388 Document behavior wrt coprocessors when
wal gets empty waledits.
HBASE-12388 Document behavior wrt coprocessors when wal gets empty waledits.
Signed-off-by: stack <st...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/646f1d5f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/646f1d5f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/646f1d5f
Branch: refs/heads/master
Commit: 646f1d5f8ff627dba31a995d7dd05fc705a44fb2
Parents: ff92346
Author: Sean Busbey <bu...@apache.org>
Authored: Thu Oct 30 16:25:17 2014 -0500
Committer: stack <st...@apache.org>
Committed: Thu Oct 30 19:32:12 2014 -0700
----------------------------------------------------------------------
.../hadoop/hbase/coprocessor/WALObserver.java | 3 ++
.../coprocessor/SampleRegionWALObserver.java | 4 ++-
.../hbase/coprocessor/TestWALObserver.java | 30 ++++++++++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/646f1d5f/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/WALObserver.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/WALObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/WALObserver.java
index 70c416a..49d84ed 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/WALObserver.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/WALObserver.java
@@ -33,6 +33,9 @@ import java.io.IOException;
* It's provided to have a way for coprocessors to observe, rewrite,
* or skip WALEdits as they are being written to the WAL.
*
+ * Note that implementers of WALObserver will not see WALEdits that report themselves
+ * as empty via {@link WALEdit#isEmpty()}.
+ *
* {@link org.apache.hadoop.hbase.coprocessor.RegionObserver} provides
* hooks for adding logic for WALEdits in the region context during reconstruction,
*
http://git-wip-us.apache.org/repos/asf/hbase/blob/646f1d5f/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.java
index 599accf..3f983ed 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.java
@@ -112,7 +112,9 @@ implements WALObserver {
cell.getValueArray()[cell.getValueOffset()] += 1;
}
}
- cells.add(new KeyValue(row, addedFamily, addedQualifier));
+ if (null != row) {
+ cells.add(new KeyValue(row, addedFamily, addedQualifier));
+ }
if (deletedCell != null) {
LOG.debug("About to delete a KeyValue from WALEdit.");
cells.remove(deletedCell);
http://git-wip-us.apache.org/repos/asf/hbase/blob/646f1d5f/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestWALObserver.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestWALObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestWALObserver.java
index 75fe6d2..2bb56b5 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestWALObserver.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestWALObserver.java
@@ -230,6 +230,36 @@ public class TestWALObserver {
}
/**
+ * Coprocessors shouldn't get notice of empty waledits.
+ */
+ @Test
+ public void testEmptyWALEditAreNotSeen() throws Exception {
+ final HRegionInfo hri = createBasic3FamilyHRegionInfo(Bytes.toString(TEST_TABLE));
+ final HTableDescriptor htd = createBasic3FamilyHTD(Bytes.toString(TEST_TABLE));
+ final AtomicLong sequenceId = new AtomicLong(0);
+
+ HLog log = HLogFactory.createHLog(this.fs, hbaseRootDir,
+ TestWALObserver.class.getName(), this.conf);
+ try {
+ SampleRegionWALObserver cp = getCoprocessor(log);
+
+ cp.setTestValues(TEST_TABLE, null, null, null, null, null, null, null);
+
+ assertFalse(cp.isPreWALWriteCalled());
+ assertFalse(cp.isPostWALWriteCalled());
+
+ final long now = EnvironmentEdgeManager.currentTime();
+ log.append(hri, hri.getTable(), new WALEdit(), now, htd, sequenceId);
+ log.sync();
+
+ assertFalse("Empty WALEdit should skip coprocessor evaluation.", cp.isPreWALWriteCalled());
+ assertFalse("Empty WALEdit should skip coprocessor evaluation.", cp.isPostWALWriteCalled());
+ } finally {
+ log.closeAndDelete();
+ }
+ }
+
+ /**
* Test WAL replay behavior with WALObserver.
*/
@Test