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

Na Li commented on SENTRY-2141:
-------------------------------

since hive is using second as time unit and the variable holding the time is 
"int", sentry should convert the time from millisecond to second and cast to 
int. Previous code just cast the long value as time in milliseconds to int as 
time in seconds, which runs into overflows (because a Long can store a wider 
range than an Integer), and changes the meaning of the value.

 

Correct behavior:
{code:java}

int hiveCreateTime = (int)TimeUnit.SECONDS.convert(tPrivilege.getCreateTime(),
TimeUnit.MILLISECONDS);

return new HivePrivilegeInfo(principal, hivePrivilege, hivePrivilegeObject, 
grantor,
grantOption, hiveCreateTime);{code}

Wrong behavior:
{code}
(int) tPrivilege.getCreateTime()
{code}



> Sentry Privilege TimeStamp is not converted to grantTime in HivePrivilegeInfo 
> correctly
> ---------------------------------------------------------------------------------------
>
>                 Key: SENTRY-2141
>                 URL: https://issues.apache.org/jira/browse/SENTRY-2141
>             Project: Sentry
>          Issue Type: Bug
>    Affects Versions: 2.0.0, 2.1.0
>            Reporter: Na Li
>            Assignee: Na Li
>            Priority: Major
>         Attachments: SENTRY-2141.001.patch, SENTRY-2141.002.patch
>
>
> sentry CreateTime is the difference, measured in milliseconds, between the 
> current time and midnight, January 1, 1970 UTC. hive granttime is in seconds. 
> So need to convert the time.
> The original code just cost the timestamp from long to int without converting 
> milliseconds to seconds. Therefore, the timestamp value is wrong when 
> retrieving the privilege from hive.
> The solution is to convert the time correctly.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to