[ 
https://issues.apache.org/jira/browse/HBASE-12445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14204958#comment-14204958
 ] 

sri commented on HBASE-12445:
-----------------------------

In the ProtoBufUtil.toMutation(final MutationType type, final Mutation 
mutation, MutationProto.Builder builder, long nonce)
QualifierValue.Builder valueBuilder = QualifierValue.newBuilder(); at line 
number 1110 should be inside the inner for loop at 1115 or needs to clear the 
ValueBuilder. Otherwise valueBuilder is carrying over the previous values that 
where set. In this case the DeleteType is getting carried over to the next 
columns and deleting all the columns.

> hbase is removing all remaining cells immediately after the cell marked with 
> marker = KeyValue.Type.DeleteColumn via PUT
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-12445
>                 URL: https://issues.apache.org/jira/browse/HBASE-12445
>             Project: HBase
>          Issue Type: Bug
>            Reporter: sri
>         Attachments: TestPutAfterDeleteColumn.java
>
>
> Code executed:
> {code}
>     @Test
>     public void testHbasePutDeleteCell() throws Exception {
>         TableName tableName = TableName.valueOf("my_test");
>         Configuration configuration = HBaseConfiguration.create();
>         HTableInterface table = new HTable(configuration, tableName);
>         final String rowKey = "12345";
>         final byte[] familly = Bytes.toBytes("default");
>         // put one row
>       Put 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("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);
>       Result 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 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("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(marker);
>         put.add(family, Bytes.toBytes("D"), Bytes.toBytes("d1"));
>       table.put(put);
>       // get row back and assert the values
>       get = new Get(rowKey);
>       result = table.get(get);
>       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"));
>     }
> {code}
> This assertion fails, the cell  D is also deleted



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to