From 2eae8104d19cc8be1b69f4969623b9a9f15e2593 Mon Sep 17 00:00:00 2001 From: Pankaj Kumar Date: Wed, 4 Apr 2018 10:16:11 +0530 Subject: [PATCH] HBASE-20231 Not able to delete column family from a row using RemoteHTable Signed-off-by: Ashish Singhi --- .../hbase/rest/client/RemoteHTable.java | 7 ++++-- .../hbase/rest/client/TestRemoteTable.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java index 463b232df33..fc6a90ff2b9 100644 --- a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java +++ b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java @@ -112,13 +112,16 @@ public class RemoteHTable implements Table { Iterator ii = quals.iterator(); while (ii.hasNext()) { sb.append(toURLEncodedBytes((byte[])e.getKey())); - sb.append(':'); Object o = ii.next(); // Puts use byte[] but Deletes use KeyValue if (o instanceof byte[]) { + sb.append(':'); sb.append(toURLEncodedBytes((byte[])o)); } else if (o instanceof KeyValue) { - sb.append(toURLEncodedBytes(((KeyValue)o).getQualifier())); + if (((KeyValue) o).getQualifierLength() != 0) { + sb.append(':'); + sb.append(toURLEncodedBytes(((KeyValue) o).getQualifier())); + } } else { throw new RuntimeException("object type not handled"); } diff --git a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/TestRemoteTable.java b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/TestRemoteTable.java index 342fc4e6afe..28f379866eb 100644 --- a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/TestRemoteTable.java +++ b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/TestRemoteTable.java @@ -349,18 +349,27 @@ public class TestRemoteTable { Put put = new Put(ROW_3); put.add(COLUMN_1, QUALIFIER_1, VALUE_1); put.add(COLUMN_2, QUALIFIER_2, VALUE_2); + put.add(COLUMN_3, QUALIFIER_1, VALUE_1); + put.add(COLUMN_3, QUALIFIER_2, VALUE_2); remoteTable.put(put); Get get = new Get(ROW_3); get.addFamily(COLUMN_1); get.addFamily(COLUMN_2); + get.addFamily(COLUMN_3); Result result = remoteTable.get(get); byte[] value1 = result.getValue(COLUMN_1, QUALIFIER_1); byte[] value2 = result.getValue(COLUMN_2, QUALIFIER_2); + byte[] value3 = result.getValue(COLUMN_3, QUALIFIER_1); + byte[] value4 = result.getValue(COLUMN_3, QUALIFIER_2); assertNotNull(value1); assertTrue(Bytes.equals(VALUE_1, value1)); assertNotNull(value2); assertTrue(Bytes.equals(VALUE_2, value2)); + assertNotNull(value3); + assertTrue(Bytes.equals(VALUE_1, value3)); + assertNotNull(value4); + assertTrue(Bytes.equals(VALUE_2, value4)); Delete delete = new Delete(ROW_3); delete.addColumn(COLUMN_2, QUALIFIER_2); @@ -390,6 +399,19 @@ public class TestRemoteTable { assertTrue(Bytes.equals(VALUE_1, value1)); assertNull(value2); + // Delete column family from row + delete = new Delete(ROW_3); + delete.addFamily(COLUMN_3); + remoteTable.delete(delete); + + get = new Get(ROW_3); + get.addFamily(COLUMN_3); + result = remoteTable.get(get); + value3 = result.getValue(COLUMN_3, QUALIFIER_1); + value4 = result.getValue(COLUMN_3, QUALIFIER_2); + assertNull(value3); + assertNull(value4); + delete = new Delete(ROW_3); remoteTable.delete(delete);