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 cc3efddf0dc..29b48e14431 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 @@ -115,13 +115,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(toURLEncodedBytes((byte[])o)); + sb.append(':'); + sb.append(toURLEncodedBytes((byte[]) o)); } else if (o instanceof KeyValue) { - sb.append(toURLEncodedBytes(CellUtil.cloneQualifier((KeyValue)o))); + if (((KeyValue) o).getQualifierLength() != 0) { + sb.append(':'); + sb.append(toURLEncodedBytes(CellUtil.cloneQualifier((KeyValue) o))); + } } 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 5053d9191bd..c6f51957ef3 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 @@ -353,18 +353,27 @@ public class TestRemoteTable { Put put = new Put(ROW_3); put.addColumn(COLUMN_1, QUALIFIER_1, VALUE_1); put.addColumn(COLUMN_2, QUALIFIER_2, VALUE_2); + put.addColumn(COLUMN_3, QUALIFIER_1, VALUE_1); + put.addColumn(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); @@ -394,6 +403,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);