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

Xiang Li commented on HBASE-18824:
----------------------------------

[~chia7712], thanks for guide! 
I read the code of {{HRegion#updateDeleteLatestVersionTimeStamp()}} as well as 
{{HRegion#prepareDeleteTimestamps()}}, and step 2 of 
{{HRegion#doMiniBatchMutate()}}.

The code calls prepareDeleteTimestamps() if the mutation is not Put(Could be 
Delete, but could it be Increment or Append?). Loop for each cell list of 
column family, and loop for each cell.

It operates differently in 2 conditions, one is for Type.Delete, the other is 
for Type.DeleteFamily, Type.DeleteFamilyVersion or Type.DeleteColumn. 
* For Type.Delete
** When the size of Get's result is greater than count (to be deleted), the 
code updates the timestamp to server's current time
** When the size of Get's result is equal to count(to be deleted), the code 
updates the timestamp to the latest version of what could be Get (why?)
* For other types (Type.DeleteFamily, Type.DeleteFamilyVersion or 
Type.DeleteColumn), update the timestamp to server's current time when it is 
LATEST_TIMESTAMP. 

Do I get it correctly?

> Add meaningful comment to HConstants.LATEST_TIMESTAMP to explain why it is 
> MAX_VALUE
> ------------------------------------------------------------------------------------
>
>                 Key: HBASE-18824
>                 URL: https://issues.apache.org/jira/browse/HBASE-18824
>             Project: HBase
>          Issue Type: Improvement
>            Reporter: Xiang Li
>            Assignee: Xiang Li
>            Priority: Minor
>         Attachments: HBASE-18824.master.000.patch, 
> HBASE-18824.master.001.patch
>
>
> Thanks to [Jerry and Chia-Ping Tsai's 
> comments|https://issues.apache.org/jira/browse/HBASE-18824?focusedCommentId=16167392&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16167392]
>  to correct my wrong understanding. 
> The following documentation says that by default(when the timestamp is not 
> specified for Put or Delete), system uses the server's {{currentTimeMillis}}.
> 1. In chapter 27.2.4 Put 
> bq. Doing a put always creates a new version of a cell, at a certain 
> timestamp. {color:#205081}By default the system uses the server’s 
> currentTimeMillis{color}, ...
> 2. In chapter 27.2.5 Delete
> bq. Deletes work by creating tombstone markers. For example, let’s suppose we 
> want to delete a row. For this you can specify a version, or else 
> {color:#205081}by default the currentTimeMillis is used.{color}...
> It seems not consistent with the code. Because in the client side's code, 
> when timestamp is not specified, HConstants.LATEST_TIMESTAMP is used, which 
> is Long.MAX_VALUE, rather than {{System.currentTimeMillis()}}.
> However, the documentation is correct, because on the server side,  timestamp 
> of Put cell with HConstants.LATEST_TIMESTAMP will be replaced with server's 
> {{currentTimeMillis}}.
> So we decide to add more comments to HConstants.LATEST_TIMESTAMP to help the 
> new comers steer clear of the confusion.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to