From 382a8d14a31b5bc6a581c4f9f29258dbf23cf4b4 Mon Sep 17 00:00:00 2001 From: Alex Chermenin Date: Wed, 24 Aug 2016 22:10:25 +0300 Subject: [PATCH 1/2] Upgrade to Kryo 4.0.0 --- build.sbt | 2 +- ...stSerializer.scala => ClassTagSerializer.scala} | 14 ++++++++------ .../com/twitter/chill/ManifestSerializer.scala | 2 +- .../com/twitter/chill/ScalaKryoInstantiator.scala | 3 ++- .../com/twitter/chill/WrappedArraySerializer.scala | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) rename chill-scala/src/main/scala/com/twitter/chill/{ClassManifestSerializer.scala => ClassTagSerializer.scala} (61%) diff --git a/build.sbt b/build.sbt index 849dc07f..0bec6d64 100644 --- a/build.sbt +++ b/build.sbt @@ -5,7 +5,7 @@ import com.typesafe.tools.mima.plugin.MimaPlugin.mimaDefaultSettings import scala.collection.JavaConverters._ import scalariform.formatter.preferences._ -val kryoVersion = "3.0.3" +val kryoVersion = "4.0.0" val bijectionVersion = "0.9.0" val algebirdVersion = "0.12.0" diff --git a/chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/ClassTagSerializer.scala similarity index 61% rename from chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala rename to chill-scala/src/main/scala/com/twitter/chill/ClassTagSerializer.scala index 4905aba2..600f976c 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/ClassTagSerializer.scala @@ -16,14 +16,16 @@ limitations under the License. package com.twitter.chill -class ClassManifestSerializer[T] extends KSerializer[ClassManifest[T]] { +import scala.reflect.ClassTag - def write(kser: Kryo, out: Output, obj: ClassManifest[T]) { - kser.writeObject(out, obj.erasure) +class ClassTagSerializer[T] extends KSerializer[ClassTag[T]] { + + def write(kser: Kryo, out: Output, obj: ClassTag[T]) { + kser.writeObject(out, obj.runtimeClass) } - def read(kser: Kryo, in: Input, cls: Class[ClassManifest[T]]): ClassManifest[T] = { - val clazz = kser.readObject(in, classOf[Class[T]]).asInstanceOf[Class[T]] - ClassManifest.fromClass[T](clazz) + def read(kser: Kryo, in: Input, cls: Class[ClassTag[T]]): ClassTag[T] = { + val clazz = kser.readObject(in, classOf[Class[T]]) + ClassTag(clazz) } } diff --git a/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala index 2d061e8a..4f1e3f34 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala @@ -32,7 +32,7 @@ class ManifestSerializer[T] extends KSerializer[Manifest[T]] { out.writeInt(idxOpt.get + 1, true) } else { out.writeInt(0, true) - kser.writeObject(out, obj.erasure) + kser.writeObject(out, obj.runtimeClass) //write the type arguments: val targs = obj.typeArguments out.writeInt(targs.size, true) diff --git a/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala b/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala index dbbc7818..fd0c4638 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala @@ -47,6 +47,7 @@ import com.twitter.chill.java.PackageRegistrar import _root_.java.io.Serializable import scala.collection.JavaConverters._ +import scala.reflect.ClassTag /** * This class has a no-arg constructor, suitable for use with reflection instantiation @@ -193,7 +194,7 @@ class AllScalaRegistrar extends IKryoRegistrar { def read(k: Kryo, in: Input, cls: Class[Symbol]) = Symbol(in.readString) }) .forSubclass[Regex](new RegexSerializer) - .forClass[ClassManifest[Any]](new ClassManifestSerializer[Any]) + .forClass[ClassTag[Any]](new ClassTagSerializer[Any]) .forSubclass[Manifest[Any]](new ManifestSerializer[Any]) .forSubclass[scala.Enumeration#Value](new EnumerationSerializer) diff --git a/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala index 64ea56a2..20a2126b 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala @@ -25,7 +25,7 @@ class WrappedArraySerializer[T] extends KSerializer[WrappedArray[T]] { def write(kser: Kryo, out: Output, obj: WrappedArray[T]) { // Write the class-manifest, we don't use writeClass because it // uses the registration system, and this class might not be registered - kser.writeObject(out, obj.elemManifest.runtimeClass) + kser.writeObject(out, obj.elemTag.runtimeClass) kser.writeClassAndObject(out, obj.array) } From efdd9be7f5eb762e9f092f1165bdc73967f7b44a Mon Sep 17 00:00:00 2001 From: Alexander Chermenin Date: Thu, 25 Aug 2016 11:13:19 +0300 Subject: [PATCH 2/2] Restore ClassManifestSerializer. --- .../chill/ClassManifestSerializer.scala | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala diff --git a/chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala new file mode 100644 index 00000000..4905aba2 --- /dev/null +++ b/chill-scala/src/main/scala/com/twitter/chill/ClassManifestSerializer.scala @@ -0,0 +1,29 @@ +/* +Copyright 2012 Twitter, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.twitter.chill + +class ClassManifestSerializer[T] extends KSerializer[ClassManifest[T]] { + + def write(kser: Kryo, out: Output, obj: ClassManifest[T]) { + kser.writeObject(out, obj.erasure) + } + + def read(kser: Kryo, in: Input, cls: Class[ClassManifest[T]]): ClassManifest[T] = { + val clazz = kser.readObject(in, classOf[Class[T]]).asInstanceOf[Class[T]] + ClassManifest.fromClass[T](clazz) + } +}