hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nicolas Spiegelberg (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HBASE-3644) HServerAddress Violates Equivalence Relations
Date Tue, 15 Mar 2011 05:32:29 GMT

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

Nicolas Spiegelberg commented on HBASE-3644:

I think, for 0.90, it should suffice to just remove 
    result ^= stringValue.hashCode();
Even if a.stringValue != b.stringValue, it's okay for a.hashCode() == b.hashCode() &&
!a.equals(b), just can't have the other way around.  This wouldn't solve the case where stringValue
matches but address doesn't, however that's not the common case and I'm pretty sure that's
not possible anymore because of HBASE-2806.

However, it seems like the stringValue is sort of unnecessary and can be removed in 0.92.
 Because of checkBindAddressCanBeResolved() from HBASE-2806, you're guaranteed that the hostname
will always be resolved when working with an HServerAddress.  Because of HBASE-3286, we use
address.getHostName() to generate stringValue anyways.  It seems like stringValue is just
a legacy variable that can be removed.  JD, Stack, or any other people who worked on this
class, am I missing something?

> HServerAddress Violates Equivalence Relations
> ---------------------------------------------
>                 Key: HBASE-3644
>                 URL: https://issues.apache.org/jira/browse/HBASE-3644
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 0.90.2, 0.92.0
>            Reporter: Nicolas Spiegelberg
>            Assignee: Nicolas Spiegelberg
>             Fix For: 0.90.2, 0.92.0
> See HBASE-3387 or http://www.ibm.com/developerworks/java/library/j-jtp05273.html#N10184
.  Basically, 'a' denotes HServerAddress(DNS) & 'b' denotes HServerAddress(nslookup(DNS)).
 This is extremely common within HBase when 'conf/regionserver' contains DNS entries because
ClusterStatus.getServers() is IP-based. You have a.address.equals(b.address) && !a.stringValue.equals(b.stringValue).
 In this case, a.equals(b) while a.hashCode() != b.hashCode().  

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

View raw message