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

Jinghui Wang commented on HADOOP-11221:
---------------------------------------

Hi Nicholas,

Thanks for the suggestion, I double checked the code looks like the capacity of 
buffer.length will always be power of 2. Will update the patch.

{code:borderStyle=solid}
 public IdentityHashStore(int capacity) {
    Preconditions.checkArgument(capacity >= 0);
    if (capacity == 0) {
      this.capacity = 0;
      this.buffer = null;
    } else {
      // Round the capacity we need up to a power of 2.
      realloc((int)Math.pow(2,
          Math.ceil(Math.log(capacity) / Math.log(2))));
    }
  }
{code}

> JAVA specification for hashcode does not enforce it to be non-negative, but 
> IdentityHashStore assumes System.identityHashCode() is non-negative
> -----------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-11221
>                 URL: https://issues.apache.org/jira/browse/HADOOP-11221
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: util
>    Affects Versions: 2.4.1
>            Reporter: Jinghui Wang
>            Assignee: Jinghui Wang
>         Attachments: HADOOP-11221.patch, HADOOP-11221.v1.patch
>
>
> The following code snippet shows that IdentityHashStore assumes the hashCode 
> is always non-negative.
> {code:borderStyle=solid}
>    private void putInternal(Object k, Object v) {
>      int hash = System.identityHashCode(k);
>      final int numEntries = buffer.length / 2;
>      int index = hash % numEntries;
>        ...
>    }
>    
>   private int getElementIndex(K k) {
>      ...
>      final int numEntries = buffer.length / 2;
>      int hash = System.identityHashCode(k);
>      int index = hash % numEntries;
>      int firstIndex = index;
>      ...
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to