From 8bd2f21003d40b05914ad3bbdf644c3448cdcad7 Mon Sep 17 00:00:00 2001 From: Ashish Singhi Date: Fri, 20 Mar 2015 21:43:20 +0530 Subject: [PATCH] HBASE-13299 Add setReturnResults() to Increment, like Append has --- .../org/apache/hadoop/hbase/client/Increment.java | 20 +++++++++++++++++++ .../apache/hadoop/hbase/regionserver/HRegion.java | 3 +-- .../hbase/regionserver/wal/TestDurability.java | 23 ++++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) 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 b6e6a52..d37cf82 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 @@ -53,6 +53,8 @@ import org.apache.hadoop.hbase.util.ClassSize; 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(); /** @@ -161,6 +163,24 @@ public class Increment extends Mutation implements Comparable { tr = new TimeRange(minStamp, maxStamp); return this; } + + /** + * @param returnResults True (default) if the increment operation should return the results. A + * client that is not interested in the result can save network bandwidth setting this + * to false. + */ + public Increment setReturnResults(boolean returnResults) { + setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults)); + return this; + } + + /** + * @return current value for returnResults + */ + public boolean isReturnResults() { + byte[] v = getAttribute(RETURN_RESULTS); + return v == null ? true : Bytes.toBoolean(v); + } /** * Method for retrieving the number of families to increment from 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 3b1f267..d23f492 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 @@ -7297,8 +7297,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { // // Request a cache flush. Do it outside update lock. requestFlush(); } - - return Result.create(allKVs); + return increment.isReturnResults() ? Result.create(allKVs) : null; } // diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestDurability.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestDurability.java index 10e7e3d..94aa106 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestDurability.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestDurability.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.regionserver.wal; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import java.io.IOException; @@ -192,6 +193,28 @@ public class TestDurability { assertEquals(3, Bytes.toLong(res.getValue(FAMILY, col3))); verifyWALCount(wals, wal, 2); } + + /* + * Test when returnResults set to false in increment it should not return the result instead it + * resturn null. + */ + @Test + public void testIncrementWithReturnResultsSetToFalse() throws Exception { + byte[] row1 = Bytes.toBytes("row1"); + byte[] col1 = Bytes.toBytes("col1"); + + // Setting up region + final WALFactory wals = new WALFactory(CONF, null, "testIncrementWithReturnResultsSetToFalse"); + byte[] tableName = Bytes.toBytes("testIncrementWithReturnResultsSetToFalse"); + final WAL wal = wals.getWAL(tableName); + HRegion region = createHRegion(tableName, "increment", wal, Durability.USE_DEFAULT); + + Increment inc1 = new Increment(row1); + inc1.setReturnResults(false); + inc1.addColumn(FAMILY, col1, 1); + Result res = region.increment(inc1); + assertNull(res); + } private Put newPut(Durability durability) { Put p = new Put(ROW); -- 1.9.5.msysgit.0