wrong IllegalArgumentException thrown when creating an 'HServerAddress' with an 
un-reachable hostname
-----------------------------------------------------------------------------------------------------

                 Key: HBASE-5065
                 URL: https://issues.apache.org/jira/browse/HBASE-5065
             Project: HBase
          Issue Type: Bug
          Components: util
    Affects Versions: 0.90.4
            Reporter: Eran Hirsch
            Priority: Trivial


When trying to build an 'HServerAddress' object with an unresolvable hostname:

e.g. new HServerAddress("www.IAMUNREACHABLE.com:80")

a call to 'getResolvedAddress' would cause the 'InetSocketAddress' c'tor to 
throw an IllegalArgumentException because it is called with a null 'hostname' 
parameter.
This happens because there is no null-check after the static 
'getBindAddressInternal' method returns a null value when the hostname is 
unresolved.

This is a trivial bug because the code HServerAddress is expected to throw this 
kind of exception when this error occurs, but it is thrown "for the wrong 
reason". The method 'checkBindAddressCanBeResolved' should be the one throwing 
the exception (and give a slightly different reason). Because of this reason 
the method call itself becomes redundent as it will always succeed in the 
current flow, because the case it checks is already "checked" for by the 
previous "getResolvedAddress" method.

In short:
an IllegalArgumentException is thrown with reason: "hostname can't be null" 
from the InetSocketAddress c'tor
INSTEAD OF
an IllegalArgumentException with reason: "Could not resolve the DNS name of 
[BADHOSTNAME]:[PORT]" from HServerAddress's checkBindCanBeResolved method.

Stack trace:
java.lang.IllegalArgumentException: hostname can't be null
        at java.net.InetSocketAddress.<init>(InetSocketAddress.java:139) 
~[na:1.7.0_02]
        at 
org.apache.hadoop.hbase.HServerAddress.getResolvedAddress(HServerAddress.java:108)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.HServerAddress.<init>(HServerAddress.java:64) 
~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.zookeeper.RootRegionTracker.dataToHServerAddress(RootRegionTracker.java:82)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.zookeeper.RootRegionTracker.waitRootRegionLocation(RootRegionTracker.java:73)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:579)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:559)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:688)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:590)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:559)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:688)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:594)
 ~[hbase-0.90.4.jar:0.90.4]
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:559)
 ~[hbase-0.90.4.jar:0.90.4]
        at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:173) 
~[hbase-0.90.4.jar:0.90.4]
        at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:147) 
~[hbase-0.90.4.jar:0.90.4]



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to