[
https://issues.apache.org/jira/browse/HBASE-11788?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14115548#comment-14115548
]
Anoop Sam John commented on HBASE-11788:
----------------------------------------
I mean the delete version case. But seems not much of issue like mark *all*
future Puts. Becuase we treat the cell as Put type and update the latest TS
with current RS time. So only issue is it might not delete the version
intended. But might delete a future version (If an immediate put or put with
same TS)
> 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.2#6252)