Repository: hbase Updated Branches: refs/heads/branch-1 c1ec92adc -> f5e3b3005
HBASE-12388 Document behavior wrt coprocessors when wal gets empty waledits. Signed-off-by: stack <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f5e3b300 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f5e3b300 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f5e3b300 Branch: refs/heads/branch-1 Commit: f5e3b3005819ef5439682e1182e9145150884eb4 Parents: c1ec92a Author: Sean Busbey <[email protected]> Authored: Thu Oct 30 16:25:17 2014 -0500 Committer: stack <[email protected]> Committed: Thu Oct 30 19:32:44 2014 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/coprocessor/WALObserver.java | 3 ++ .../coprocessor/SampleRegionWALObserver.java | 4 ++- .../hbase/coprocessor/TestWALObserver.java | 32 +++++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/f5e3b300/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/f5e3b300/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/f5e3b300/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 3ce3307..1eddc8a 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 @@ -229,6 +229,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 @@ -418,4 +448,4 @@ public class TestWALObserver { htd.addFamily(c); return htd; } -} \ No newline at end of file +}
