diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala index b94936ce84..024311b730 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala @@ -243,7 +243,7 @@ object SupervisorHierarchySpec { if (failed || suspended) { listener ! ErrorLog("not resumed (" + failed + ", " + suspended + ")", log) val state = stateCache.get(self) - stateCache.put(self.path, state.copy(log = log)) + if (state ne null) stateCache.put(self.path, state.copy(log = log)) } else { stateCache.put(self.path, HierarchyState(log, Map(), null)) } diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/sysmsg/SystemMessageListSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/sysmsg/SystemMessageListSpec.scala index a7059cb748..101b1fe35c 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/sysmsg/SystemMessageListSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/sysmsg/SystemMessageListSpec.scala @@ -18,9 +18,9 @@ class SystemMessageListSpec extends AkkaSpec { } "able to append messages" in { - val create0 = Create(0) - val create1 = Create(1) - val create2 = Create(2) + val create0 = Failed(null, null, 0) + val create1 = Failed(null, null, 1) + val create2 = Failed(null, null, 2) ((create0 :: LNil).head eq create0) must be(true) ((create1 :: create0 :: LNil).head eq create1) must be(true) ((create2 :: create1 :: create0 :: LNil).head eq create2) must be(true) @@ -31,9 +31,9 @@ class SystemMessageListSpec extends AkkaSpec { } "able to deconstruct head and tail" in { - val create0 = Create(0) - val create1 = Create(1) - val create2 = Create(2) + val create0 = Failed(null, null, 0) + val create1 = Failed(null, null, 1) + val create2 = Failed(null, null, 2) val list = create2 :: create1 :: create0 :: LNil (list.head eq create2) must be(true) @@ -43,9 +43,9 @@ class SystemMessageListSpec extends AkkaSpec { } "properly report size and emptyness" in { - val create0 = Create(0) - val create1 = Create(1) - val create2 = Create(2) + val create0 = Failed(null, null, 0) + val create1 = Failed(null, null, 1) + val create2 = Failed(null, null, 2) val list = create2 :: create1 :: create0 :: LNil list.size must be === 3 @@ -63,9 +63,9 @@ class SystemMessageListSpec extends AkkaSpec { } "properly reverse contents" in { - val create0 = Create(0) - val create1 = Create(1) - val create2 = Create(2) + val create0 = Failed(null, null, 0) + val create1 = Failed(null, null, 1) + val create2 = Failed(null, null, 2) val list = create2 :: create1 :: create0 :: LNil val listRev: EarliestFirstSystemMessageList = list.reverse @@ -87,12 +87,12 @@ class SystemMessageListSpec extends AkkaSpec { "EarliestFirstSystemMessageList" must { "properly prepend reversed message lists to the front" in { - val create0 = Create(0) - val create1 = Create(1) - val create2 = Create(2) - val create3 = Create(3) - val create4 = Create(4) - val create5 = Create(5) + val create0 = Failed(null, null, 0) + val create1 = Failed(null, null, 1) + val create2 = Failed(null, null, 2) + val create3 = Failed(null, null, 3) + val create4 = Failed(null, null, 4) + val create5 = Failed(null, null, 5) val fwdList = create3 :: create4 :: create5 :: ENil val revList = create2 :: create1 :: create0 :: LNil 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 26c551e8be..5b4ee232c0 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala @@ -333,7 +333,7 @@ class SerializationCompatibilitySpec extends AkkaSpec(SerializationTests.mostlyR String.valueOf(encodeHex(ser.serialize(obj, obj.getClass).get)) must be(asExpected) "be preserved for the Create SystemMessage" in { - verify(Create(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e0001787073720014616b6b612e64697370617463682e437265617465000000000000000302000078707671007e0003") + verify(Create(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e437265617465bcdf9f7f2675038d02000078707671007e0003") } "be preserved for the Recreate SystemMessage" in { verify(Recreate(null), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001d616b6b612e64697370617463682e7379736d73672e52656372656174650987c65c8d378a800200014c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b7870707671007e0003") @@ -348,7 +348,7 @@ class SerializationCompatibilitySpec extends AkkaSpec(SerializationTests.mostlyR verify(Terminate(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001e616b6b612e64697370617463682e7379736d73672e5465726d696e61746509d66ca68318700f02000078707671007e0003") } "be preserved for the Supervise SystemMessage" in { - verify(Supervise(FakeActorRef("child"), true), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e0001787073720017616b6b612e64697370617463682e53757065727669736500000000000000030200025a00056173796e634c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b7870017372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f725265660d0aa2ca1e82097602000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003") + verify(Supervise(FakeActorRef("child"), true), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001e616b6b612e64697370617463682e7379736d73672e5375706572766973652d0b363f56ab5feb0200025a00056173796e634c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b7870017372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566db6eaed9e69a356302000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003") } "be preserved for the ChildTerminated SystemMessage" in { verify(ChildTerminated(FakeActorRef("child")), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e0001787073720024616b6b612e64697370617463682e7379736d73672e4368696c645465726d696e617465644c84222437ed5db40200014c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b78707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566db6eaed9e69a356302000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003") diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index 649db7cd02..efd968951e 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -8,22 +8,16 @@ import akka.actor.dungeon.ChildrenContainer import akka.dispatch.Envelope import akka.dispatch.NullMessage import akka.dispatch.sysmsg._ -import akka.event.Logging.Debug -import akka.event.Logging.{ LogEvent, Error } +import akka.dispatch.sysmsg.{ Watch, Unwatch, Terminate, SystemMessage, Suspend, Supervise, Resume, Recreate, NoMessage, Create, ChildTerminated } +import akka.event.Logging.{ LogEvent, Debug, Error } import akka.japi.Procedure import java.io.{ ObjectOutputStream, NotSerializableException } import scala.annotation.{ switch, tailrec } import scala.collection.immutable import scala.concurrent.ExecutionContext import scala.concurrent.duration.Duration +import scala.concurrent.forkjoin.ThreadLocalRandom import scala.util.control.NonFatal -import akka.actor.dungeon.ChildrenContainer -import akka.actor.dungeon.ChildrenContainer.WaitingForChildren -import akka.dispatch.{ Watch, Unwatch, Terminate, SystemMessage, Suspend, Supervise, Resume, Recreate, NoMessage, MessageDispatcher, Envelope, Create, ChildTerminated } -import akka.event.Logging.{ LogEvent, Debug, Error } -import akka.japi.Procedure -import akka.dispatch.NullMessage -import scala.concurrent.ExecutionContext /** * The actor context - the view of the actor cell from the actor. @@ -430,14 +424,14 @@ private[akka] class ActorCell( message match { case message: SystemMessage if shouldStash(message, currentState) ⇒ stash(message) case f: Failed ⇒ handleFailure(f) - case Create() ⇒ create(uid) + case Create() ⇒ create() case Watch(watchee, watcher) ⇒ addWatcher(watchee, watcher) case Unwatch(watchee, watcher) ⇒ remWatcher(watchee, watcher) case Recreate(cause) ⇒ faultRecreate(cause) case Suspend() ⇒ faultSuspend() case Resume(inRespToFailure) ⇒ faultResume(inRespToFailure) case Terminate() ⇒ terminate() - case Supervise(child, async) ⇒ supervise(child, async, uid) + case Supervise(child, async) ⇒ supervise(child, async) case ChildTerminated(child) ⇒ handleChildTerminated(child) case NoMessage ⇒ // only here to suppress warning } diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index 4a01b87f95..11f36cfc22 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -397,7 +397,7 @@ class LocalActorRefProvider private[akka] ( override def sendSystemMessage(message: SystemMessage): Unit = stopped ifOff { message match { case Failed(child, ex, _) ⇒ { causeOfTermination = Some(ex); child.asInstanceOf[InternalActorRef].stop() } - case Supervise(_, _) ⇒ // TODO register child in some map to keep track of it and enable shutdown after all dead + case Supervise(_, _) ⇒ // TODO register child in some map to keep track of it and enable shutdown after all dead case ChildTerminated(_) ⇒ stop() case _ ⇒ log.error(this + " received unexpected system message [" + message + "]") } diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala b/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala index 4235330b7e..b6b1880bbe 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala @@ -54,7 +54,7 @@ private[akka] trait Dispatch { this: ActorCell ⇒ if (sendSupervise) { // ➡➡➡ NEVER SEND THE SAME SYSTEM MESSAGE OBJECT TO TWO ACTORS ⬅⬅⬅ - parent.sendSystemMessage(akka.dispatch.sysmsg.Supervise(self, async = false, uid)) + parent.sendSystemMessage(akka.dispatch.sysmsg.Supervise(self, async = false)) parent ! NullMessage // read ScalaDoc of NullMessage to see why } this 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 a62dd03141..7f043ebd3d 100644 --- a/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala +++ b/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala @@ -201,7 +201,7 @@ trait StashWhenFailed * INTERNAL API */ @SerialVersionUID(-4836972106317757555L) -private[akka] case class Create(uid: Int) extends SystemMessage // send to self from Dispatcher.register +private[akka] case class Create() extends SystemMessage // send to self from Dispatcher.register /** * INTERNAL API */ @@ -226,7 +226,7 @@ private[akka] case class Terminate() extends SystemMessage // sent to self from * INTERNAL API */ @SerialVersionUID(3245747602115485675L) -private[akka] case class Supervise(child: ActorRef, async: Boolean, uid: Int) extends SystemMessage // sent to supervisor ActorRef from ActorCell.start +private[akka] case class Supervise(child: ActorRef, async: Boolean) extends SystemMessage // sent to supervisor ActorRef from ActorCell.start /** * INTERNAL API */