diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java hbase-server/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java index 3dd35f7..8500e40 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java @@ -265,7 +265,7 @@ public class ThriftHBaseServiceHandler implements THBaseService.Iface { try { htable.delete(tempDeletes); } catch (IOException e) { - throw getTIOError(e); + // ignore, reported through the number of deletes in the result } finally { closeTable(htable); } diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java hbase-server/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java index d6dbff9..2e6f0d7 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java @@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MediumTests; import org.apache.hadoop.hbase.client.HBaseAdmin; +import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.test.MetricsAssertHelper; import org.apache.hadoop.hbase.thrift.ThriftMetrics; import org.apache.hadoop.hbase.thrift2.generated.TColumn; @@ -242,6 +243,39 @@ public class TestThriftHBaseServiceHandler { } @Test + public void testDeleteMultipleWithFailure() throws Exception { + ThriftHBaseServiceHandler handler = createHandler(); + ByteBuffer table = ByteBuffer.wrap(tableAname); + byte[] rowName1 = "testDeleteMultipleWithFailure1".getBytes(); + byte[] rowName2 = "testDeleteMultipleWithFailure2".getBytes(); + + List columnValues = new ArrayList(); + columnValues.add(new TColumnValue(ByteBuffer.wrap(familyAname), ByteBuffer.wrap(qualifierAname), ByteBuffer + .wrap(valueAname))); + columnValues.add(new TColumnValue(ByteBuffer.wrap(familyBname), ByteBuffer.wrap(qualifierBname), ByteBuffer + .wrap(valueBname))); + List puts = new ArrayList(); + puts.add(new TPut(ByteBuffer.wrap(rowName1), columnValues)); + puts.add(new TPut(ByteBuffer.wrap(rowName2), columnValues)); + + handler.putMultiple(table, puts); + + try { + UTIL.getHBaseAdmin().disableTable(tableAname); + + List deletes = new ArrayList(); + deletes.add(new TDelete(ByteBuffer.wrap(rowName1))); + deletes.add(new TDelete(ByteBuffer.wrap(rowName2))); + + List deleteResults = handler.deleteMultiple(table, deletes); + // 2 means all of them failed + assertEquals(2, deleteResults.size()); + } finally { + UTIL.getHBaseAdmin().enableTable(tableAname); + } + } + + @Test public void testDelete() throws Exception { ThriftHBaseServiceHandler handler = createHandler(); byte[] rowName = "testDelete".getBytes();