diff --git a/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRefSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRefSpec.scala index 4bef71a74d..f11b762493 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRefSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRefSpec.scala @@ -334,7 +334,7 @@ class ActorRefSpec extends WordSpec with MustMatchers { val ref = Actor.actorOf( new Actor { def receive = { case _ ⇒ } - override def preRestart(reason: Throwable) = latch.countDown() + override def preRestart(reason: Throwable, msg: Option[Any]) = latch.countDown() override def postRestart(reason: Throwable) = latch.countDown() }).start() diff --git a/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRestartSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRestartSpec.scala index cdff70c461..d2b9a42ee5 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRestartSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/actor/ActorRestartSpec.scala @@ -36,7 +36,7 @@ object ActorRestartSpec { case "get" ⇒ self reply xx } override def preStart { testActor ! (("preStart", gen)) } - override def preRestart(cause: Throwable) { testActor ! (("preRestart", gen)) } + override def preRestart(cause: Throwable, msg: Option[Any]) { testActor ! (("preRestart", msg, gen)) } override def postRestart(cause: Throwable) { testActor ! (("postRestart", gen)) } override def freshInstance() = { restart match { @@ -94,7 +94,7 @@ class ActorRestartSpec extends WordSpec with MustMatchers with TestKit with Befo supervisor link actor actor ! Kill within(1 second) { - expectMsg(("preRestart", 1)) + expectMsg(("preRestart", Some(Kill), 1)) expectMsg(("preStart", 2)) expectMsg(("postRestart", 2)) expectNoMsg @@ -109,7 +109,7 @@ class ActorRestartSpec extends WordSpec with MustMatchers with TestKit with Befo actor ! Nested actor ! Kill within(1 second) { - expectMsg(("preRestart", 1)) + expectMsg(("preRestart", Some(Kill), 1)) val (tActor, tRef) = expectMsgType[(Actor, TestActorRef[Actor])] tRef.underlyingActor must be(tActor) expectMsg((tActor, tRef)) @@ -129,7 +129,7 @@ class ActorRestartSpec extends WordSpec with MustMatchers with TestKit with Befo actor ! Handover actor ! Kill within(1 second) { - expectMsg(("preRestart", 1)) + expectMsg(("preRestart", Some(Kill), 1)) expectMsg(("preStart", 2)) expectMsg(("postRestart", 2)) expectNoMsg @@ -147,7 +147,7 @@ class ActorRestartSpec extends WordSpec with MustMatchers with TestKit with Befo actor ! Fail actor ! Kill within(1 second) { - expectMsg(("preRestart", 1)) + expectMsg(("preRestart", Some(Kill), 1)) expectMsg(("preStart", 2)) expectMsg(("postRestart", 2)) expectNoMsg @@ -156,22 +156,6 @@ class ActorRestartSpec extends WordSpec with MustMatchers with TestKit with Befo expectMsg(1 second, 0) } - "call preRestart(cause, currentMessage) if defined" in { - val actor = newActor(new Actor { - def receive = { case _ ⇒ } - override def preRestart(cause: Throwable, currentMessage: Option[Any]) { - testActor ! (("preRestart", currentMessage)) - } - }) - val supervisor = newActor(new Supervisor) - supervisor link actor - actor ! Kill - within(1 second) { - expectMsg(("preRestart", Some(Kill))) - expectNoMsg - } - } - } } diff --git a/akka-actor-tests/src/test/scala/akka/actor/actor/FSMTransitionSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/actor/FSMTransitionSpec.scala index 0cbaddd8e6..1eba7a71c1 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/actor/FSMTransitionSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/actor/FSMTransitionSpec.scala @@ -32,7 +32,7 @@ object FSMTransitionSpec { case Ev("reply") ⇒ stay replying "reply" } initialize - override def preRestart(reason: Throwable) { target ! "restarted" } + override def preRestart(reason: Throwable, msg: Option[Any]) { target ! "restarted" } } class Forwarder(target: ActorRef) extends Actor { diff --git a/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorTreeSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorTreeSpec.scala index d8aaa9d0e4..85b41c777c 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorTreeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorTreeSpec.scala @@ -25,7 +25,7 @@ class SupervisorTreeSpec extends WordSpec with MustMatchers { case Die ⇒ throw new Exception(self.address + " is dying...") } - override def preRestart(reason: Throwable) { + override def preRestart(reason: Throwable, msg: Option[Any]) { log += self.address } } diff --git a/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala b/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala index 0a70058c7b..41019fc0a8 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala @@ -59,7 +59,7 @@ object Ticket669Spec { case msg ⇒ throw new Exception("test") } - override def preRestart(reason: scala.Throwable) { + override def preRestart(reason: scala.Throwable, msg: Option[Any]) { self.reply_?("failure1") } diff --git a/akka-actor/src/main/scala/akka/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala index bb4bb47327..fecd776ca1 100644 --- a/akka-actor/src/main/scala/akka/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -659,19 +659,9 @@ trait Actor { * User overridable callback. *
* Is called on a crashed Actor right BEFORE it is restarted to allow clean - * up of resources before Actor is terminated. Override either the variant - * with or without the currentMessage argument. + * up of resources before Actor is terminated. */ - def preRestart(reason: Throwable) {} - - /** - * User overridable callback. - * - * Is called on a crashed Actor right BEFORE it is restarted to allow clean - * up of resources before Actor is terminated. Override either the variant - * with or without the currentMessage argument. - */ - def preRestart(reason: Throwable, message: Option[Any]) { preRestart(reason) } + def preRestart(reason: Throwable, message: Option[Any]) {} /** * User overridable callback. diff --git a/akka-actor/src/main/scala/akka/actor/UntypedActor.scala b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala index d561ce6221..fa546b2437 100644 --- a/akka-actor/src/main/scala/akka/actor/UntypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala @@ -102,7 +102,7 @@ abstract class UntypedActor extends Actor { * * Is called on a crashed Actor right BEFORE it is restarted to allow clean up of resources before Actor is terminated. */ - override def preRestart(reason: Throwable) {} + override def preRestart(reason: Throwable, lastMessage: Option[Any]) {} /** * User overridable callback. diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index 041f3397ff..9ad6ce22d2 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -58,7 +58,7 @@ trait ProducerSupport { this: Actor ⇒ * Default implementation ofActor.preRestart for freeing resources needed
* to actually send messages to endpointUri.
*/
- override def preRestart(reason: Throwable) {
+ override def preRestart(reason: Throwable, msg: Option[Any]) {
try { preRestartProducer(reason) } finally { processor.stop }
}
diff --git a/akka-camel/src/test/scala/akka/camel/ConsumerScalaTest.scala b/akka-camel/src/test/scala/akka/camel/ConsumerScalaTest.scala
index d80e847efa..27bbc264d7 100644
--- a/akka-camel/src/test/scala/akka/camel/ConsumerScalaTest.scala
+++ b/akka-camel/src/test/scala/akka/camel/ConsumerScalaTest.scala
@@ -254,7 +254,7 @@ object ConsumerScalaTest {
case "succeed" ⇒ self.reply("ok")
}
- override def preRestart(reason: scala.Throwable) {
+ override def preRestart(reason: scala.Throwable, msg: Option[Any]) {
self.reply_?("pr")
}
diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala
index 48c77ce7db..afab58547a 100644
--- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala
+++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala
@@ -1606,7 +1606,7 @@ class RemoteClusterDaemon(cluster: ClusterNode) extends Actor {
self.dispatcher = Dispatchers.newPinnedDispatcher(self)
- override def preRestart(reason: Throwable) {
+ override def preRestart(reason: Throwable, msg: Option[Any]) {
EventHandler.debug(this, "RemoteClusterDaemon failed due to [%s] restarting...".format(reason))
}
diff --git a/akka-docs/project/migration-guide-1.1.x-1.2.x.rst b/akka-docs/project/migration-guide-1.1.x-1.2.x.rst
new file mode 100644
index 0000000000..e4988b9460
--- /dev/null
+++ b/akka-docs/project/migration-guide-1.1.x-1.2.x.rst
@@ -0,0 +1,6 @@
+.. _migration-1.2:
+
+################################
+ Migration Guide 1.1.x to 1.2.x
+################################
+
diff --git a/akka-docs/project/migration-guide-1.2.x-2.0.x.rst b/akka-docs/project/migration-guide-1.2.x-2.0.x.rst
new file mode 100644
index 0000000000..7eabcf2f10
--- /dev/null
+++ b/akka-docs/project/migration-guide-1.2.x-2.0.x.rst
@@ -0,0 +1,20 @@
+.. _migration-2.0:
+
+################################
+ Migration Guide 1.2.x to 2.0.x
+################################
+
+Actors
+======
+
+The 2.0 release contains several new features which require source-level
+changes in client code. This API cleanup is planned to be the last one for a
+significant amount of time.
+
+Lifecycle Callbacks
+-------------------
+
+The :meth:`preRestart(cause: Throwable)` method has been replaced by
+:meth:`preRestart(cause: Throwable, lastMessage: Any)`, hence you must insert
+the second argument in all overriding methods. The good news is that any missed
+actor will not compile without error.
diff --git a/akka-docs/project/migration-guides.rst b/akka-docs/project/migration-guides.rst
index 7eb063811c..7af815f241 100644
--- a/akka-docs/project/migration-guides.rst
+++ b/akka-docs/project/migration-guides.rst
@@ -6,6 +6,8 @@ Migration Guides
.. toctree::
:maxdepth: 1
+ migration-guide-1.2.x-2.0.x
+ migration-guide-1.1.x-1.2.x
migration-guide-1.0.x-1.1.x
migration-guide-0.10.x-1.0.x
migration-guide-0.9.x-0.10.x
diff --git a/akka-spring/src/test/java/akka/spring/RemoteTypedActorOneImpl.java b/akka-spring/src/test/java/akka/spring/RemoteTypedActorOneImpl.java
index c7ad0f3de6..f6ab0e56e7 100644
--- a/akka-spring/src/test/java/akka/spring/RemoteTypedActorOneImpl.java
+++ b/akka-spring/src/test/java/akka/spring/RemoteTypedActorOneImpl.java
@@ -2,6 +2,8 @@ package akka.spring;
import akka.actor.*;
+import scala.Option;
+
import java.util.concurrent.CountDownLatch;
public class RemoteTypedActorOneImpl extends TypedActor implements RemoteTypedActorOne {
@@ -22,7 +24,7 @@ public class RemoteTypedActorOneImpl extends TypedActor implements RemoteTypedAc
}
@Override
- public void preRestart(Throwable e) {
+ public void preRestart(Throwable e, Option