[jboss-jira] [JBoss JIRA] Commented: (JGRP-591) IpAddress.hashCode() not unique per ip/port

Bela Ban (JIRA) jira-events at lists.jboss.org
Fri Sep 14 09:52:12 EDT 2007


    [ http://jira.jboss.com/jira/browse/JGRP-591?page=comments#action_12376843 ] 
            
Bela Ban commented on JGRP-591:
-------------------------------

Got it. Yes, hashCode() has collisions, like any non-perfect hash. I *don't* think though that String.hashCode() is a perfect hash either.

There is a (small) chance that, if the hash code and port of 2 IpAddresses are the same, we will have identical objects, leading to incorrect behavior. Again, this chance is very small.

A solution to this would be to compare the string resulting from IP address and port, e.g.
"1.2.3.4:2" versus "1.2.3.5:1". This would always work as there cannot be 2 identical IP addresses which have the same port open.

With logical addresses (http://jira.jboss.com/jira/browse/JGRP-129), we will create cluster-wide unique identifiers, so this issue will go away.

> IpAddress.hashCode() not unique per ip/port
> -------------------------------------------
>
>                 Key: JGRP-591
>                 URL: http://jira.jboss.com/jira/browse/JGRP-591
>             Project: JGroups
>          Issue Type: Bug
>    Affects Versions: 2.4.1 SP4
>         Environment: windows xp sp2, jdk 1.6 update 2
>            Reporter: robert chou
>         Assigned To: Bela Ban
>             Fix For: 2.4.1 SP5, 2.5.1, 2.6
>
>
> Current implementation produces hashcode where ip/port combos "1.2.3.4:2" and "1.2.3.5:1" result in the same hash code.
> Existing code:
>     public final int hashCode() {
>         return ip_addr != null ? ip_addr.hashCode() + port : port;
>     }
> Manual test code:
>          InetAddress ip1 = InetAddress.getByAddress( new byte[] {1,2,3,4} );
>          int         port1 = 2;
>          int         hash1 = ip1.hashCode() + port1;
>          System.out.println( "hash1 = " + hash1 );
>          
>          InetAddress ip2 = InetAddress.getByAddress( new byte[] {1,2,3,5} );
>          int         port2 = 1;
>          int         hash2 = ip2.hashCode() + port2;
>          System.out.println( "hash2 = " + hash2 );

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list