Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the default Java serialization to the performance comparisson #72

Merged
merged 1 commit into from
Jan 15, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class AkkaKryoCompressionTests extends FlatSpec {
}
}
serializers {
java = "akka.serialization.JavaSerializer"
kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
}

Expand Down Expand Up @@ -134,7 +135,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"boom" -> true,
"hash" -> HashMap[Int, Int](1 -> 200, 2 -> 300, 500 -> 3))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -152,7 +156,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"boom" -> true,
"hash" -> HashMap[Int, Int](1 -> 200, 2 -> 300, 500 -> 3))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -163,20 +170,23 @@ class AkkaKryoCompressionTests extends FlatSpec {
}

it should "serialize and deserialize mutable AnyRefMap[String,Any] successfully" in {
val r = new scala.util.Random(0L)
val tm = AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
if (systemName != "Java") {
val r = new scala.util.Random(0L)
val tm = AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])

val deserialized = serialization.deserialize(serialized.get, classOf[AnyRefMap[String, Any]])
assert(deserialized.isSuccess)
assert(deserialized.get == tm)
val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)

val deserialized = serialization.deserialize(serialized.get, classOf[AnyRefMap[String, Any]])
assert(deserialized.isSuccess)
assert(deserialized.get == tm)
}
}

it should "serialize and deserialize mutable HashMap[String,Any] successfully" in {
Expand All @@ -187,7 +197,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"boom" -> true,
"hash" -> HashMap[Int, Int](1 -> 200, 2 -> 300, 500 -> 3))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -201,7 +214,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize immutable HashSet[String] successfully" in {
val tm = scala.collection.immutable.HashSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -214,7 +230,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize immutable TreeSet[String] successfully" in {
val tm = scala.collection.immutable.TreeSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -227,7 +246,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize mutable HashSet[String] successfully" in {
val tm = scala.collection.mutable.HashSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -240,7 +262,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize mutable TreeSet[String] successfully" in {
val tm = scala.collection.mutable.TreeSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -262,7 +287,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -292,7 +320,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -325,7 +356,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
4L -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand All @@ -345,35 +379,37 @@ class AkkaKryoCompressionTests extends FlatSpec {
}

it should "serialize and deserialize Array[AnyRefMap[String,Any]] timings (with compression)" in {
val iterations = 500
val listLength = 500

val r = new scala.util.Random(0L)
val atm = (List.fill(listLength) {
AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)

val deserialized = serialization.deserialize(serialized.get, classOf[Array[AnyRefMap[String, Any]]])
assert(deserialized.isSuccess)

val bytes = serialized.get
println(s"Serialized to ${bytes.length} bytes")

timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
if (systemName != "Java") { // AnyRefMap can't be serialized by the Java serializer
val iterations = 500
val listLength = 500

val r = new scala.util.Random(0L)
val atm = (List.fill(listLength) {
AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)

val deserialized = serialization.deserialize(serialized.get, classOf[Array[AnyRefMap[String, Any]]])
assert(deserialized.isSuccess)

val bytes = serialized.get
println(s"Serialized to ${bytes.length} bytes")

timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
}
}

it should "serialize and deserialize Array[mutable.HashMap[String,Any]] timings (with compression)" in {
Expand All @@ -386,7 +422,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -419,7 +458,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
4L -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -447,7 +489,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand All @@ -474,7 +519,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -502,7 +550,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
)
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand All @@ -529,7 +580,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand All @@ -556,7 +610,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -584,7 +641,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
)
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -617,4 +677,34 @@ class AkkaKryoCompressionTests extends FlatSpec {
|akka.actor.kryo.encryption.aes.key = j68KkRjq21ykRGAQ
""".stripMargin)
testConfig("Off", "")
testConfig("Java",
"""akka.actor.serialization-bindings {
|"scala.Product" = java
|"akka.actor.ActorRef" = java
|"scala.collection.immutable.TreeMap" = java
|"[Lscala.collection.immutable.TreeMap;" = java
|"scala.collection.mutable.HashMap" = java
|"[Lscala.collection.mutable.HashMap;" = java
|"scala.collection.immutable.HashMap" = java
|"[Lscala.collection.immutable.HashMap;" = java
|"scala.collection.mutable.AnyRefMap" = java
|"[Lscala.collection.mutable.AnyRefMap;" = java
|"scala.collection.immutable.LongMap" = java
|"[Lscala.collection.immutable.LongMap;" = java
|"scala.collection.mutable.LongMap" = java
|"[Lscala.collection.mutable.LongMap;" = java
|"scala.collection.immutable.HashSet" = java
|"[Lscala.collection.immutable.HashSet;" = java
|"scala.collection.immutable.TreeSet" = java
|"[Lscala.collection.immutable.TreeSet;" = java
|"scala.collection.immutable.BitSet" = java
|"[Lscala.collection.immutable.BitSet;" = java
|"scala.collection.mutable.HashSet" = java
|"[Lscala.collection.mutable.HashSet;" = java
|"scala.collection.mutable.TreeSet" = java
|"[Lscala.collection.mutable.TreeSet;" = java
|"scala.collection.mutable.BitSet" = java
|"[Lscala.collection.mutable.BitSet;" = java
|}
|""".stripMargin)
}