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

Feng Honghua commented on HBASE-8721:
-------------------------------------

  On the contrary, personally I think allowing client explicitly set timestamp 
is giving client the ability to EXACTLY control the versions semantic, without 
the impact from clock skew or HBASE-2256. By explicitly setting timestmaps for 
each KVs he put, client know exactly at any time point which versions will 
survive without worrying about exceptional cases such as clock skew or 
HBASE-2256.

  Below are 'acceptable' behaviors regarding delete/version from my point of 
view.

  1> version is determined by 'timestamp' only(same as current semantic), 
HBase(we) determines which version survive (in Scan/Compact etc.) only by 
timestamp.
  
  2> delete can only mask puts happened before it('before' here is measured by 
vector clock, mvcc in HBase, not by timestamp). All puts happened before a 
delete are candidates to be masked by that delete, but whether a candidate put 
will be actually masked by that delete further depends on whether the candidate 
put's timestamp is smaller than or equal to delete's timestamp. 

  So delete's semantic is: to delete an existing exact version (deleteColumn) 
or all existing smaller versions (deleteColumns / deleteFamily)

  These two version/delete semantics/behaviors have no conflicts.
                
> Deletes can mask puts that happen after the delete
> --------------------------------------------------
>
>                 Key: HBASE-8721
>                 URL: https://issues.apache.org/jira/browse/HBASE-8721
>             Project: HBase
>          Issue Type: Improvement
>          Components: regionserver
>            Reporter: Feng Honghua
>         Attachments: HBASE-8721-0.94-V0.patch
>
>
> this fix aims for bug mentioned in http://hbase.apache.org/book.html 5.8.2.1:
> "Deletes mask puts, even puts that happened after the delete was entered. 
> Remember that a delete writes a tombstone, which only disappears after then 
> next major compaction has run. Suppose you do a delete of everything <= T. 
> After this you do a new put with a timestamp <= T. This put, even if it 
> happened after the delete, will be masked by the delete tombstone. Performing 
> the put will not fail, but when you do a get you will notice the put did have 
> no effect. It will start working again after the major compaction has run. 
> These issues should not be a problem if you use always-increasing versions 
> for new puts to a row. But they can occur even if you do not care about time: 
> just do delete and put immediately after each other, and there is some chance 
> they happen within the same millisecond."

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to