[ 
https://issues.apache.org/jira/browse/HBASE-12445?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hani Nadra updated HBASE-12445:
-------------------------------
    Attachment: 0001-HBASE-11788-hbase-is-not-deleting-the-cell-when-a-Pu.patch

Here the patch with the updated test and the fix suggest by sri in 1178:

QualifierValue.Builder valueBuilder = QualifierValue.newBuilder(); at line 
number 1110 should be inside the inner for loop at 1115. 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. Attached the testcase to the defect.Could you please reopen the defect.

> 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: 
> 0001-HBASE-11788-hbase-is-not-deleting-the-cell-when-a-Pu.patch, 
> 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