diff --git a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala index 9ab451e677..fc196c3eaf 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala @@ -18,6 +18,7 @@ import com.google.protobuf.Message import com.typesafe.config._ import akka.pattern.ask import org.apache.commons.codec.binary.Hex.{ encodeHex, decodeHex } +import akka.OnlyCauseStackTrace object SerializationTests { @@ -329,38 +330,101 @@ class SerializationCompatibilitySpec extends AkkaSpec(SerializationTests.mostlyR "Cross-version serialization compatibility" must { def verify(obj: SystemMessage, asExpected: String): Unit = - String.valueOf(ser.serialize((obj, obj.getClass)).map(encodeHex).get) must be === asExpected + String.valueOf(ser.serialize(obj).map(encodeHex).get) must be === asExpected "be preserved for the Create SystemMessage" in { - verify(Create(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e437265617465bcdf9f7f2675038d02000078707671007e0003") + verify(Create(Some(FakeActorInitializationException(FakeActorRef("failure"), "failed"))), + "aced00057372001b616b6b612e64697370617463682e7379736d73672e4372656174650000000000" + + "0000010200014c00076661696c75726574000e4c7363616c612f4f7074696f6e3b78707372000a73" + + "63616c612e536f6d65e2a09f87fc0836ae0200014c0001787400124c6a6176612f6c616e672f4f62" + + "6a6563743b7872000c7363616c612e4f7074696f6ee36024a8328a45e9020000787073720033616b" + + "6b612e73657269616c697a6174696f6e2e46616b654163746f72496e697469616c697a6174696f6e" + + "457863657074696f6ea310e76a3232c9070200024c00056163746f727400154c616b6b612f616374" + + "6f722f4163746f725265663b4c00076d6573736167657400124c6a6176612f6c616e672f53747269" + + "6e673b78720027616b6b612e6163746f722e4163746f72496e697469616c697a6174696f6e457863" + + "657074696f6e00000000000000010200014c00056163746f7271007e000878720012616b6b612e41" + + "6b6b61457863657074696f6e00000000000000010200007872001a6a6176612e6c616e672e52756e" + + "74696d65457863657074696f6e9e5f06470a3483e5020000787200136a6176612e6c616e672e4578" + + "63657074696f6ed0fd1f3e1a3b1cc4020000787200136a6176612e6c616e672e5468726f7761626c" + + "65d5c635273977b8cb0300034c000563617573657400154c6a6176612f6c616e672f5468726f7761" + + "626c653b4c000d64657461696c4d65737361676571007e00095b000a737461636b54726163657400" + + "1e5b4c6a6176612f6c616e672f537461636b5472616365456c656d656e743b787070740006666169" + + "6c65647572001e5b4c6a6176612e6c616e672e537461636b5472616365456c656d656e743b02462a" + + "3c3cfd2239020000787000000000787372001f616b6b612e73657269616c697a6174696f6e2e4661" + + "6b654163746f7252656600000000000000010200014c00046e616d6571007e00097872001b616b6b" + + "612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f0200007872001361" + + "6b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400076661696c7572" + + "6571007e001871007e0012") } "be preserved for the Recreate SystemMessage" in { - verify(Recreate(null), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001d616b6b612e64697370617463682e7379736d73672e52656372656174650987c65c8d378a800200014c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b7870707671007e0003") + verify(Recreate(null), + "aced00057372001d616b6b612e64697370617463682e7379736d73672e5265637265617465000000" + + "00000000010200014c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b" + + "787070") } "be preserved for the Suspend SystemMessage" in { - verify(Suspend(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001c616b6b612e64697370617463682e7379736d73672e53757370656e6464e531d5d134b59902000078707671007e0003") + verify(Suspend(), + "aced00057372001c616b6b612e64697370617463682e7379736d73672e53757370656e6400000000" + + "000000010200007870") } "be preserved for the Resume SystemMessage" in { - verify(Resume(null), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e526573756d65dc5e646d445fcb010200014c000f63617573656442794661696c7572657400154c6a6176612f6c616e672f5468726f7761626c653b7870707671007e0003") + verify(Resume(null), + "aced00057372001b616b6b612e64697370617463682e7379736d73672e526573756d650000000000" + + "0000010200014c000f63617573656442794661696c7572657400154c6a6176612f6c616e672f5468" + + "726f7761626c653b787070") } "be preserved for the Terminate SystemMessage" in { - verify(Terminate(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001e616b6b612e64697370617463682e7379736d73672e5465726d696e61746509d66ca68318700f02000078707671007e0003") + verify(Terminate(), + "aced00057372001e616b6b612e64697370617463682e7379736d73672e5465726d696e6174650000" + + "0000000000010200007870") } "be preserved for the Supervise SystemMessage" in { - verify(Supervise(FakeActorRef("child"), true), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001e616b6b612e64697370617463682e7379736d73672e5375706572766973652d0b363f56ab5feb0200025a00056173796e634c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b7870017372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003") + verify(Supervise(FakeActorRef("child"), true), + "aced00057372001e616b6b612e64697370617463682e7379736d73672e5375706572766973650000" + + "0000000000010200025a00056173796e634c00056368696c647400154c616b6b612f6163746f722f" + + "4163746f725265663b7870017372001f616b6b612e73657269616c697a6174696f6e2e46616b6541" + + "63746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f53" + + "7472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c" + + "3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402" + + "000078707400056368696c64") } "be preserved for the Watch SystemMessage" in { - verify(Watch(FakeActorRef("watchee"), FakeActorRef("watcher")), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001a616b6b612e64697370617463682e7379736d73672e57617463682e1e65bc74394fc40200024c00077761746368656574001d4c616b6b612f6163746f722f496e7465726e616c4163746f725265663b4c00077761746368657271007e000478707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f46940200007870740007776174636865657371007e0006740007776174636865727671007e0003") + verify(Watch(FakeActorRef("watchee"), FakeActorRef("watcher")), + "aced00057372001a616b6b612e64697370617463682e7379736d73672e5761746368000000000000" + + "00010200024c00077761746368656574001d4c616b6b612f6163746f722f496e7465726e616c4163" + + "746f725265663b4c00077761746368657271007e000178707372001f616b6b612e73657269616c69" + + "7a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d65740012" + + "4c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e61" + + "6c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72" + + "526566c3585dde655f46940200007870740007776174636865657371007e00037400077761746368" + + "6572") } "be preserved for the Unwatch SystemMessage" in { - verify(Unwatch(FakeActorRef("watchee"), FakeActorRef("watcher")), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001c616b6b612e64697370617463682e7379736d73672e556e776174636858501f7ee63dc2100200024c0007776174636865657400154c616b6b612f6163746f722f4163746f725265663b4c00077761746368657271007e000478707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f46940200007870740007776174636865657371007e0006740007776174636865727671007e0003") + verify(Unwatch(FakeActorRef("watchee"), FakeActorRef("watcher")), + "aced00057372001c616b6b612e64697370617463682e7379736d73672e556e776174636800000000" + + "000000010200024c0007776174636865657400154c616b6b612f6163746f722f4163746f72526566" + + "3b4c00077761746368657271007e000178707372001f616b6b612e73657269616c697a6174696f6e" + + "2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f" + + "6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72" + + "526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585d" + + "de655f46940200007870740007776174636865657371007e000374000777617463686572") } "be preserved for the NoMessage SystemMessage" in { - verify(NoMessage, "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001f616b6b612e64697370617463682e7379736d73672e4e6f4d65737361676524b401a3610ccb70dd02000078707671007e0003") + verify(NoMessage, + "aced00057372001f616b6b612e64697370617463682e7379736d73672e4e6f4d6573736167652400" + + "000000000000010200007870") } "be preserved for the Failed SystemMessage" in { // Using null as the cause to avoid a large serialized message - verify(Failed(FakeActorRef("child"), cause = null, uid = 0), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e4661696c656400000000000000010200034900037569644c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b4c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b787000000000707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003") + verify(Failed(FakeActorRef("child"), cause = null, uid = 0), + "aced00057372001b616b6b612e64697370617463682e7379736d73672e4661696c65640000000000" + + "0000010200034900037569644c000563617573657400154c6a6176612f6c616e672f5468726f7761" + + "626c653b4c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b78700000" + + "0000707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f725265660000" + + "0000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b787200" + + "1b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078" + + "720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368" + + "696c64") } } } @@ -419,4 +483,6 @@ protected[akka] case class FakeActorRef(name: String) extends InternalActorRef w override def getChild(name: Iterator[String]) = ??? override def isLocal = ??? override def !(message: Any)(implicit sender: ActorRef = Actor.noSender) = ??? -} \ No newline at end of file +} + +protected[akka] case class FakeActorInitializationException(actor: ActorRef, message: String) extends ActorInitializationException(actor, message, null) with OnlyCauseStackTrace diff --git a/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala b/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala index 791890d46a..69cc1062f5 100644 --- a/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala +++ b/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala @@ -200,47 +200,47 @@ trait StashWhenFailed /** * INTERNAL API */ -@SerialVersionUID(-4836972106317757555L) +@SerialVersionUID(1L) private[akka] case class Create(failure: Option[ActorInitializationException]) extends SystemMessage // sent to self from Dispatcher.register /** * INTERNAL API */ -@SerialVersionUID(686735569005808256L) +@SerialVersionUID(1L) private[akka] case class Recreate(cause: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.restart /** * INTERNAL API */ -@SerialVersionUID(7270271967867221401L) +@SerialVersionUID(1L) private[akka] case class Suspend() extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.suspend /** * INTERNAL API */ -@SerialVersionUID(-2567504317093262591L) +@SerialVersionUID(1L) private[akka] case class Resume(causedByFailure: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.resume /** * INTERNAL API */ -@SerialVersionUID(708873453777219599L) +@SerialVersionUID(1L) private[akka] case class Terminate() extends SystemMessage // sent to self from ActorCell.stop /** * INTERNAL API */ -@SerialVersionUID(3245747602115485675L) +@SerialVersionUID(1L) private[akka] case class Supervise(child: ActorRef, async: Boolean) extends SystemMessage // sent to supervisor ActorRef from ActorCell.start /** * INTERNAL API */ -@SerialVersionUID(3323205435124174788L) +@SerialVersionUID(1L) private[akka] case class Watch(watchee: InternalActorRef, watcher: InternalActorRef) extends SystemMessage // sent to establish a DeathWatch /** * INTERNAL API */ -@SerialVersionUID(6363620903363658256L) +@SerialVersionUID(1L) private[akka] case class Unwatch(watchee: ActorRef, watcher: ActorRef) extends SystemMessage // sent to tear down a DeathWatch /** * INTERNAL API */ -@SerialVersionUID(-5475916034683997987L) +@SerialVersionUID(1L) private[akka] case object NoMessage extends SystemMessage // switched into the mailbox to signal termination /**