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

Christopher Tubbs commented on HDFS-7040:
-----------------------------------------

bq. .is there any easy way to switch off the missing methods in the hadoop code 
while still having it build against 11.02

Sure, the easiest would be to (re-)implement the LimitInputStream functionality 
internally within HDFS code. (Minimally, copy the private inner class 
implementation of ByteStreams.limit() from a newer version, which is called 
LimitedInputStream. A small note in the NOTICE file to give credit to that 
project should suffice (it's already Apache License v2.0)). I'd do this myself 
and provide a patch, but I'm having a very hard time getting Hadoop to build 
out of the box (I think I need to track down a protobuf dependency).

That said, I think bumping the dependency is probably pretty low risk (also, 
this JAPI checker chart I found might help in evaluating risk: 
http://upstream-tracker.org/java/versions/guava.html).

> HDFS dangerously uses @Beta methods from very old versions of Guava
> -------------------------------------------------------------------
>
>                 Key: HDFS-7040
>                 URL: https://issues.apache.org/jira/browse/HDFS-7040
>             Project: Hadoop HDFS
>          Issue Type: Bug
>    Affects Versions: 2.4.0, 2.5.0, 2.4.1
>            Reporter: Christopher Tubbs
>              Labels: beta, deprecated, guava
>         Attachments: 0001-HDFS-7040-Avoid-beta-LimitInputStream-in-Guava.patch
>
>
> HDFS uses LimitInputStream from Guava. This was introduced as @Beta and is 
> risky for any application to use.
> The problem is further exacerbated by Hadoop's dependency on Guava version 
> 11.0.2, which is quite old for an active project (Feb. 2012).
> Because Guava is very stable, projects which depend on Hadoop and use Guava 
> themselves, can use up through Guava version 14.x
> However, in version 14, Guava deprecated LimitInputStream and provided a 
> replacement. Because they make no guarantees about compatibility about @Beta 
> classes, they removed it in version 15.
> What should be done: Hadoop should updated its dependency on Guava to at 
> least version 14 (currently Guava is on version 19). This should have little 
> impact on users, because Guava is so stable.
> HDFS should then be patched to use the provided alternative to 
> LimitInputStream, so that downstream packagers, users, and application 
> developers requiring more recent versions of Guava (to fix bugs, to use new 
> features, etc.) will be able to swap out the Guava dependency without 
> breaking Hadoop.
> Alternative: While Hadoop cannot predict the marking and removal of 
> deprecated code, it can, and should, avoid the use of @Beta classes and 
> methods that do not offer guarantees. If the dependency cannot be bumped, 
> then it should be relatively trivial to provide an internal class with the 
> same functionality, that does not rely on the older version of Guava.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to