You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by br...@apache.org on 2021/02/22 00:38:09 UTC

[hbase] branch master updated: HBASE-25574 Revisit put/delete/increment/append related RegionObserver methods (#2953)

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

brfrn169 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new d8b8662  HBASE-25574 Revisit put/delete/increment/append related RegionObserver methods (#2953)
d8b8662 is described below

commit d8b86627ea0100837da8846b14eb60979a878f75
Author: Toshihiro Suzuki <br...@gmail.com>
AuthorDate: Mon Feb 22 09:37:30 2021 +0900

    HBASE-25574 Revisit put/delete/increment/append related RegionObserver methods (#2953)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
---
 .../hadoop/hbase/coprocessor/RegionObserver.java   | 187 +++++++++++++++++++--
 .../apache/hadoop/hbase/regionserver/HRegion.java  |  17 +-
 .../hbase/regionserver/RegionCoprocessorHost.java  |  57 +++----
 3 files changed, 208 insertions(+), 53 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
index 9eac46f..757b42e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
@@ -374,11 +374,31 @@ public interface RegionObserver {
    * @param put The Put object
    * @param edit The WALEdit object that will be written to the wal
    * @param durability Persistence guarantee for this Put
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #prePut(ObserverContext, Put, WALEdit)} instead.
    */
+  @Deprecated
   default void prePut(ObserverContext<RegionCoprocessorEnvironment> c, Put put, WALEdit edit,
       Durability durability) throws IOException {}
 
   /**
+   * Called before the client stores a value.
+   * <p>
+   * Call CoprocessorEnvironment#bypass to skip default actions.
+   * If 'bypass' is set, we skip out on calling any subsequent chained coprocessors.
+   * <p>
+   * Note: Do not retain references to any Cells in 'put' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param put The Put object
+   * @param edit The WALEdit object that will be written to the wal
+   */
+  default void prePut(ObserverContext<RegionCoprocessorEnvironment> c, Put put, WALEdit edit)
+    throws IOException {
+    prePut(c, put, edit, put.getDurability());
+  }
+
+  /**
    * Called after the client stores a value.
    * <p>
    * Note: Do not retain references to any Cells in 'put' beyond the life of this invocation.
@@ -387,11 +407,28 @@ public interface RegionObserver {
    * @param put The Put object
    * @param edit The WALEdit object for the wal
    * @param durability Persistence guarantee for this Put
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #postPut(ObserverContext, Put, WALEdit)} instead.
    */
+  @Deprecated
   default void postPut(ObserverContext<RegionCoprocessorEnvironment> c, Put put, WALEdit edit,
       Durability durability) throws IOException {}
 
   /**
+   * Called after the client stores a value.
+   * <p>
+   * Note: Do not retain references to any Cells in 'put' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param put The Put object
+   * @param edit The WALEdit object for the wal
+   */
+  default void postPut(ObserverContext<RegionCoprocessorEnvironment> c, Put put, WALEdit edit)
+    throws IOException {
+    postPut(c, put, edit, put.getDurability());
+  }
+
+  /**
    * Called before the client deletes a value.
    * <p>
    * Call CoprocessorEnvironment#bypass to skip default actions.
@@ -403,11 +440,31 @@ public interface RegionObserver {
    * @param delete The Delete object
    * @param edit The WALEdit object for the wal
    * @param durability Persistence guarantee for this Delete
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #preDelete(ObserverContext, Delete, WALEdit)} instead.
    */
+  @Deprecated
   default void preDelete(ObserverContext<RegionCoprocessorEnvironment> c, Delete delete,
       WALEdit edit, Durability durability) throws IOException {}
 
   /**
+   * Called before the client deletes a value.
+   * <p>
+   * Call CoprocessorEnvironment#bypass to skip default actions.
+   * If 'bypass' is set, we skip out on calling any subsequent chained coprocessors.
+   * <p>
+   * Note: Do not retain references to any Cells in 'delete' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param delete The Delete object
+   * @param edit The WALEdit object for the wal
+   */
+  default void preDelete(ObserverContext<RegionCoprocessorEnvironment> c, Delete delete,
+    WALEdit edit) throws IOException {
+    preDelete(c, delete, edit, delete.getDurability());
+  }
+
+  /**
    * Called before the server updates the timestamp for version delete with latest timestamp.
    * <p>
    * Call CoprocessorEnvironment#bypass to skip default actions.
@@ -434,11 +491,28 @@ public interface RegionObserver {
    * @param delete The Delete object
    * @param edit The WALEdit object for the wal
    * @param durability Persistence guarantee for this Delete
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #postDelete(ObserverContext, Delete, WALEdit)} instead.
    */
+  @Deprecated
   default void postDelete(ObserverContext<RegionCoprocessorEnvironment> c, Delete delete,
       WALEdit edit, Durability durability) throws IOException {}
 
   /**
+   * Called after the client deletes a value.
+   * <p>
+   * Note: Do not retain references to any Cells in 'delete' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param delete The Delete object
+   * @param edit The WALEdit object for the wal
+   */
+  default void postDelete(ObserverContext<RegionCoprocessorEnvironment> c, Delete delete,
+    WALEdit edit) throws IOException {
+    postDelete(c, delete, edit, delete.getDurability());
+  }
+
+  /**
    * This will be called for every batch mutation operation happening at the server. This will be
    * called after acquiring the locks on the mutating rows and after applying the proper timestamp
    * for each Mutation at the server. The batch may contain Put/Delete/Increment/Append. By
@@ -457,10 +531,10 @@ public interface RegionObserver {
   /**
    * This will be called after applying a batch of Mutations on a region. The Mutations are added
    * to memstore and WAL. The difference of this one with
-   * {@link #postPut(ObserverContext, Put, WALEdit, Durability)}
-   * and {@link #postDelete(ObserverContext, Delete, WALEdit, Durability)}
-   * and {@link #postIncrement(ObserverContext, Increment, Result)}
-   * and {@link #postAppend(ObserverContext, Append, Result)} is
+   * {@link #postPut(ObserverContext, Put, WALEdit)}
+   * and {@link #postDelete(ObserverContext, Delete, WALEdit)}
+   * and {@link #postIncrement(ObserverContext, Increment, Result, WALEdit)}
+   * and {@link #postAppend(ObserverContext, Append, Result, WALEdit)} is
    * this hook will be executed before the mvcc transaction completion.
    * <p>
    * Note: Do not retain references to any Cells in Mutations beyond the life of this invocation.
@@ -968,13 +1042,34 @@ public interface RegionObserver {
    * @param c the environment provided by the region server
    * @param append Append object
    * @return result to return to the client if bypassing default processing
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #preAppend(ObserverContext, Append, WALEdit)} instead.
    */
+  @Deprecated
   default Result preAppend(ObserverContext<RegionCoprocessorEnvironment> c, Append append)
-      throws IOException {
+    throws IOException {
     return null;
   }
 
   /**
+   * Called before Append.
+   * <p>
+   * Call CoprocessorEnvironment#bypass to skip default actions.
+   * If 'bypass' is set, we skip out on calling any subsequent chained coprocessors.
+   * <p>
+   * Note: Do not retain references to any Cells in 'append' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param append Append object
+   * @param edit The WALEdit object that will be written to the wal
+   * @return result to return to the client if bypassing default processing
+   */
+  default Result preAppend(ObserverContext<RegionCoprocessorEnvironment> c, Append append,
+    WALEdit edit) throws IOException {
+    return preAppend(c, append);
+  }
+
+  /**
    * Called before Append but after acquiring rowlock.
    * <p>
    * <b>Note:</b> Caution to be taken for not doing any long time operation in this hook.
@@ -989,9 +1084,12 @@ public interface RegionObserver {
    * @param c the environment provided by the region server
    * @param append Append object
    * @return result to return to the client if bypassing default processing
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #preBatchMutate(ObserverContext, MiniBatchOperationInProgress)} instead.
    */
+  @Deprecated
   default Result preAppendAfterRowLock(ObserverContext<RegionCoprocessorEnvironment> c,
-      Append append) throws IOException {
+    Append append) throws IOException {
     return null;
   }
 
@@ -1004,13 +1102,32 @@ public interface RegionObserver {
    * @param append Append object
    * @param result the result returned by increment
    * @return the result to return to the client
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #postAppend(ObserverContext, Append, Result, WALEdit)} instead.
    */
+  @Deprecated
   default Result postAppend(ObserverContext<RegionCoprocessorEnvironment> c, Append append,
-      Result result) throws IOException {
+    Result result) throws IOException {
     return result;
   }
 
   /**
+   * Called after Append
+   * <p>
+   * Note: Do not retain references to any Cells in 'append' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param append Append object
+   * @param result the result returned by increment
+   * @param edit The WALEdit object for the wal
+   * @return the result to return to the client
+   */
+  default Result postAppend(ObserverContext<RegionCoprocessorEnvironment> c, Append append,
+    Result result, WALEdit edit) throws IOException {
+    return postAppend(c, append, result);
+  }
+
+  /**
    * Called before Increment.
    * <p>
    * Call CoprocessorEnvironment#bypass to skip default actions.
@@ -1021,13 +1138,34 @@ public interface RegionObserver {
    * @param c the environment provided by the region server
    * @param increment increment object
    * @return result to return to the client if bypassing default processing
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #preIncrement(ObserverContext, Increment, WALEdit)} instead.
    */
+  @Deprecated
   default Result preIncrement(ObserverContext<RegionCoprocessorEnvironment> c, Increment increment)
-      throws IOException {
+    throws IOException {
     return null;
   }
 
   /**
+   * Called before Increment.
+   * <p>
+   * Call CoprocessorEnvironment#bypass to skip default actions.
+   * If 'bypass' is set, we skip out on calling any subsequent chained coprocessors.
+   * <p>
+   * Note: Do not retain references to any Cells in 'increment' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param increment increment object
+   * @param edit The WALEdit object that will be written to the wal
+   * @return result to return to the client if bypassing default processing
+   */
+  default Result preIncrement(ObserverContext<RegionCoprocessorEnvironment> c, Increment increment,
+    WALEdit edit) throws IOException {
+    return preIncrement(c, increment);
+  }
+
+  /**
    * Called before Increment but after acquiring rowlock.
    * <p>
    * <b>Note:</b> Caution to be taken for not doing any long time operation in this hook.
@@ -1040,15 +1178,15 @@ public interface RegionObserver {
    * Note: Do not retain references to any Cells in 'increment' beyond the life of this invocation.
    * If need a Cell reference for later use, copy the cell and use that.
    *
-   * @param c
-   *          the environment provided by the region server
-   * @param increment
-   *          increment object
+   * @param c the environment provided by the region server
+   * @param increment increment object
    * @return result to return to the client if bypassing default processing
-   *           if an error occurred on the coprocessor
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #preBatchMutate(ObserverContext, MiniBatchOperationInProgress)} instead.
    */
+  @Deprecated
   default Result preIncrementAfterRowLock(ObserverContext<RegionCoprocessorEnvironment> c,
-      Increment increment) throws IOException {
+    Increment increment) throws IOException {
     return null;
   }
 
@@ -1061,13 +1199,32 @@ public interface RegionObserver {
    * @param increment increment object
    * @param result the result returned by increment
    * @return the result to return to the client
+   * @deprecated since 3.0.0 and will be removed in 4.0.0. Use
+   *   {@link #postIncrement(ObserverContext, Increment, Result, WALEdit)} instead.
    */
+  @Deprecated
   default Result postIncrement(ObserverContext<RegionCoprocessorEnvironment> c, Increment increment,
-      Result result) throws IOException {
+    Result result) throws IOException {
     return result;
   }
 
   /**
+   * Called after increment
+   * <p>
+   * Note: Do not retain references to any Cells in 'increment' beyond the life of this invocation.
+   * If need a Cell reference for later use, copy the cell and use that.
+   * @param c the environment provided by the region server
+   * @param increment increment object
+   * @param result the result returned by increment
+   * @param edit The WALEdit object for the wal
+   * @return the result to return to the client
+   */
+  default Result postIncrement(ObserverContext<RegionCoprocessorEnvironment> c, Increment increment,
+    Result result, WALEdit edit) throws IOException {
+    return postIncrement(c, increment, result);
+  }
+
+  /**
    * Called before the client opens a new scanner.
    * <p>
    * Note: Do not retain references to any Cells returned by scanner, beyond the life of this
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index 3b32f46..db5dd7a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -4197,18 +4197,19 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
             if (retCodeDetails[i].getOperationStatusCode() == OperationStatusCode.SUCCESS) {
               Mutation m = getMutation(i);
               if (m instanceof Put) {
-                region.coprocessorHost.postPut((Put) m, walEdit, m.getDurability());
+                region.coprocessorHost.postPut((Put) m, walEdit);
               } else if (m instanceof Delete) {
-                region.coprocessorHost.postDelete((Delete) m, walEdit, m.getDurability());
+                region.coprocessorHost.postDelete((Delete) m, walEdit);
               } else if (m instanceof Increment) {
                 Result result = region.getCoprocessorHost().postIncrement((Increment) m,
-                  results[i]);
+                  results[i], walEdit);
                 if (result != results[i]) {
                   retCodeDetails[i] =
                     new OperationStatus(retCodeDetails[i].getOperationStatusCode(), result);
                 }
               } else if (m instanceof Append) {
-                Result result = region.getCoprocessorHost().postAppend((Append) m, results[i]);
+                Result result = region.getCoprocessorHost().postAppend((Append) m, results[i],
+                  walEdit);
                 if (result != results[i]) {
                   retCodeDetails[i] =
                     new OperationStatus(retCodeDetails[i].getOperationStatusCode(), result);
@@ -4270,7 +4271,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
         throws IOException {
       Mutation m = getMutation(index);
       if (m instanceof Put) {
-        if (region.coprocessorHost.prePut((Put) m, walEdit, m.getDurability())) {
+        if (region.coprocessorHost.prePut((Put) m, walEdit)) {
           // pre hook says skip this Put
           // mark as success and skip in doMiniBatchMutation
           metrics[0]++;
@@ -4284,7 +4285,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
           // Can this be avoided?
           region.prepareDelete(curDel);
         }
-        if (region.coprocessorHost.preDelete(curDel, walEdit, m.getDurability())) {
+        if (region.coprocessorHost.preDelete(curDel, walEdit)) {
           // pre hook says skip this Delete
           // mark as success and skip in doMiniBatchMutation
           metrics[1]++;
@@ -4292,7 +4293,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
         }
       } else if (m instanceof Increment) {
         Increment increment = (Increment) m;
-        Result result = region.coprocessorHost.preIncrement(increment);
+        Result result = region.coprocessorHost.preIncrement(increment, walEdit);
         if (result != null) {
           // pre hook says skip this Increment
           // mark as success and skip in doMiniBatchMutation
@@ -4301,7 +4302,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
         }
       } else if (m instanceof Append) {
         Append append = (Append) m;
-        Result result = region.coprocessorHost.preAppend(append);
+        Result result = region.coprocessorHost.preAppend(append, walEdit);
         if (result != null) {
           // pre hook says skip this Append
           // mark as success and skip in doMiniBatchMutation
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
index 7ed23f6..a916d0d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
@@ -41,7 +41,6 @@ import org.apache.hadoop.hbase.client.CheckAndMutate;
 import org.apache.hadoop.hbase.client.CheckAndMutateResult;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.Durability;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.Increment;
 import org.apache.hadoop.hbase.client.Mutation;
@@ -902,12 +901,10 @@ public class RegionCoprocessorHost
    * Supports Coprocessor 'bypass'.
    * @param put The Put object
    * @param edit The WALEdit object.
-   * @param durability The durability used
    * @return true if default processing should be bypassed
    * @exception IOException Exception
    */
-  public boolean prePut(final Put put, final WALEdit edit, final Durability durability)
-      throws IOException {
+  public boolean prePut(final Put put, final WALEdit edit) throws IOException {
     if (coprocEnvironments.isEmpty()) {
       return false;
     }
@@ -915,7 +912,7 @@ public class RegionCoprocessorHost
     return execOperation(new RegionObserverOperationWithoutResult(bypassable) {
       @Override
       public void call(RegionObserver observer) throws IOException {
-        observer.prePut(this, put, edit, durability);
+        observer.prePut(this, put, edit);
       }
     });
   }
@@ -949,18 +946,16 @@ public class RegionCoprocessorHost
   /**
    * @param put The Put object
    * @param edit The WALEdit object.
-   * @param durability The durability used
    * @exception IOException Exception
    */
-  public void postPut(final Put put, final WALEdit edit, final Durability durability)
-      throws IOException {
+  public void postPut(final Put put, final WALEdit edit) throws IOException {
     if (coprocEnvironments.isEmpty()) {
       return;
     }
     execOperation(new RegionObserverOperationWithoutResult() {
       @Override
       public void call(RegionObserver observer) throws IOException {
-        observer.postPut(this, put, edit, durability);
+        observer.postPut(this, put, edit);
       }
     });
   }
@@ -969,12 +964,10 @@ public class RegionCoprocessorHost
    * Supports Coprocessor 'bypass'.
    * @param delete The Delete object
    * @param edit The WALEdit object.
-   * @param durability The durability used
    * @return true if default processing should be bypassed
    * @exception IOException Exception
    */
-  public boolean preDelete(final Delete delete, final WALEdit edit, final Durability durability)
-      throws IOException {
+  public boolean preDelete(final Delete delete, final WALEdit edit) throws IOException {
     if (this.coprocEnvironments.isEmpty()) {
       return false;
     }
@@ -982,7 +975,7 @@ public class RegionCoprocessorHost
     return execOperation(new RegionObserverOperationWithoutResult(bypassable) {
       @Override
       public void call(RegionObserver observer) throws IOException {
-         observer.preDelete(this, delete, edit, durability);
+        observer.preDelete(this, delete, edit);
       }
     });
   }
@@ -990,18 +983,16 @@ public class RegionCoprocessorHost
   /**
    * @param delete The Delete object
    * @param edit The WALEdit object.
-   * @param durability The durability used
    * @exception IOException Exception
    */
-  public void postDelete(final Delete delete, final WALEdit edit, final Durability durability)
-      throws IOException {
+  public void postDelete(final Delete delete, final WALEdit edit) throws IOException {
     execOperation(coprocEnvironments.isEmpty()? null:
-        new RegionObserverOperationWithoutResult() {
-      @Override
-      public void call(RegionObserver observer) throws IOException {
-        observer.postDelete(this, delete, edit, durability);
-      }
-    });
+      new RegionObserverOperationWithoutResult() {
+        @Override
+        public void call(RegionObserver observer) throws IOException {
+          observer.postDelete(this, delete, edit);
+        }
+      });
   }
 
   public void preBatchMutate(
@@ -1117,10 +1108,11 @@ public class RegionCoprocessorHost
   /**
    * Supports Coprocessor 'bypass'.
    * @param append append object
+   * @param edit The WALEdit object.
    * @return result to return to client if default operation should be bypassed, null otherwise
    * @throws IOException if an error occurred on the coprocessor
    */
-  public Result preAppend(final Append append) throws IOException {
+  public Result preAppend(final Append append, final WALEdit edit) throws IOException {
     boolean bypassable = true;
     Result defaultResult = null;
     if (this.coprocEnvironments.isEmpty()) {
@@ -1131,7 +1123,7 @@ public class RegionCoprocessorHost
             bypassable) {
           @Override
           public Result call(RegionObserver observer) throws IOException {
-            return observer.preAppend(this, append);
+            return observer.preAppend(this, append, edit);
           }
         });
   }
@@ -1161,10 +1153,11 @@ public class RegionCoprocessorHost
   /**
    * Supports Coprocessor 'bypass'.
    * @param increment increment object
+   * @param edit The WALEdit object.
    * @return result to return to client if default operation should be bypassed, null otherwise
    * @throws IOException if an error occurred on the coprocessor
    */
-  public Result preIncrement(final Increment increment) throws IOException {
+  public Result preIncrement(final Increment increment, final WALEdit edit) throws IOException {
     boolean bypassable = true;
     Result defaultResult = null;
     if (coprocEnvironments.isEmpty()) {
@@ -1175,7 +1168,7 @@ public class RegionCoprocessorHost
             bypassable) {
           @Override
           public Result call(RegionObserver observer) throws IOException {
-            return observer.preIncrement(this, increment);
+            return observer.preIncrement(this, increment, edit);
           }
         });
   }
@@ -1205,9 +1198,11 @@ public class RegionCoprocessorHost
   /**
    * @param append Append object
    * @param result the result returned by the append
+   * @param edit The WALEdit object.
    * @throws IOException if an error occurred on the coprocessor
    */
-  public Result postAppend(final Append append, final Result result) throws IOException {
+  public Result postAppend(final Append append, final Result result, final WALEdit edit)
+    throws IOException {
     if (this.coprocEnvironments.isEmpty()) {
       return result;
     }
@@ -1215,7 +1210,7 @@ public class RegionCoprocessorHost
         new ObserverOperationWithResult<RegionObserver, Result>(regionObserverGetter, result) {
           @Override
           public Result call(RegionObserver observer) throws IOException {
-            return observer.postAppend(this, append, result);
+            return observer.postAppend(this, append, result, edit);
           }
         });
   }
@@ -1223,9 +1218,11 @@ public class RegionCoprocessorHost
   /**
    * @param increment increment object
    * @param result the result returned by postIncrement
+   * @param edit The WALEdit object.
    * @throws IOException if an error occurred on the coprocessor
    */
-  public Result postIncrement(final Increment increment, Result result) throws IOException {
+  public Result postIncrement(final Increment increment, Result result, final WALEdit edit)
+    throws IOException {
     if (this.coprocEnvironments.isEmpty()) {
       return result;
     }
@@ -1233,7 +1230,7 @@ public class RegionCoprocessorHost
         new ObserverOperationWithResult<RegionObserver, Result>(regionObserverGetter, result) {
           @Override
           public Result call(RegionObserver observer) throws IOException {
-            return observer.postIncrement(this, increment, getResult());
+            return observer.postIncrement(this, increment, getResult(), edit);
           }
         });
   }