[ 
https://issues.apache.org/jira/browse/KUDU-2188?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Adar Dembo updated KUDU-2188:
-----------------------------
    Fix Version/s: 1.5.1

> kudu-client JAR built via JDK8 depends on Java 8 APIs
> -----------------------------------------------------
>
>                 Key: KUDU-2188
>                 URL: https://issues.apache.org/jira/browse/KUDU-2188
>             Project: Kudu
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.5.0
>            Reporter: Adar Dembo
>            Assignee: Adar Dembo
>            Priority: Critical
>             Fix For: 1.6.0, 1.5.1
>
>
> Even though we build our Java artifacts against JDK7 (by specifying 
> source=1.7 and target=1.7) and we try to avoid introducing Java 8 only 
> dependencies, there is one case where we've failed to do that. The issue is 
> with ConcurrentHashMap.keySet(), which returns a Set in Java 7 and a 
> ConcurrentHashMap.KeySetView in Java 8. The latter is a class that only 
> exists in Java 8, but because it's a subtype of Set, it's legal to make that 
> kind of API change.
> We use ConcurrentHashMap.keySet() in our Statistics.getTableSet() method, and 
> as a result, if you build kudu-client using JDK8, you'll end up with a 
> reference to a class that's only found in Java 8.
> I wrote a small test program to verify that this is indeed a problem:
> {noformat}
> import org.apache.kudu.client.Statistics;
> class Main {
>     public static void main(String[] args) {
>         Statistics s = new Statistics();
>         s.getTabletSet();
>     }
> }
> {noformat}
> And, after first building the kudu-client JAR with JDK8, here is how I 
> compiled and ran the test program:
> {noformat}
> $ /opt/toolchain/openjdk-64bit-1.7.0.6/bin/javac -cp 
> kudu/java/kudu-client/target/kudu-client-1.6.0-SNAPSHOT.jar Main.java
> $ /opt/toolchain/openjdk-64bit-1.7.0.6/bin/java -cp 
> kudu/java/kudu-client/target/kudu-client-1.6.0-SNAPSHOT.jar:. Main
> Exception in thread "main" java.lang.NoSuchMethodError: 
> java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
>     at org.apache.kudu.client.Statistics.getTabletSet(Statistics.java:144)
>     at Main.main(Main.java:6)
> {noformat}
> I don't know which of our release artifacts have this issue. This Statistics 
> API is quite old so it presumably affects any that have been built by RMs 
> using JDK8 rather than JDK7.



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

Reply via email to