diff --git src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java index 409d168..7a7b896 100644 --- src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java +++ src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java @@ -186,13 +186,15 @@ public abstract class BaseRegionObserver implements RegionObserver { } @Override - public void preAppend(final ObserverContext e, - final Append append, final Result result) throws IOException { + public Result preAppend(final ObserverContext e, + final Append append) throws IOException { + return null; } @Override - public void postAppend(final ObserverContext e, + public Result postAppend(final ObserverContext e, final Append append, final Result result) throws IOException { + return result; } @Override @@ -211,13 +213,15 @@ public abstract class BaseRegionObserver implements RegionObserver { } @Override - public void preIncrement(final ObserverContext e, - final Increment increment, final Result result) throws IOException { + public Result preIncrement(final ObserverContext e, + final Increment increment) throws IOException { + return null; } @Override - public void postIncrement(final ObserverContext e, + public Result postIncrement(final ObserverContext e, final Increment increment, final Result result) throws IOException { + return result; } @Override diff --git src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java index c95903a..c0a4184 100644 --- src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java +++ src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java @@ -16,20 +16,19 @@ package org.apache.hadoop.hbase.coprocessor; +import java.io.IOException; import java.util.List; -import java.util.Map; -import com.google.common.collect.ImmutableList; import org.apache.hadoop.hbase.Coprocessor; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Append; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.filter.WritableByteArrayComparable; import org.apache.hadoop.hbase.regionserver.HRegion; @@ -40,7 +39,7 @@ import org.apache.hadoop.hbase.regionserver.StoreFile; import org.apache.hadoop.hbase.regionserver.wal.HLogKey; import org.apache.hadoop.hbase.regionserver.wal.WALEdit; -import java.io.IOException; +import com.google.common.collect.ImmutableList; /** * Coprocessors implement this interface to observe and mediate client actions @@ -467,13 +466,11 @@ public interface RegionObserver extends Coprocessor { * coprocessors * @param c the environment provided by the region server * @param append Append object - * @param result The result to return to the client if default processing - * is bypassed. Can be modified. Will not be used if default processing - * is not bypassed. + * @return result to return to the client if bypassing default processing * @throws IOException if an error occurred on the coprocessor */ - void preAppend(final ObserverContext c, - final Append append, final Result result) + Result preAppend(final ObserverContext c, + final Append append) throws IOException; /** @@ -483,10 +480,11 @@ public interface RegionObserver extends Coprocessor { * coprocessors * @param c the environment provided by the region server * @param append Append object - * @param result the result returned by increment, can be modified + * @param result the result returned by increment + * @return the result to return to the client * @throws IOException if an error occurred on the coprocessor */ - void postAppend(final ObserverContext c, + Result postAppend(final ObserverContext c, final Append append, final Result result) throws IOException; @@ -499,13 +497,11 @@ public interface RegionObserver extends Coprocessor { * coprocessors * @param c the environment provided by the region server * @param increment increment object - * @param result The result to return to the client if default processing - * is bypassed. Can be modified. Will not be used if default processing - * is not bypassed. + * @return result to return to the client if bypassing default processing * @throws IOException if an error occurred on the coprocessor */ - void preIncrement(final ObserverContext c, - final Increment increment, final Result result) + Result preIncrement(final ObserverContext c, + final Increment increment) throws IOException; /** @@ -515,10 +511,11 @@ public interface RegionObserver extends Coprocessor { * coprocessors * @param c the environment provided by the region server * @param increment increment object - * @param result the result returned by increment, can be modified + * @param result the result returned by increment + * @return the result to return to the client * @throws IOException if an error occurred on the coprocessor */ - void postIncrement(final ObserverContext c, + Result postIncrement(final ObserverContext c, final Increment increment, final Result result) throws IOException; diff --git src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 63fe123..a7266d3 100644 --- src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -3052,7 +3052,7 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler, resVal = region.increment(incVal, lock, increment.getWriteToWAL()); if (region.getCoprocessorHost() != null) { - region.getCoprocessorHost().postIncrement(incVal, resVal); + resVal = region.getCoprocessorHost().postIncrement(incVal, resVal); } return resVal; } catch (IOException e) { diff --git src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java index 948e5aa..7cee17c 100644 --- src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java +++ src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java @@ -954,13 +954,13 @@ public class RegionCoprocessorHost public Result preAppend(Append append) throws IOException { boolean bypass = false; - Result result = new Result(); + Result result = null; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { - ((RegionObserver)env.getInstance()).preAppend(ctx, append, result); + result = ((RegionObserver)env.getInstance()).preAppend(ctx, append); } catch (Throwable e) { handleCoprocessorThrowable(env, e); } @@ -982,13 +982,13 @@ public class RegionCoprocessorHost public Result preIncrement(Increment increment) throws IOException { boolean bypass = false; - Result result = new Result(); + Result result = null; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { - ((RegionObserver)env.getInstance()).preIncrement(ctx, increment, result); + result = ((RegionObserver)env.getInstance()).preIncrement(ctx, increment); } catch (Throwable e) { handleCoprocessorThrowable(env, e); } @@ -1029,14 +1029,14 @@ public class RegionCoprocessorHost * @param result the result returned by postIncrement * @throws IOException if an error occurred on the coprocessor */ - public void postIncrement(final Increment increment, Result result) + public Result postIncrement(final Increment increment, Result result) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { - ((RegionObserver)env.getInstance()).postIncrement(ctx, increment, result); + result = ((RegionObserver)env.getInstance()).postIncrement(ctx, increment, result); } catch (Throwable e) { handleCoprocessorThrowable(env, e); } @@ -1045,6 +1045,7 @@ public class RegionCoprocessorHost } } } + return result; } /** diff --git src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java index 58f3265..dacb936 100644 --- src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java +++ src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java @@ -371,15 +371,17 @@ public class SimpleRegionObserver extends BaseRegionObserver { } @Override - public void preIncrement(final ObserverContext c, - final Increment increment, final Result result) throws IOException { + public Result preIncrement(final ObserverContext c, + final Increment increment) throws IOException { hadPreIncrement = true; + return null; } @Override - public void postIncrement(final ObserverContext c, + public Result postIncrement(final ObserverContext c, final Increment increment, final Result result) throws IOException { hadPostIncrement = true; + return result; } public boolean hadPreGet() {