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

stack commented on HBASE-17908:
-------------------------------

As part of this exercise, I purged all includes of guava, even transitives from 
hadoop. Here are places where hadoop itself depends on guava so we'll have to 
let the transitives come in. Seems tough to do any exclusion here if Hadoop 
Configuration depends on guava so I ended-up putting back transitive include by 
hadoop-guava of whatever its guava is.

{code}
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.502 sec <<< 
FAILURE! - in org.apache.hadoop.hbase.io.crypto.aes.TestAES
testAlternateRNG(org.apache.hadoop.hbase.io.crypto.aes.TestAES)  Time elapsed: 
0.252 sec  <<< ERROR!
java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at 
org.apache.hadoop.conf.Configuration$DeprecationDelta.<init>(Configuration.java:328)
  at 
org.apache.hadoop.conf.Configuration$DeprecationDelta.<init>(Configuration.java:341)
  at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:423)
  at 
org.apache.hadoop.hbase.io.crypto.aes.TestAES.testAlternateRNG(TestAES.java:88)
{code}

Let me post a patch that is severe in its guava eliminations and that has us 
using guava 22.0 (shaded).

One thing I think I have learned is that shading, relocations need to always be 
the same for the case where a shaded lib itself depends on another shaded lib; 
e.g. protobuf utils depends on guava. Currently we have our internal relocation 
for protobuf3 which adds the prefix org.apache.hadoop.hbase.shaded but our 
thirdparty jar has guava offset by org.apache.hbase.thirdparty.shaded; I think 
these need to be the same. Let me try moving protobuf to hbase-thirdparty 
project and bring in the protobuf util which uses guava and get that working. 
Once that is done, I think we have a pattern going forward for removing from 
the guava/netty/protobuf versions mash-up.

> Upgrade guava
> -------------
>
>                 Key: HBASE-17908
>                 URL: https://issues.apache.org/jira/browse/HBASE-17908
>             Project: HBase
>          Issue Type: Sub-task
>          Components: dependencies
>            Reporter: Balazs Meszaros
>            Assignee: stack
>            Priority: Critical
>             Fix For: 2.0.0
>
>
> Currently we are using guava 12.0.1, but the latest version is 21.0. 
> Upgrading guava is always a hassle because it is not always backward 
> compatible with itself.
> Currently I think there are to approaches:
> 1. Upgrade guava to the newest version (21.0) and shade it.
> 2. Upgrade guava to a version which does not break or builds (15.0).
> If we can update it, some dependencies should be removed: 
> commons-collections, commons-codec, ...



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to