hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jean-Marc Spaggiari (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-11788) hbase is not deleting the cell when a Put with a KeyValue, KeyValue.Type.Delete is submitted
Date Wed, 20 Aug 2014 14:46:27 GMT

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

Jean-Marc Spaggiari updated HBASE-11788:
----------------------------------------

    Description: 
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


  was:
Code executed:
    @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");
    }

This assertion fails, the cell is not deleted but rather the value is empty:
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=      

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



> 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.96.1.1
>         Environment: Cloudera CDH 5.1.x
>            Reporter: Cristian Armaselu
>
> 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.2#6252)

Mime
View raw message