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

Uwe Schindler commented on HADOOP-14586:
----------------------------------------

bq. Hey Uwe Schindler can we just replace substring().compareTo() with 
startsWith()? This will leave the semantics equivalent and should get rid of 
IndexOutOfBoundsException for Java 9.

Sorry, no! The semantics are different! A simple {{startsWith}} would limit 
{{true}} to Java 7, Java 8 would result in {{false}}. The compareTo in the 
original code uses {{>= 0}}. T correct fix is much easier: Replace the whole 
line by {{true}} as I did in my patch. It can never get false, because the 
minimum Java version for compiling Hadoop 2.7 is Java 7, so it's true whatever 
happens (unless it breaks with Java 9, as it does without a fix).

>  org.apache.hadoop.util.Shell in 2.7 breaks <clinit> on Java 9 RC build; 
> backport HADOOP-10775 to 2.7.x
> -------------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-14586
>                 URL: https://issues.apache.org/jira/browse/HADOOP-14586
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: common
>    Affects Versions: 2.7.2
>         Environment: Java 9, build 175 (Java 9 release candidate as of June 
> 25th, 2017)
>            Reporter: Uwe Schindler
>            Assignee: Akira Ajisaka
>            Priority: Minor
>              Labels: Java9
>         Attachments: HADOOP-14586-branch-2.7-01.patch, 
> HADOOP-14586-branch-2.7-02.patch
>
>
> You cannot use any pre-Hadoop 2.8 component anymore with the latest release 
> candidate build of Java 9, because it fails with an 
> StringIndexOutOfBoundsException in {{org.apache.hadoop.util.Shell#<clinit>}}. 
> This leads to a whole cascade of failing classes (next in chain is 
> StringUtils).
> The reason is that the release candidate build of Java 9 no longer has "-ea" 
> in the version string and the system property "java.version" is now simply 
> "9". This causes the following line to fail fatally:
> {code:java}
>   private static boolean IS_JAVA7_OR_ABOVE =
>       System.getProperty("java.version").substring(0, 3).compareTo("1.7") >= 
> 0;
> {code}
> Analysis:
> - This code looks wrong, as comparing a version this way is incorrect.
> - The {{substring(0, 3)}} is not needed, {{compareTo}} also works without it, 
> although it is still an invalid way to compare a version.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to