hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "sri (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-11788) hbase is not deleting the cell when a Put with a KeyValue, KeyValue.Type.Delete is submitted
Date Thu, 06 Nov 2014 23:05:40 GMT

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

sri commented on HBASE-11788:
-----------------------------

I tested it with the new patch which we got for this fix. we have few columns after the DeleteColumn
Marker in the put. All the columns after the DeleteColumn Marker are getting deleted. 

I looked at the code and i  see 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. 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 not deleting the cell when a Put with a KeyValue, KeyValue.Type.Delete is submitted
> --------------------------------------------------------------------------------------------
>
>                 Key: HBASE-11788
>                 URL: https://issues.apache.org/jira/browse/HBASE-11788
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 0.99.0, 0.96.1.1, 0.98.5, 2.0.0
>         Environment: Cloudera CDH 5.1.x
>            Reporter: Cristian Armaselu
>            Assignee: Srikanth Srungarapu
>             Fix For: 0.99.0, 2.0.0, 0.98.6
>
>         Attachments: HBASE-11788-master.patch, HBASE-11788-master_v2.patch, TestPutWithDelete.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(Bytes.toBytes(rowKey));
>         put.add(familly, Bytes.toBytes("A"), Bytes.toBytes("a"));
>         put.add(familly, Bytes.toBytes("B"), Bytes.toBytes("b"));
>         put.add(familly, Bytes.toBytes("C"), Bytes.toBytes("c"));
>         table.put(put);
>         // get row back and assert the values
>         Get get = new Get(Bytes.toBytes(rowKey));
>         Result result = table.get(get);
>         Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("A"))).equals("a"),
"Column A value should be a");
>         Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("B"))).equals("b"),
"Column B value should be b");
>         Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("C"))).equals("c"),
"Column C value should be c");
>         // put the same row again with C column deleted
>         put = new Put(Bytes.toBytes(rowKey));
>         put.add(familly, Bytes.toBytes("A"), Bytes.toBytes("a"));
>         put.add(familly, Bytes.toBytes("B"), Bytes.toBytes("b"));
>         put.add(new KeyValue(Bytes.toBytes(rowKey), familly, Bytes.toBytes("C"), HConstants.LATEST_TIMESTAMP,
KeyValue.Type.DeleteColumn));
>         table.put(put);
>         // get row back and assert the values
>         get = new Get(Bytes.toBytes(rowKey));
>         result = table.get(get);
>         Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("A"))).equals("a"),
"Column A value should be a");
>         Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("B"))).equals("b"),
"Column A value should be b");
>         Assert.isTrue(result.getValue(familly, Bytes.toBytes("C")) == null, "Column C
should not exists");
>     }
> {code}
> This assertion fails, the cell is not deleted but rather the value is empty:
> {code}
> hbase(main):029:0> scan 'my_test'
> ROW                                                   COLUMN+CELL                   
                                                                                         
                                   
>  12345                                                column=default:A, timestamp=1408473082290,
value=a                                                                                  
                       
>  12345                                                column=default:B, timestamp=1408473082290,
value=b                                                                                  
                       
>  12345                                                column=default:C, timestamp=1408473082290,
value=      
> {code}
> This behavior is different than previous 4.8.x Cloudera version and is currently corrupting
all hive queries involving is null or is not null operators on the columns mapped to hbase



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

Mime
View raw message