From 69c3808de8344005c7a49c2f81176e77601d3bef Mon Sep 17 00:00:00 2001 From: stack Date: Wed, 17 Feb 2016 11:59:12 -0800 Subject: [PATCH] HBASE-15285 Forward-port respect for isReturnResult from HBASE-15095 --- .../java/org/apache/hadoop/hbase/client/Append.java | 9 ++++----- .../org/apache/hadoop/hbase/client/Increment.java | 13 +++++-------- .../java/org/apache/hadoop/hbase/client/Mutation.java | 19 ++++++++++++++++++- .../org/apache/hadoop/hbase/regionserver/HRegion.java | 6 ++++-- 4 files changed, 31 insertions(+), 16 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 d5a4552..dc399f0 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)); - return this; + // Ugly cast. Superclass is abstract. + return (Append)super.setReturnResults(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/Increment.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java index d37cf82..765ec46 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)); - return this; + // Ugly cast. Superclass is abstract. + return (Increment)super.setReturnResults(returnResults); } /** - * @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 9a550f9..55e4014 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; @@ -452,6 +454,21 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C } /** + * @return current value for returnResults + */ + // Used by Increment and Append only. + protected boolean isReturnResults() { + byte[] v = getAttribute(RETURN_RESULTS); + return v == null ? true : Bytes.toBoolean(v); + } + + // 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). */ @@ -504,4 +521,4 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C HConstants.MAX_ROW_LENGTH); } } -} +} \ No newline at end of file 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 3e6c092..c404d59 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 mutation.isReturnResults()? 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 && mutation.isReturnResults()? 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 -- 2.6.1