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
+}

Reply via email to