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

Dayakar M updated HIVE-29762:
-----------------------------
    Description: 
Synchronization logic added as a part of HIVE-24428 is having hash collision 
issue.

To prevent concurrent issues as a part of _add_partitions_ request, added 
_com.google.common.util.concurrent.Striped.lock(stripes)_ mechanism which 
internally creates lock objects by hashing the given key, here it also uses the 
stripes value while calculating the hash. Sometimes for unrelated keys it is 
generating the same hash which resulting same lock object. 
The intent of this locking mechanism is to prevent concurrent requests for the 
add_partitions request for the same table but due to hash collision for 
unrelated keys(db.table names) it is using same lock object which is preventing 
other unrelated add_partition requests.
In this case if stripe size increased to some bigger value like 1024 then it is 
generating different hash which results different lock keys but there could be 
still hash collision can happen and increasing stripe size will increase memory 
overhead.

So this has to be checked and need a proper fix.

  was:
Synchronization logic added as a part of HIVE-24428 is having hash collision 
issue.



To prevent concurrent issues as a part of _add_partitions_ request, added 
_com.google.common.util.concurrent.Striped.lock(stripes)_ mechanism which 
internally creates lock objects by hashing the given key. Here it also uses the 
stripes value while calculating the hash. Due to which for some unrelated keys 
it is generating the same hash which resulting same key used for locking. 
The intent of this locking mechanism is to prevent concurrent requests for the 
add_partitions request for the same table but due to hash collision for 
unrelated keys(db.table names) it is using same lock object which is preventing 
other unrelated add_partition requests.
In this case if stripe size increased to some bigger value like 1024 then it is 
generating different hash which results different keys but there could be still 
hash collision can happen which need to share same lock for unrelated keys.

So this has to be checked and need a proper fix.


> Synchronization logic added as a part of HIVE-24428 is having hash collision 
> issue.
> -----------------------------------------------------------------------------------
>
>                 Key: HIVE-29762
>                 URL: https://issues.apache.org/jira/browse/HIVE-29762
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Dayakar M
>            Assignee: Dayakar M
>            Priority: Major
>
> Synchronization logic added as a part of HIVE-24428 is having hash collision 
> issue.
> To prevent concurrent issues as a part of _add_partitions_ request, added 
> _com.google.common.util.concurrent.Striped.lock(stripes)_ mechanism which 
> internally creates lock objects by hashing the given key, here it also uses 
> the stripes value while calculating the hash. Sometimes for unrelated keys it 
> is generating the same hash which resulting same lock object. 
> The intent of this locking mechanism is to prevent concurrent requests for 
> the add_partitions request for the same table but due to hash collision for 
> unrelated keys(db.table names) it is using same lock object which is 
> preventing other unrelated add_partition requests.
> In this case if stripe size increased to some bigger value like 1024 then it 
> is generating different hash which results different lock keys but there 
> could be still hash collision can happen and increasing stripe size will 
> increase memory overhead.
> So this has to be checked and need a proper fix.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to