Dan LaRocque created HBASE-10494:
------------------------------------

             Summary: hadoop2 class reference in Maven Central's 
hbase-client-0.96.1.1-hadoop1
                 Key: HBASE-10494
                 URL: https://issues.apache.org/jira/browse/HBASE-10494
             Project: HBase
          Issue Type: Bug
    Affects Versions: 0.96.1.1
         Environment: Only affects jar on Maven Central.  Jar in the hadoop1 
tarball download is not affected.
            Reporter: Dan LaRocque
            Priority: Minor


RpcClient$Connection.class as shipped in the hbase-client-0.96.1.1-hadoop1 jar 
on Maven Central contains references to 
org.apache.hadoop.net.SocketInputWrapper. I think this class does not exist in 
hadoop1 because a classfile search of central yields hits only on 2.0 and 0.23. 
 There may be other references.  I only know about this one because it was 
killing my HRegionServer early with this exception:

{noformat}
2014-02-10 20:55:52,021 INFO  [M:0;dalarolap:48768] master.ServerManager: 
Waiting for region servers count to settle; currently checked in 0, slept for 0 
ms, expecting minimum of 1, maximum of 2147483647, timeout of 4500 ms, interval 
of 1500 ms.
2014-02-10 20:55:52,066 WARN  [RS:0;dalarolap:33703] 
regionserver.HRegionServer: error telling master we are up
com.google.protobuf.ServiceException: java.lang.NoClassDefFoundError: 
org/apache/hadoop/net/SocketInputWrapper
        at 
org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1670)
        at 
org.apache.hadoop.hbase.ipc.RpcClient$BlockingRpcChannelImplementation.callBlockingMethod(RpcClient.java:1711)
        at 
org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos$RegionServerStatusService$BlockingStub.regionServerStartup(RegionServerStatusProtos.java:5402)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.reportForDuty(HRegionServer.java:1926)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:784)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoClassDefFoundError: 
org/apache/hadoop/net/SocketInputWrapper
        at 
org.apache.hadoop.hbase.ipc.RpcClient.createConnection(RpcClient.java:348)
        at 
org.apache.hadoop.hbase.ipc.RpcClient.getConnection(RpcClient.java:1522)
        at org.apache.hadoop.hbase.ipc.RpcClient.call(RpcClient.java:1424)
        at 
org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1653)
        ... 5 more
Caused by: java.lang.ClassNotFoundException: 
org.apache.hadoop.net.SocketInputWrapper
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 9 more
{noformat}

I first stumbled over this while developing an app managed by Maven that 
depends on hbase-client, but then reproduced it by extracting the hadoop1 
tarball and replacing the client jar with the same-named one from Maven Central.

I think this is not the same as HBASE-7269, although the stacktrace is  similar.

Here's a disassembler grep on the Maven Central copy showing some references:


{noformat}
# From the root of an extracted hbase-client-0.96.1.1-hadoop1 jar downloaded 
from Maven Central
client-maven$ javap -verbose 
'org/apache/hadoop/hbase/ipc/RpcClient$Connection.class' | grep 
SocketInputWrapper
   #198 = Methodref          #744.#818    //  
org/apache/hadoop/net/NetUtils.getInputStream:(Ljava/net/Socket;)Lorg/apache/hadoop/net/SocketInputWrapper;
   #818 = NameAndType        #1115:#1159  //  
getInputStream:(Ljava/net/Socket;)Lorg/apache/hadoop/net/SocketInputWrapper;
  #1159 = Utf8               
(Ljava/net/Socket;)Lorg/apache/hadoop/net/SocketInputWrapper;
       180: invokestatic  #198                // Method 
org/apache/hadoop/net/NetUtils.getInputStream:(Ljava/net/Socket;)Lorg/apache/hadoop/net/SocketInputWrapper;
{noformat}

Here's the same grep on the tarball's copy.  No references.

{noformat}
# Same as above, but using jar from the download tarball for hadoop1
client-tarball$ javap -verbose 
'org/apache/hadoop/hbase/ipc/RpcClient$Connection.class' | grep 
SocketInputWrapper
client-tarball$ 
{noformat}

What do you think?



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to