From d67942f3369784e7160ebbd6ccc335a62fcbaa4f Mon Sep 17 00:00:00 2001 From: Hani Nadra Date: Mon, 10 Nov 2014 10:53:33 -0600 Subject: [PATCH] HBASE-11788 - hbase is not deleting the cell when a Put with a KeyValue, KeyValue.Type.Delete is submitted --- .../org/apache/hadoop/hbase/protobuf/ProtobufUtil.java | 6 +++--- .../apache/hadoop/hbase/client/TestPutWithDelete.java | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java index 768da76..435ae5d 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java @@ -1107,13 +1107,13 @@ public final class ProtobufUtil { builder.setTimeRange(timeRangeBuilder.build()); } ColumnValue.Builder columnBuilder = ColumnValue.newBuilder(); - QualifierValue.Builder valueBuilder = QualifierValue.newBuilder(); for (Map.Entry> family: increment.getFamilyCellMap().entrySet()) { columnBuilder.setFamily(ByteStringer.wrap(family.getKey())); columnBuilder.clearQualifierValue(); List values = family.getValue(); if (values != null && values.size() > 0) { for (Cell cell: values) { + QualifierValue.Builder valueBuilder = QualifierValue.newBuilder(); valueBuilder.setQualifier(ByteStringer.wrap( cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())); valueBuilder.setValue(ByteStringer.wrap( @@ -1171,11 +1171,11 @@ public final class ProtobufUtil { builder.setNonce(nonce); } ColumnValue.Builder columnBuilder = ColumnValue.newBuilder(); - QualifierValue.Builder valueBuilder = QualifierValue.newBuilder(); for (Map.Entry> family: mutation.getFamilyCellMap().entrySet()) { columnBuilder.clear(); columnBuilder.setFamily(ByteStringer.wrap(family.getKey())); for (Cell cell: family.getValue()) { + QualifierValue.Builder valueBuilder = QualifierValue.newBuilder(); valueBuilder.setQualifier(ByteStringer.wrap( cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())); valueBuilder.setValue(ByteStringer.wrap( @@ -1966,7 +1966,7 @@ public final class ProtobufUtil { for (Permission.Action a : actions) { builder.addAction(toPermissionAction(a)); } - } + } ret.setNamespacePermission(builder); return ret.build(); } else if (tablePerm.hasTable()) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestPutWithDelete.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestPutWithDelete.java index 5ae5ff8..0e819bb 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestPutWithDelete.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestPutWithDelete.java @@ -62,6 +62,7 @@ public class TestPutWithDelete { put.add(family, Bytes.toBytes("A"), Bytes.toBytes("a")); put.add(family, Bytes.toBytes("B"), Bytes.toBytes("b")); put.add(family, Bytes.toBytes("C"), Bytes.toBytes("c")); + put.add(family, Bytes.toBytes("D"), Bytes.toBytes("d")); table.put(put); // get row back and assert the values Get get = new Get(rowKey); @@ -72,23 +73,28 @@ public class TestPutWithDelete { Bytes.toString(result.getValue(family, Bytes.toBytes("B"))).equals("b")); assertTrue("Column C value should be c", Bytes.toString(result.getValue(family, Bytes.toBytes("C"))).equals("c")); + assertTrue("Column D value should be d", + Bytes.toString(result.getValue(family, Bytes.toBytes("D"))).equals("d")); // put the same row again with C column deleted put = new Put(rowKey); - put.add(family, Bytes.toBytes("A"), Bytes.toBytes("a")); - put.add(family, Bytes.toBytes("B"), Bytes.toBytes("b")); + put.add(family, Bytes.toBytes("A"), Bytes.toBytes("a1")); + put.add(family, Bytes.toBytes("B"), Bytes.toBytes("b1")); KeyValue marker = new KeyValue(rowKey, family, Bytes.toBytes("C"), HConstants.LATEST_TIMESTAMP, KeyValue.Type.DeleteColumn); + put.add(family, Bytes.toBytes("D"), Bytes.toBytes("d1")); put.add(marker); table.put(put); // get row back and assert the values get = new Get(rowKey); result = table.get(get); - assertTrue("Column A value should be a", - Bytes.toString(result.getValue(family, Bytes.toBytes("A"))).equals("a")); - assertTrue("Column B value should be b", - Bytes.toString(result.getValue(family, Bytes.toBytes("B"))).equals("b")); + assertTrue("Column A value should be a1", + Bytes.toString(result.getValue(family, Bytes.toBytes("A"))).equals("a1")); + assertTrue("Column B value should be b1", + Bytes.toString(result.getValue(family, Bytes.toBytes("B"))).equals("b1")); assertTrue("Column C should not exist", result.getValue(family, Bytes.toBytes("C")) == null); + assertTrue("Column D value should be d1", + Bytes.toString(result.getValue(family, Bytes.toBytes("D"))).equals("d1")); } finally { table.close(); } -- 1.9.0.msysgit.0