Repository: flink
Updated Branches:
  refs/heads/master d5a6b13ab -> cd899f3be


[FLINK-2972] [JavaAPI] Remove Chill dependency from flink-java.

This closes #1331


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/cd899f3b
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/cd899f3b
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/cd899f3b

Branch: refs/heads/master
Commit: cd899f3be39c5f052a2a3e90771111d1a7df1d47
Parents: d5a6b13
Author: Fabian Hueske <fhue...@apache.org>
Authored: Tue Nov 3 16:57:49 2015 +0100
Committer: Fabian Hueske <fhue...@apache.org>
Committed: Mon Nov 30 20:31:42 2015 +0100

----------------------------------------------------------------------
 flink-core/pom.xml                              |  6 -----
 flink-java/pom.xml                              | 17 +++++++------
 .../typeutils/runtime/kryo/KryoSerializer.java  | 25 ++++++++++++++++++--
 flink-runtime/pom.xml                           | 12 ++++++++++
 flink-scala/pom.xml                             |  2 +-
 5 files changed, 46 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/cd899f3b/flink-core/pom.xml
----------------------------------------------------------------------
diff --git a/flink-core/pom.xml b/flink-core/pom.xml
index 6763011..f91608e 100644
--- a/flink-core/pom.xml
+++ b/flink-core/pom.xml
@@ -53,12 +53,6 @@ under the License.
                </dependency>
 
                <dependency>
-                       <groupId>com.twitter</groupId>
-                       <artifactId>chill_${scala.binary.version}</artifactId>
-                       <version>${chill.version}</version>
-               </dependency>
-
-               <dependency>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                        <version>${guava.version}</version>

http://git-wip-us.apache.org/repos/asf/flink/blob/cd899f3b/flink-java/pom.xml
----------------------------------------------------------------------
diff --git a/flink-java/pom.xml b/flink-java/pom.xml
index 4b8e24c..0b33de1 100644
--- a/flink-java/pom.xml
+++ b/flink-java/pom.xml
@@ -65,13 +65,7 @@ under the License.
 
                <dependency>
                        <groupId>com.twitter</groupId>
-                       <artifactId>chill_${scala.binary.version}</artifactId>
-                       <version>${chill.version}</version>
-               </dependency>
-
-               <dependency>
-                       <groupId>com.twitter</groupId>
-                       
<artifactId>chill-avro_${scala.binary.version}</artifactId>
+                       <artifactId>chill-java</artifactId>
                        <version>${chill.version}</version>
                </dependency>
 
@@ -110,6 +104,15 @@ under the License.
                        <type>test-jar</type>
                        <scope>test</scope>
                </dependency>
+
+               <dependency>
+                       <groupId>com.twitter</groupId>
+                       <artifactId>chill_${scala.binary.version}</artifactId>
+                       <version>${chill.version}</version>
+                       <!-- For execution, Chill is added to the classpath 
through flink-runtime. -->
+                       <scope>test</scope>
+               </dependency>
+               
        </dependencies>
 
        <!-- Because flink-scala and flink-avro uses it in tests -->

http://git-wip-us.apache.org/repos/asf/flink/blob/cd899f3b/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/kryo/KryoSerializer.java
----------------------------------------------------------------------
diff --git 
a/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/kryo/KryoSerializer.java
 
b/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/kryo/KryoSerializer.java
index 8549e26..b90901c 100644
--- 
a/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/kryo/KryoSerializer.java
+++ 
b/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/kryo/KryoSerializer.java
@@ -26,7 +26,6 @@ import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 import com.esotericsoftware.kryo.serializers.JavaSerializer;
 import com.google.common.base.Preconditions;
-import com.twitter.chill.ScalaKryoInstantiator;
 
 import org.apache.avro.generic.GenericData;
 import org.apache.flink.api.common.ExecutionConfig;
@@ -42,6 +41,8 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.EOFException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -281,9 +282,29 @@ public class KryoSerializer<T> extends TypeSerializer<T> {
 
        // 
--------------------------------------------------------------------------------------------
 
+       private Kryo getKryoInstance() {
+
+               try {
+                       // check if ScalaKryoInstantiator is in class path 
(coming from Twitter's Chill library).
+                       // This will be true if Flink's Scala API is used.
+                       Class<?> chillInstantiatorClazz = 
Class.forName("com.twitter.chill.ScalaKryoInstantiator");
+                       Object chillInstantiator = 
chillInstantiatorClazz.newInstance();
+
+                       // obtain a Kryo instance through Twitter Chill
+                       Method m = chillInstantiatorClazz.getMethod("newKryo");
+                       return (Kryo) m.invoke(chillInstantiator);
+               }
+               catch(ClassNotFoundException | InstantiationException | 
NoSuchMethodException |
+                               IllegalAccessException | 
InvocationTargetException e ) {
+
+                       // Chill must be in the classpath. It is added as a 
dependency to flink-runtime.
+                       throw new RuntimeException("Could not instantiate Kryo 
instance from Chill.", e);
+               }
+       }
+
        private void checkKryoInitialized() {
                if (this.kryo == null) {
-                       this.kryo = new ScalaKryoInstantiator().newKryo();
+                       this.kryo = getKryoInstance();
 
                        // Throwable and all subclasses should be serialized 
via java serialization
                        kryo.addDefaultSerializer(Throwable.class, new 
JavaSerializer());

http://git-wip-us.apache.org/repos/asf/flink/blob/cd899f3b/flink-runtime/pom.xml
----------------------------------------------------------------------
diff --git a/flink-runtime/pom.xml b/flink-runtime/pom.xml
index a1e0f75..c3093da 100644
--- a/flink-runtime/pom.xml
+++ b/flink-runtime/pom.xml
@@ -180,6 +180,18 @@ under the License.
                        <artifactId>zookeeper</artifactId>
                </dependency>
 
+               <!--
+               The KryoSerializer dynamically loads Kryo instances via Chill 
and requires that Chill
+               is in the classpath. Because we do not want to have transitive 
Scala dependencies
+               in Flink's API modules (such as flink-java) due to Chill, Chill 
is added to flink-runtime
+               to ensure that Chill is always present in the classpath.
+               -->
+               <dependency>
+                       <groupId>com.twitter</groupId>
+                       <artifactId>chill_${scala.binary.version}</artifactId>
+                       <version>${chill.version}</version>
+               </dependency>
+
                <dependency>
                        <groupId>org.apache.flink</groupId>
                        <artifactId>flink-shaded-curator-recipes</artifactId>

http://git-wip-us.apache.org/repos/asf/flink/blob/cd899f3b/flink-scala/pom.xml
----------------------------------------------------------------------
diff --git a/flink-scala/pom.xml b/flink-scala/pom.xml
index 32b5948..d30dad6 100644
--- a/flink-scala/pom.xml
+++ b/flink-scala/pom.xml
@@ -69,7 +69,7 @@ under the License.
                <dependency>
                        <groupId>org.ow2.asm</groupId>
                        <artifactId>asm</artifactId>
-            <version>${asm.version}</version>
+                       <version>${asm.version}</version>
                </dependency>
                
                <dependency>

Reply via email to