Repository: hbase
Updated Branches:
  refs/heads/branch-1 10f3b7774 -> c64686e2e


HBASE-13134 mutateRow and checkAndMutate apis don't throw region level 
exceptions (Francis Liu)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/c64686e2
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/c64686e2
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/c64686e2

Branch: refs/heads/branch-1
Commit: c64686e2e172f70a25ecf3cb771b68e0a3eee03c
Parents: 10f3b77
Author: tedyu <yuzhih...@gmail.com>
Authored: Sun Mar 1 20:25:43 2015 -0800
Committer: tedyu <yuzhih...@gmail.com>
Committed: Sun Mar 1 20:25:43 2015 -0800

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/client/HTable.java   | 19 ++++++++++++++++++-
 .../hadoop/hbase/client/TestCheckAndMutate.java  | 16 +++++++++++++++-
 .../hadoop/hbase/client/TestFromClientSide.java  | 11 +++++++++++
 3 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/c64686e2/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
index d36cd0f..6a5d7a5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
@@ -1048,7 +1048,15 @@ public class HTable implements HTableInterface {
           regionMutationBuilder.setAtomic(true);
           MultiRequest request =
             
MultiRequest.newBuilder().addRegionAction(regionMutationBuilder.build()).build();
-          getStub().multi(controller, request);
+          ClientProtos.MultiResponse response = getStub().multi(controller, 
request);
+          ClientProtos.RegionActionResult res = 
response.getRegionActionResultList().get(0);
+          if (res.hasException()) {
+            Throwable ex = ProtobufUtil.toException(res.getException());
+            if(ex instanceof IOException) {
+              throw (IOException)ex;
+            }
+            throw new IOException("Failed to mutate row: 
"+Bytes.toStringBinary(rm.getRow()), ex);
+          }
         } catch (ServiceException se) {
           throw ProtobufUtil.getRemoteException(se);
         }
@@ -1327,6 +1335,15 @@ public class HTable implements HTableInterface {
                   getLocation().getRegionInfo().getRegionName(), row, family, 
qualifier,
                   new BinaryComparator(value), compareType, rm);
               ClientProtos.MultiResponse response = 
getStub().multi(controller, request);
+              ClientProtos.RegionActionResult res = 
response.getRegionActionResultList().get(0);
+              if (res.hasException()) {
+                Throwable ex = ProtobufUtil.toException(res.getException());
+                if(ex instanceof IOException) {
+                  throw (IOException)ex;
+                }
+                throw new IOException("Failed to checkAndMutate row: "+
+                    Bytes.toStringBinary(rm.getRow()), ex);
+              }
               return Boolean.valueOf(response.getProcessed());
             } catch (ServiceException se) {
               throw ProtobufUtil.getRemoteException(se);

http://git-wip-us.apache.org/repos/asf/hbase/blob/c64686e2/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java
index 2e48aba..e22f072 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.filter.CompareFilter;
+import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -29,6 +30,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 @Category(MediumTests.class)
 public class TestCheckAndMutate {
@@ -96,8 +98,20 @@ public class TestCheckAndMutate {
           Bytes.toString(result.getValue(family, 
Bytes.toBytes("B"))).equals("b"));
       assertTrue("Column C should not exist",
           result.getValue(family, Bytes.toBytes("C")) == null);
+
+      //Test that we get a region level exception
+      try {
+        Put p = new Put(rowKey);
+        p.add(new byte[]{'b', 'o', 'g', 'u', 's'}, new byte[]{'A'},  new 
byte[0]);
+        rm = new RowMutations(rowKey);
+        rm.add(p);
+        table.checkAndMutate(rowKey, family, Bytes.toBytes("A"), 
CompareFilter.CompareOp.EQUAL,
+            Bytes.toBytes("a"), rm);
+        fail("Expected NoSuchColumnFamilyException");
+      } catch(NoSuchColumnFamilyException e) {
+      }
     } finally {
       table.close();
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/hbase/blob/c64686e2/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
index b16d41a..9cd22fd 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
@@ -4432,6 +4432,17 @@ public class TestFromClientSide {
     r = t.get(g);
     assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[1])));
     assertNull(r.getValue(FAMILY, QUALIFIERS[0]));
+
+    //Test that we get a region level exception
+    try {
+      arm = new RowMutations(ROW);
+      p = new Put(ROW);
+      p.add(new byte[]{'b', 'o', 'g', 'u', 's'}, QUALIFIERS[0], VALUE);
+      arm.add(p);
+      t.mutateRow(arm);
+      fail("Expected NoSuchColumnFamilyException");
+    } catch(NoSuchColumnFamilyException e) {
+    }
   }
 
   @Test

Reply via email to