From 4b1acead42ffc625e398f0cd1cdec9e50f756fa9 Mon Sep 17 00:00:00 2001 From: stack Date: Wed, 17 Feb 2016 19:26:17 -0800 Subject: [PATCH] HBASE-15285 Forward-port respect for isReturnResult from HBASE-15095 --- .../apache/hadoop/hbase/client/Append.java | 7 +++---- .../apache/hadoop/hbase/client/Increment.java | 11 ++++------- .../apache/hadoop/hbase/client/Mutation.java | 19 +++++++++++++++++++ .../hadoop/hbase/regionserver/HRegion.java | 6 ++++-- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java index d5a4552a192..45f1e460791 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java @@ -47,7 +47,6 @@ import org.apache.hadoop.hbase.util.Bytes; @InterfaceAudience.Public @InterfaceStability.Stable public class Append extends Mutation { - private static final String RETURN_RESULTS = "_rr_"; /** * @param returnResults * True (default) if the append operation should return the results. @@ -55,16 +54,16 @@ public class Append extends Mutation { * bandwidth setting this to false. */ public Append setReturnResults(boolean returnResults) { - setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults)); + super.setReturnResults(returnResults); return this; } /** * @return current setting for returnResults */ + // This method makes public the superclasses's protected method. public boolean isReturnResults() { - byte[] v = getAttribute(RETURN_RESULTS); - return v == null ? true : Bytes.toBoolean(v); + return super.isReturnResults(); } /** diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java index d37cf827b12..187c07755cc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java @@ -52,9 +52,6 @@ import org.apache.hadoop.hbase.util.ClassSize; @InterfaceStability.Stable public class Increment extends Mutation implements Comparable { private static final long HEAP_OVERHEAD = ClassSize.REFERENCE + ClassSize.TIMERANGE; - - private static final String RETURN_RESULTS = "_rr_"; - private TimeRange tr = new TimeRange(); /** @@ -170,16 +167,16 @@ public class Increment extends Mutation implements Comparable { * to false. */ public Increment setReturnResults(boolean returnResults) { - setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults)); + super.setReturnResults(returnResults); return this; } /** - * @return current value for returnResults + * @return current setting for returnResults */ + // This method makes public the superclasses's protected method. public boolean isReturnResults() { - byte[] v = getAttribute(RETURN_RESULTS); - return v == null ? true : Bytes.toBoolean(v); + return super.isReturnResults(); } /** diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java index 9a550f9e217..06e0224aecf 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java @@ -82,6 +82,8 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C */ private static final String OP_ATTRIBUTE_TTL = "_ttl"; + private static final String RETURN_RESULTS = "_rr_"; + protected byte [] row = null; protected long ts = HConstants.LATEST_TIMESTAMP; protected Durability durability = Durability.USE_DEFAULT; @@ -451,6 +453,23 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C return this; } + /** + * @return current value for returnResults + */ + // Used by Increment and Append only. + @InterfaceAudience.Private + protected boolean isReturnResults() { + byte[] v = getAttribute(RETURN_RESULTS); + return v == null ? true : Bytes.toBoolean(v); + } + + @InterfaceAudience.Private + // Used by Increment and Append only. + protected Mutation setReturnResults(boolean returnResults) { + setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults)); + return this; + } + /** * Subclasses should override this method to add the heap size of their own fields. * @return the heap size to add (will be aligned). 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 3e6c092b6a9..0d5a71eb7c4 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 @@ -6972,7 +6972,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi lock(this.updatesLock.readLock()); try { Result cpResult = doCoprocessorPreCall(op, mutation); - if (cpResult != null) return cpResult; + if (cpResult != null) { + return returnResults? cpResult: null; + } Durability effectiveDurability = getEffectiveDurability(mutation.getDurability()); Map> forMemStore = new HashMap>(mutation.getFamilyCellMap().size()); @@ -7000,7 +7002,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi this.updatesLock.readLock().unlock(); } // If results is null, then client asked that we not return the calculated results. - return results != null? Result.create(results): null; + return results != null && returnResults? Result.create(results): null; } finally { // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes // to get current value under an exclusive lock so no need so no need to wait to return to