From 84933c123493a72ab95c6bf99c12748df675fa44 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 21 Dec 2012 12:22:39 +0100 Subject: [PATCH 001/122] Allow allow-core-timeout=off conf of PinnedDispatcher, see #2856 --- .../src/main/scala/akka/dispatch/PinnedDispatcher.scala | 2 +- akka-docs/rst/java/dispatchers.rst | 9 +++++++++ akka-docs/rst/scala/dispatchers.rst | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala index eb5b2686c3..9cdff4b521 100644 --- a/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala @@ -26,7 +26,7 @@ class PinnedDispatcher( Int.MaxValue, Duration.Zero, _mailboxType, - _threadPoolConfig.copy(allowCorePoolTimeout = true, corePoolSize = 1, maxPoolSize = 1), + _threadPoolConfig.copy(corePoolSize = 1, maxPoolSize = 1), _shutdownTimeout) { @volatile diff --git a/akka-docs/rst/java/dispatchers.rst b/akka-docs/rst/java/dispatchers.rst index b25a1c33b0..0be567ea7f 100644 --- a/akka-docs/rst/java/dispatchers.rst +++ b/akka-docs/rst/java/dispatchers.rst @@ -123,6 +123,15 @@ And then using it: .. includecode:: ../java/code/docs/dispatcher/DispatcherDocTestBase.java#defining-pinned-dispatcher +Note that ``thread-pool-executor`` configuration as per the above ``my-thread-pool-dispatcher`` example is +NOT applicable. This is because every actor will have its own thread pool when using ``PinnedDispatcher``, +and that pool will have only one thread. + +Note that it's not guaranteed that the *same* thread is used over time, since the core pool timeout +is used for ``PinnedDispatcher`` to keep resource usage down in case of idle actors. To use the same +thread all the time you need to add ``thread-pool-executor.allow-core-timeout=off`` to the +configuration of the ``PinnedDispatcher``. + Mailboxes --------- diff --git a/akka-docs/rst/scala/dispatchers.rst b/akka-docs/rst/scala/dispatchers.rst index 68182af86e..3ca629b54c 100644 --- a/akka-docs/rst/scala/dispatchers.rst +++ b/akka-docs/rst/scala/dispatchers.rst @@ -129,6 +129,11 @@ Note that ``thread-pool-executor`` configuration as per the above ``my-thread-po NOT applicable. This is because every actor will have its own thread pool when using ``PinnedDispatcher``, and that pool will have only one thread. +Note that it's not guaranteed that the *same* thread is used over time, since the core pool timeout +is used for ``PinnedDispatcher`` to keep resource usage down in case of idle actors. To use the same +thread all the time you need to add ``thread-pool-executor.allow-core-timeout=off`` to the +configuration of the ``PinnedDispatcher``. + Mailboxes --------- From 0d185e297d3cf198937142d644801159504abfd9 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 21 Dec 2012 15:03:29 +0100 Subject: [PATCH 002/122] Check routees in a better way in ClusterRoundRobinRoutedActorSpec, see #2801 --- .../ClusterRoundRobinRoutedActorSpec.scala | 29 ++++++++++++++++--- .../transport/ThrottlerTransportAdapter.scala | 2 +- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala index 0098da695b..8a6ac1935f 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala @@ -110,6 +110,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou case a ⇒ a } + def currentRoutees(router: ActorRef) = + Await.result(router ? CurrentRoutees, remaining).asInstanceOf[RouterRoutees].routees + "A cluster router with a RoundRobin router" must { "start cluster with 2 nodes" taggedAs LongRunningTest in { awaitClusterUp(first, second) @@ -121,6 +124,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou runOn(first) { router1.isInstanceOf[RoutedActorRef] must be(true) + // max-nr-of-instances-per-node=2 times 2 nodes + awaitCond(currentRoutees(router1).size == 4) + val iterationCount = 10 for (i ← 0 until iterationCount) { router1 ! "hit" @@ -146,6 +152,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou enterBarrier("myservice-started") runOn(first) { + // 2 nodes, 1 routee on each node + awaitCond(currentRoutees(router4).size == 2) + val iterationCount = 10 for (i ← 0 until iterationCount) { router4 ! "hit" @@ -169,6 +178,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou awaitClusterUp(first, second, third, fourth) runOn(first) { + // max-nr-of-instances-per-node=2 times 4 nodes + awaitCond(currentRoutees(router1).size == 8) + val iterationCount = 10 for (i ← 0 until iterationCount) { router1 ! "hit" @@ -188,6 +200,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou // cluster consists of first, second, third and fourth runOn(first) { + // 4 nodes, 1 routee on each node + awaitCond(currentRoutees(router4).size == 4) + val iterationCount = 10 for (i ← 0 until iterationCount) { router4 ! "hit" @@ -205,6 +220,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou "deploy routees to only remote nodes when allow-local-routees = off" taggedAs LongRunningTest in { runOn(first) { + // max-nr-of-instances-per-node=1 times 3 nodes + awaitCond(currentRoutees(router3).size == 3) + val iterationCount = 10 for (i ← 0 until iterationCount) { router3 ! "hit" @@ -227,6 +245,9 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou runOn(first) { router2.isInstanceOf[RoutedActorRef] must be(true) + // totalInstances = 3, maxInstancesPerNode = 1 + awaitCond(currentRoutees(router2).size == 3) + val iterationCount = 10 for (i ← 0 until iterationCount) { router2 ! "hit" @@ -235,8 +256,8 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou val replies = receiveReplies(DeployRoutee, iterationCount) // note that router2 has totalInstances = 3, maxInstancesPerNode = 1 - val currentRoutees = Await.result(router2 ? CurrentRoutees, 5 seconds).asInstanceOf[RouterRoutees].routees - val routeeAddresses = currentRoutees map fullAddress + val routees = currentRoutees(router2) + val routeeAddresses = routees map fullAddress routeeAddresses.size must be(3) replies.values.sum must be(iterationCount) @@ -249,8 +270,8 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou muteMarkingAsUnreachable() runOn(first) { - def currentRoutees = Await.result(router2 ? CurrentRoutees, 5 seconds).asInstanceOf[RouterRoutees].routees - def routeeAddresses = (currentRoutees map fullAddress).toSet + def routees = currentRoutees(router2) + def routeeAddresses = (routees map fullAddress).toSet val notUsedAddress = ((roles map address).toSet -- routeeAddresses).head diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index c007b3d7d2..d76bbbf071 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -154,7 +154,7 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A wrappedTransport.associate(remoteAddress) onComplete { // Slight modification of pipe, only success is sent, failure is propagated to a separate future case Success(handle) ⇒ self ! (handle, statusPromise) - case Failure(e) ⇒ statusPromise.failure(e) + case Failure(e) ⇒ statusPromise.failure(e) } // Finished outbound association and got back the handle case (handle: AssociationHandle, statusPromise: Promise[AssociationHandle]) ⇒ From 5fff91f482a2d83ba5f1a7167f0fbb16826a2e91 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 26 Dec 2012 16:24:30 +0100 Subject: [PATCH 003/122] Turning off stacktraces for ConnectException, to cut down the noise in the logs --- .../scala/akka/remote/transport/netty/NettyTransport.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index 2f10dfb4f7..76236a9627 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -339,8 +339,8 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s case NonFatal(e) ⇒ Future.failed(e) }) onFailure { - case t: ConnectException ⇒ statusPromise failure new NettyTransportException(t.getMessage, t.getCause) - case t ⇒ statusPromise failure t + case t: ConnectException ⇒ statusPromise failure new NettyTransportException(t.getMessage, t.getCause) with NoStackTrace + case t ⇒ statusPromise failure t } statusPromise.future From d7f7076a94c50a6cf3203d2c6ccbc3de0e3ac205 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 26 Dec 2012 16:50:12 +0100 Subject: [PATCH 004/122] #2848 - Removing the UUID from AkkaException --- akka-actor/src/main/scala/akka/AkkaException.scala | 4 ---- 1 file changed, 4 deletions(-) diff --git a/akka-actor/src/main/scala/akka/AkkaException.scala b/akka-actor/src/main/scala/akka/AkkaException.scala index ae245e3591..f290c7e565 100644 --- a/akka-actor/src/main/scala/akka/AkkaException.scala +++ b/akka-actor/src/main/scala/akka/AkkaException.scala @@ -14,10 +14,6 @@ package akka @SerialVersionUID(1L) class AkkaException(message: String, cause: Throwable) extends RuntimeException(message, cause) with Serializable { def this(msg: String) = this(msg, null) - - lazy val uuid: String = java.util.UUID.randomUUID().toString - - override def toString(): String = uuid + super.toString() } /** From 51ed8b06b5fe0334c64705588fb83dd036937017 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 26 Dec 2012 17:00:58 +0100 Subject: [PATCH 005/122] Switching to ByteString in FSMDocSpec to get rid of warnings in pattern matching --- akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala b/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala index 15821419d4..49d51a19a4 100644 --- a/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala @@ -6,6 +6,8 @@ package docs.actor import language.postfixOps import akka.testkit.{ AkkaSpec ⇒ MyFavoriteTestFrameWorkPlusAkkaTestKit } +import akka.util.ByteString + //#test-code import akka.actor.Props import scala.collection.immutable @@ -129,8 +131,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit { //#transform-syntax when(SomeState)(transform { - case Event(bytes: Array[Byte], read) ⇒ stay using (read + bytes.length) - case Event(bytes: List[Byte], read) ⇒ stay using (read + bytes.size) + case Event(bytes: ByteString, read) ⇒ stay using (read + bytes.length) } using { case s @ FSM.State(state, read, timeout, stopReason, replies) if read > 1000 ⇒ goto(Processing) @@ -144,8 +145,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit { } when(SomeState)(transform { - case Event(bytes: Array[Byte], read) ⇒ stay using (read + bytes.length) - case Event(bytes: List[Byte], read) ⇒ stay using (read + bytes.size) + case Event(bytes: ByteString, read) ⇒ stay using (read + bytes.length) } using processingTrigger) //#alt-transform-syntax @@ -211,7 +211,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit { expectMsg(Batch(immutable.Seq(45))) } - "batch not if uninitialized" in { + "not batch if uninitialized" in { val buncher = system.actorOf(Props(new Buncher)) buncher ! Queue(42) expectNoMsg From 76f22ea42ab6dea8892b9b6ce62d70f8ee733e90 Mon Sep 17 00:00:00 2001 From: Christophe Pache Date: Fri, 28 Dec 2012 16:01:35 +0100 Subject: [PATCH 006/122] Let the ActorSystem find its configuration outside of the bundle, in the OSGi etc directory, following this order: etc/bundle-BUNDLE_SYMBOLIC_NAME.conf etc/bundle-BUNDLE_ID.conf etc/akka.conf akka-actor classpath config (using the original OsgiActorSystemFactory.actorSystemConfig method.) Configurations fallback from the most to the less specific one. For the moment, as I haven't found test on ActorSystem Configuration in OSGi, I did not add test for this feature. modified: akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala --- .../scala/akka/osgi/OsgiActorSystemFactory.scala | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala b/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala index 447719ef39..86c2f11c72 100644 --- a/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala +++ b/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala @@ -7,6 +7,7 @@ import impl.BundleDelegatingClassLoader import akka.actor.ActorSystem import com.typesafe.config.{ ConfigFactory, Config } import org.osgi.framework.BundleContext +import java.io.File /** * Factory class to create ActorSystem implementations in an OSGi environment. This mainly involves dealing with @@ -32,6 +33,21 @@ class OsgiActorSystemFactory(val context: BundleContext, val fallbackClassLoader def createActorSystem(name: Option[String]): ActorSystem = ActorSystem(actorSystemName(name), actorSystemConfig(context), classloader) + /** + * Strategy method to create the Config for the ActorSystem, based on configuration files found in etc directory, + * ensuring that the default/reference configuration is loaded from the akka-actor bundle. + * The configuration is based on + * File(etc/bundle-SYMBOLICNAME.conf) + * File(etc/bundle-ID.conf) + * File(etc/akka.conf) + * Configuration files found in akka-actor bundle + */ + def extendedActorSystemConfig(context: BundleContext): Config = { + val bunleNameAkkaConfig = ConfigFactory.parseFile(new File("etc/bundle-%s.conf" format context.getBundle.getSymbolicName)) + val bunleIDAkkaConfig = ConfigFactory.parseFile(new File("etc/bundle-%s.conf" format context.getBundle.getBundleId)) + val defaultAkkaConfig = ConfigFactory.parseFile(new File("etc/akka.conf")) + bunleNameAkkaConfig.withFallback(bunleIDAkkaConfig.withFallback(defaultAkkaConfig).withFallback(actorSystemConfig(context))) + } /** * Strategy method to create the Config for the ActorSystem, ensuring that the default/reference configuration is * loaded from the akka-actor bundle. From f492e643453732de95425808bc6a925a2a9fde3b Mon Sep 17 00:00:00 2001 From: Christophe Pache Date: Fri, 28 Dec 2012 17:20:41 +0100 Subject: [PATCH 007/122] Concerning akka in osgi: ActorRefProvider contains in akka-cluster or akka-remote bundle are not found by the akka-actor bundle, thus exposing those if required --- project/AkkaBuild.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 6bca2ff7c0..2674e1c111 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -641,7 +641,8 @@ object AkkaBuild extends Build { object OSGi { - val actor = exports(Seq("akka*")) + val actor = exports(Seq("akka*"), imports = Seq("akka.remote.*;resolution:=optional", "akka.cluster.*;resolution:=optional")) + val agent = exports(Seq("akka.agent.*")) From dad40d456a859beebc3ad7af9fe4474092013ffe Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Wed, 2 Jan 2013 17:03:19 +0100 Subject: [PATCH 008/122] Fix race in CircuitBreakerMTSpec, see #2823 --- .../akka/pattern/CircuitBreakerMTSpec.scala | 67 +++++++++---------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala index 34cb3d4ef8..a21dd6f22a 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala @@ -4,8 +4,9 @@ package akka.pattern import akka.testkit._ +import scala.collection.immutable import scala.concurrent.duration._ -import scala.concurrent.{ Promise, Future, Await } +import scala.concurrent.{ Future, Await } import scala.annotation.tailrec class CircuitBreakerMTSpec extends AkkaSpec { @@ -14,6 +15,7 @@ class CircuitBreakerMTSpec extends AkkaSpec { val callTimeout = 1.second.dilated val resetTimeout = 2.seconds.dilated val breaker = new CircuitBreaker(system.scheduler, 5, callTimeout, resetTimeout) + val numberOfTestCalls = 100 def openBreaker(): Unit = { @tailrec def call(attemptsLeft: Int): Unit = { @@ -26,29 +28,31 @@ class CircuitBreakerMTSpec extends AkkaSpec { call(10) } + def testCallsWithBreaker(): immutable.IndexedSeq[Future[String]] = { + val aFewActive = new TestLatch(5) + for (_ ← 1 to numberOfTestCalls) yield breaker.withCircuitBreaker(Future { + aFewActive.countDown() + Await.ready(aFewActive, 5.seconds.dilated) + "succeed" + }) recoverWith { + case _: CircuitBreakerOpenException ⇒ + aFewActive.countDown() + Future.successful("CBO") + } + } + "allow many calls while in closed state with no errors" in { - - val futures = for (i ← 1 to 100) yield breaker.withCircuitBreaker(Future { Thread.sleep(10); "succeed" }) - + val futures = testCallsWithBreaker() val result = Await.result(Future.sequence(futures), 5.second.dilated) - - result.size must be(100) + result.size must be(numberOfTestCalls) result.toSet must be === Set("succeed") - } "transition to open state upon reaching failure limit and fail-fast" in { openBreaker() - - val futures = for (i ← 1 to 100) yield breaker.withCircuitBreaker(Future { - Thread.sleep(10); "success" - }) recoverWith { - case _: CircuitBreakerOpenException ⇒ Promise.successful("CBO").future - } - + val futures = testCallsWithBreaker() val result = Await.result(Future.sequence(futures), 5.second.dilated) - - result.size must be(100) + result.size must be(numberOfTestCalls) result.toSet must be === Set("CBO") } @@ -58,17 +62,12 @@ class CircuitBreakerMTSpec extends AkkaSpec { openBreaker() + // breaker should become half-open after a while Await.ready(halfOpenLatch, resetTimeout + 1.seconds.dilated) - val futures = for (i ← 1 to 100) yield breaker.withCircuitBreaker(Future { - Thread.sleep(10); "succeed" - }) recoverWith { - case _: CircuitBreakerOpenException ⇒ Promise.successful("CBO").future - } - + val futures = testCallsWithBreaker() val result = Await.result(Future.sequence(futures), 5.second.dilated) - - result.size must be(100) + result.size must be(numberOfTestCalls) result.toSet must be === Set("succeed", "CBO") } @@ -76,19 +75,19 @@ class CircuitBreakerMTSpec extends AkkaSpec { val halfOpenLatch = new TestLatch(1) breaker.onHalfOpen(halfOpenLatch.countDown()) openBreaker() - Await.ready(halfOpenLatch, 5.seconds.dilated) - Await.ready(breaker.withCircuitBreaker(Future("succeed")), resetTimeout) - val futures = (1 to 100) map { - i ⇒ - breaker.withCircuitBreaker(Future { Thread.sleep(10); "succeed" }) recoverWith { - case _: CircuitBreakerOpenException ⇒ Promise.successful("CBO").future - } - } + // breaker should become half-open after a while + Await.ready(halfOpenLatch, resetTimeout + 1.seconds.dilated) + // one successful call should close the latch + val closedLatch = new TestLatch(1) + breaker.onClose(closedLatch.countDown()) + breaker.withCircuitBreaker(Future("succeed")) + Await.ready(closedLatch, 5.seconds.dilated) + + val futures = testCallsWithBreaker() val result = Await.result(Future.sequence(futures), 5.second.dilated) - - result.size must be(100) + result.size must be(numberOfTestCalls) result.toSet must be === Set("succeed") } } From da6c2f3b545e59da941f8b7302249fc14ec7c1f5 Mon Sep 17 00:00:00 2001 From: Roland Date: Wed, 2 Jan 2013 23:13:44 +0100 Subject: [PATCH 009/122] remove fixed ports from RemoteCommunicationSpec, see #2843 --- .../akka/remote/RemoteCommunicationSpec.scala | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala index 61443879c0..8e619d8bb3 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala @@ -41,20 +41,31 @@ akka { remote.transport = "akka.remote.netty.NettyRemoteTransport" remote.netty { hostname = localhost - port = 12345 - } - actor.deployment { - /blub.remote = "akka://remote-sys@localhost:12346" - /looker/child.remote = "akka://remote-sys@localhost:12346" - /looker/child/grandchild.remote = "akka://RemoteCommunicationSpec@localhost:12345" + port = 0 } } """) with ImplicitSender with DefaultTimeout { import RemoteCommunicationSpec._ - val conf = ConfigFactory.parseString("akka.remote.netty.port=12346").withFallback(system.settings.config) - val other = ActorSystem("remote-sys", conf) + val other = ActorSystem("remote-sys", system.settings.config) + + val localAddr = system.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress + val remoteAddr = other.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress + + val deploys = Seq( + Deploy("/blub", scope = RemoteScope(remoteAddr)), + Deploy("/looker/child", scope = RemoteScope(remoteAddr)), + Deploy("/looker/child/grandchild", scope = RemoteScope(localAddr))) + + def deploy(sys: ActorSystem, d: Deploy) { + sys.asInstanceOf[ExtendedActorSystem].provider.asInstanceOf[RemoteActorRefProvider].deployer.deploy(d) + } + + for (d ← deploys) { + deploy(system, d) + deploy(other, d) + } val remote = other.actorOf(Props(new Actor { def receive = { @@ -62,7 +73,7 @@ akka { } }), "echo") - val here = system.actorFor("akka://remote-sys@localhost:12346/user/echo") + val here = system.actorFor(RootActorPath(remoteAddr) / "user" / "echo") override def atTermination() { other.shutdown() @@ -81,7 +92,7 @@ akka { val old = other.eventStream.logLevel other.eventStream.setLogLevel(Logging.DebugLevel) EventFilter.debug(start = "dropping", occurrences = 1).intercept { - system.actorFor("akka://remotesys@localhost:12346/user/echo") ! "ping" + system.actorFor(RootActorPath(remoteAddr.copy(system = "remotesys")) / "user" / "echo") ! "ping" }(other) other.eventStream.setLogLevel(old) } @@ -95,13 +106,13 @@ akka { "send dead letters on remote if actor does not exist" in { EventFilter.warning(pattern = "dead.*buh", occurrences = 1).intercept { - system.actorFor("akka://remote-sys@localhost:12346/does/not/exist") ! "buh" + system.actorFor(RootActorPath(remoteAddr) / "does" / "not" / "exist") ! "buh" }(other) } "create and supervise children on remote node" in { val r = system.actorOf(Props[Echo], "blub") - r.path.toString must be === "akka://remote-sys@localhost:12346/remote/akka/RemoteCommunicationSpec@localhost:12345/user/blub" + r.path.toString must be === s"akka://remote-sys@localhost:${remoteAddr.port.get}/remote/akka/RemoteCommunicationSpec@localhost:${localAddr.port.get}/user/blub" r ! 42 expectMsg(42) EventFilter[Exception]("crash", occurrences = 1).intercept { From 5297db2950503606013529e96ebc41cb09183213 Mon Sep 17 00:00:00 2001 From: Roland Date: Wed, 2 Jan 2013 23:37:01 +0100 Subject: [PATCH 010/122] remove fixed ports from AkkaProtocolStressTest, see #2843 --- .../transport/AkkaProtocolStressTest.scala | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala index da9bbc9ac8..b16b8040d4 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala @@ -5,6 +5,9 @@ import com.typesafe.config.{ Config, ConfigFactory } import AkkaProtocolStressTest._ import akka.actor._ import scala.concurrent.duration._ +import akka.testkit.TestEvent +import akka.testkit.EventFilter +import akka.remote.EndpointException object AkkaProtocolStressTest { val configA: Config = ConfigFactory parseString (""" @@ -26,7 +29,7 @@ object AkkaProtocolStressTest { remoting.transports.tcp { applied-adapters = ["gremlin"] - port = 12345 + port = 0 } } @@ -62,17 +65,15 @@ object AkkaProtocolStressTest { class AkkaProtocolStressTest extends AkkaSpec(configA) with ImplicitSender with DefaultTimeout { - val configB = ConfigFactory.parseString("akka.remoting.transports.tcp.port = 12346") - .withFallback(system.settings.config).resolve() - - val systemB = ActorSystem("systemB", configB) + val systemB = ActorSystem("systemB", system.settings.config) val remote = systemB.actorOf(Props(new Actor { def receive = { case seq: Int ⇒ sender ! seq } }), "echo") - val here = system.actorFor("tcp.gremlin.akka://systemB@localhost:12346/user/echo") + val rootB = RootActorPath(systemB.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress) + val here = system.actorFor(rootB / "user" / "echo") "AkkaProtocolTransport" must { "guarantee at-most-once delivery and message ordering despite packet loss" taggedAs TimingTest in { @@ -82,6 +83,13 @@ class AkkaProtocolStressTest extends AkkaSpec(configA) with ImplicitSender with case (received: Int, lost: Int) ⇒ log.debug(s" ######## Received ${received - lost} messages from ${received} ########") } + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(source = "akka://AkkaProtocolStressTest/user/$a", start = "received dead letter"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + systemB.eventStream.publish(TestEvent.Mute( + EventFilter[EndpointException](), + EventFilter.error(start = "AssociationError"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) } } From 040e4c86019b857aefeb7bfc2afcfa3c86d02c2c Mon Sep 17 00:00:00 2001 From: Roland Date: Wed, 2 Jan 2013 23:45:46 +0100 Subject: [PATCH 011/122] remove fixed ports from ThrottlerTransportAdapterSpec, see #2843 --- .../ThrottlerTransportAdapterSpec.scala | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala index d05dc073cb..4d997c88cc 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala @@ -8,6 +8,9 @@ import scala.concurrent.duration._ import scala.concurrent.Await import akka.remote.transport.ThrottlerTransportAdapter.{ Direction, TokenBucket, SetThrottle } import akka.remote.RemoteActorRefProvider +import akka.testkit.TestEvent +import akka.testkit.EventFilter +import akka.remote.EndpointException object ThrottlerTransportAdapterSpec { val configA: Config = ConfigFactory parseString (""" @@ -19,7 +22,7 @@ object ThrottlerTransportAdapterSpec { remoting.log-remote-lifecycle-events = on remoting.transports.tcp.applied-adapters = ["trttl"] - remoting.transports.tcp.port = 12345 + remoting.transports.tcp.port = 0 } """) @@ -56,24 +59,30 @@ object ThrottlerTransportAdapterSpec { } class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSender with DefaultTimeout { - val configB = ConfigFactory.parseString("akka.remoting.transports.tcp.port = 12346") - .withFallback(system.settings.config).resolve() - val systemB = ActorSystem("systemB", configB) + val systemB = ActorSystem("systemB", system.settings.config) val remote = systemB.actorOf(Props[Echo], "echo") - val here = system.actorFor("tcp.trttl.akka://systemB@localhost:12346/user/echo") + val rootB = RootActorPath(systemB.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress) + val here = system.actorFor(rootB / "user" / "echo") "ThrottlerTransportAdapter" must { "maintain average message rate" taggedAs TimingTest in { Await.result( system.asInstanceOf[ExtendedActorSystem].provider.asInstanceOf[RemoteActorRefProvider].transport - .managementCommand(SetThrottle(Address("akka", "systemB", "localhost", 12346), Direction.Send, TokenBucket(200, 500, 0, 0))), 3 seconds) + .managementCommand(SetThrottle(Address("akka", "systemB", "localhost", rootB.address.port.get), Direction.Send, TokenBucket(200, 500, 0, 0))), 3 seconds) val tester = system.actorOf(Props(new ThrottlingTester(here, self))) ! "start" expectMsgPF((TotalTime + 3) seconds) { case time: Long ⇒ log.warning("Total time of transmission: " + NANOSECONDS.toSeconds(time)) } + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(source = "akka://AkkaProtocolStressTest/user/$a", start = "received dead letter"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + systemB.eventStream.publish(TestEvent.Mute( + EventFilter[EndpointException](), + EventFilter.error(start = "AssociationError"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) } } From fa494863a0e4c69f0f5e2a5d3effe85d1142cb19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Thu, 3 Jan 2013 10:53:30 +0100 Subject: [PATCH 012/122] Hardened flushing by sending a final "null" message --- .../transport/netty/NettyTransport.scala | 19 ++++++++++++++----- .../remote/transport/netty/TcpSupport.scala | 3 ++- .../remote/transport/netty/UdpSupport.scala | 3 ++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index 76236a9627..f913fa0cbc 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -11,7 +11,7 @@ import com.typesafe.config.Config import java.net.{ UnknownHostException, SocketAddress, InetAddress, InetSocketAddress, ConnectException } import java.util.concurrent.{ ConcurrentHashMap, Executor, Executors, CancellationException } import org.jboss.netty.bootstrap.{ ConnectionlessBootstrap, Bootstrap, ClientBootstrap, ServerBootstrap } -import org.jboss.netty.buffer.ChannelBuffer +import org.jboss.netty.buffer.{ChannelBuffers, ChannelBuffer} import org.jboss.netty.channel._ import org.jboss.netty.channel.group.{ ChannelGroupFuture, ChannelGroupFutureListener } import org.jboss.netty.channel.socket.nio.{ NioDatagramChannelFactory, NioServerSocketChannelFactory, NioClientSocketChannelFactory } @@ -348,13 +348,22 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s } override def shutdown(): Unit = { - channelGroup.unbind() - channelGroup.disconnect().addListener(new ChannelGroupFutureListener { + // Force flush by trying to write an empty buffer and wait for success + channelGroup.write(ChannelBuffers.buffer(0)).addListener(new ChannelGroupFutureListener { def operationComplete(future: ChannelGroupFuture) { - channelGroup.close() - inboundBootstrap.releaseExternalResources() + channelGroup.unbind() + channelGroup.disconnect().addListener(new ChannelGroupFutureListener { + def operationComplete(future: ChannelGroupFuture) { + channelGroup.close().addListener(new ChannelGroupFutureListener { + def operationComplete(future: ChannelGroupFuture) { + inboundBootstrap.releaseExternalResources() + } + }) + } + }) } }) + } } diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala index 6e8b714fb0..515637dad0 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala @@ -32,7 +32,8 @@ private[remote] trait TcpHandlers extends CommonHandlers { } override def onMessage(ctx: ChannelHandlerContext, e: MessageEvent) { - notifyListener(e.getChannel, InboundPayload(ByteString(e.getMessage.asInstanceOf[ChannelBuffer].array()))) + val bytes: Array[Byte] = e.getMessage.asInstanceOf[ChannelBuffer].array() + if (bytes.length > 0) notifyListener(e.getChannel, InboundPayload(ByteString(bytes))) } override def onException(ctx: ChannelHandlerContext, e: ExceptionEvent) { diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala index 080b03c152..cb4251bf92 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala @@ -34,7 +34,8 @@ private[remote] trait UdpHandlers extends CommonHandlers { initUdp(e.getChannel, e.getRemoteAddress, e.getMessage.asInstanceOf[ChannelBuffer]) } else { val listener = transport.udpConnectionTable.get(inetSocketAddress) - listener notify InboundPayload(ByteString(e.getMessage.asInstanceOf[ChannelBuffer].array())) + val bytes: Array[Byte] = e.getMessage.asInstanceOf[ChannelBuffer].array() + if (bytes.length > 0)listener notify InboundPayload(ByteString(bytes)) } case _ ⇒ } From 94b145fc9545127f29886d7ace5da868bf92bfa1 Mon Sep 17 00:00:00 2001 From: Crossing-Tech Date: Thu, 3 Jan 2013 11:46:09 +0100 Subject: [PATCH 013/122] patriknw comments commited * .conf, .properties, .json configuration files * string interpolation * take place of the legacy actorSystemConfig --- .../akka/osgi/OsgiActorSystemFactory.scala | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala b/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala index 86c2f11c72..9069e5d06d 100644 --- a/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala +++ b/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala @@ -37,23 +37,19 @@ class OsgiActorSystemFactory(val context: BundleContext, val fallbackClassLoader * Strategy method to create the Config for the ActorSystem, based on configuration files found in etc directory, * ensuring that the default/reference configuration is loaded from the akka-actor bundle. * The configuration is based on - * File(etc/bundle-SYMBOLICNAME.conf) - * File(etc/bundle-ID.conf) - * File(etc/akka.conf) + * etc/bundle-SYMBOLICNAME, etc/bundle-ID, etc/akka.conf + * in either ".conf", ".properties", ".json" formats * Configuration files found in akka-actor bundle */ - def extendedActorSystemConfig(context: BundleContext): Config = { - val bunleNameAkkaConfig = ConfigFactory.parseFile(new File("etc/bundle-%s.conf" format context.getBundle.getSymbolicName)) - val bunleIDAkkaConfig = ConfigFactory.parseFile(new File("etc/bundle-%s.conf" format context.getBundle.getBundleId)) - val defaultAkkaConfig = ConfigFactory.parseFile(new File("etc/akka.conf")) - bunleNameAkkaConfig.withFallback(bunleIDAkkaConfig.withFallback(defaultAkkaConfig).withFallback(actorSystemConfig(context))) + def actorSystemConfig(context: BundleContext): Config = { + val bundleSymbolicName = context.getBundle.getSymbolicName + val bundleId = context.getBundle.getBundleId + val acceptedFileExtension = List("conf", "properties", "json") + val acceptedFileName = List(s"bundle-$bundleSymbolicName", s"bundle-$bundleId", "akka") + val configurationFiles = acceptedFileName.flatMap(x => acceptedFileExtension.map(y => s"etc/$x.$y")) + val applicationConfiguration = configurationFiles.foldLeft(ConfigFactory.empty())((x, y) => x.withFallback(ConfigFactory.parseFileAnySyntax(new File(y)))) + applicationConfiguration.withFallback(ConfigFactory.load(classloader).withFallback(ConfigFactory.defaultReference(OsgiActorSystemFactory.akkaActorClassLoader))) } - /** - * Strategy method to create the Config for the ActorSystem, ensuring that the default/reference configuration is - * loaded from the akka-actor bundle. - */ - def actorSystemConfig(context: BundleContext): Config = - ConfigFactory.load(classloader).withFallback(ConfigFactory.defaultReference(OsgiActorSystemFactory.akkaActorClassLoader)) /** * Determine the name for the [[akka.actor.ActorSystem]] From b2a050bbe909180faa7c5199a6b185738d20b81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Thu, 3 Jan 2013 12:06:53 +0100 Subject: [PATCH 014/122] Cleaned up chaining of ChannelGroupFutures --- .../transport/netty/NettyTransport.scala | 40 +++++++++++-------- .../remote/transport/netty/UdpSupport.scala | 2 +- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index f913fa0cbc..4bddb57795 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -11,9 +11,9 @@ import com.typesafe.config.Config import java.net.{ UnknownHostException, SocketAddress, InetAddress, InetSocketAddress, ConnectException } import java.util.concurrent.{ ConcurrentHashMap, Executor, Executors, CancellationException } import org.jboss.netty.bootstrap.{ ConnectionlessBootstrap, Bootstrap, ClientBootstrap, ServerBootstrap } -import org.jboss.netty.buffer.{ChannelBuffers, ChannelBuffer} +import org.jboss.netty.buffer.{ ChannelBuffers, ChannelBuffer } import org.jboss.netty.channel._ -import org.jboss.netty.channel.group.{ ChannelGroupFuture, ChannelGroupFutureListener } +import org.jboss.netty.channel.group.{ ChannelGroup, ChannelGroupFuture, ChannelGroupFutureListener } import org.jboss.netty.channel.socket.nio.{ NioDatagramChannelFactory, NioServerSocketChannelFactory, NioClientSocketChannelFactory } import org.jboss.netty.handler.codec.frame.{ LengthFieldBasedFrameDecoder, LengthFieldPrepender } import scala.concurrent.duration.{ Duration, FiniteDuration, MILLISECONDS } @@ -41,6 +41,20 @@ object NettyFutureBridge { }) p.future } + + def apply(nettyFuture: ChannelGroupFuture): Future[ChannelGroup] = { + import scala.collection.JavaConverters._ + val p = Promise[ChannelGroup] + nettyFuture.addListener(new ChannelGroupFutureListener { + def operationComplete(future: ChannelGroupFuture): Unit = p complete Try( + if (future.isCompleteSuccess) future.getGroup + else throw future.iterator.asScala.collectFirst { + case f if f.isCancelled ⇒ new CancellationException + case f if !f.isSuccess ⇒ f.getCause + } getOrElse new IllegalStateException("Error reported in ChannelGroupFuture, but no error found in individual futures.")) + }) + p.future + } } class NettyTransportException(msg: String, cause: Throwable) extends RuntimeException(msg, cause) with OnlyCauseStackTrace { @@ -348,21 +362,13 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s } override def shutdown(): Unit = { - // Force flush by trying to write an empty buffer and wait for success - channelGroup.write(ChannelBuffers.buffer(0)).addListener(new ChannelGroupFutureListener { - def operationComplete(future: ChannelGroupFuture) { - channelGroup.unbind() - channelGroup.disconnect().addListener(new ChannelGroupFutureListener { - def operationComplete(future: ChannelGroupFuture) { - channelGroup.close().addListener(new ChannelGroupFutureListener { - def operationComplete(future: ChannelGroupFuture) { - inboundBootstrap.releaseExternalResources() - } - }) - } - }) - } - }) + def always(c: ChannelGroupFuture) = NettyFutureBridge(c) recover { case _ ⇒ c.getGroup } + for { + // Force flush by trying to write an empty buffer and wait for success + _ ← always(channelGroup.write(ChannelBuffers.buffer(0))) + _ ← always({ channelGroup.unbind(); channelGroup.disconnect() }) + _ ← always(channelGroup.close()) + } inboundBootstrap.releaseExternalResources() } diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala index cb4251bf92..c52e8d9bc9 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala @@ -35,7 +35,7 @@ private[remote] trait UdpHandlers extends CommonHandlers { } else { val listener = transport.udpConnectionTable.get(inetSocketAddress) val bytes: Array[Byte] = e.getMessage.asInstanceOf[ChannelBuffer].array() - if (bytes.length > 0)listener notify InboundPayload(ByteString(bytes)) + if (bytes.length > 0) listener notify InboundPayload(ByteString(bytes)) } case _ ⇒ } From a367ad03dabd28c7629a61583130597e61be34c0 Mon Sep 17 00:00:00 2001 From: Roland Date: Thu, 3 Jan 2013 12:29:30 +0100 Subject: [PATCH 015/122] remove fixed ports from RemotingSpec, see #2843 --- .../test/scala/akka/remote/RemotingSpec.scala | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala index efed787649..76930f1a9f 100644 --- a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala @@ -53,9 +53,9 @@ object RemotingSpec { remoting.log-remote-lifecycle-events = on remoting.enabled-transports = [test, tcp, udp, ssl] - remoting.transports.tcp.port = 12345 - remoting.transports.udp.port = 12345 - remoting.transports.ssl.port = 23456 + remoting.transports.tcp.port = 0 + remoting.transports.udp.port = 0 + remoting.transports.ssl.port = 0 remoting.transports.ssl.ssl = ${common-ssl-settings} remoting.transports.test { @@ -69,9 +69,6 @@ object RemotingSpec { actor.deployment { /blub.remote = "test.akka://remote-sys@localhost:12346" - /gonk.remote = "tcp.akka://remote-sys@localhost:12346" - /zagzag.remote = "udp.akka://remote-sys@localhost:12346" - /roghtaar.remote = "tcp.ssl.akka://remote-sys@localhost:23457" /looker/child.remote = "test.akka://remote-sys@localhost:12346" /looker/child/grandchild.remote = "test.akka://RemotingSpec@localhost:12345" } @@ -90,14 +87,25 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D val conf = ConfigFactory.parseString( """ akka.remoting.transports { - tcp.port = 12346 - udp.port = 12346 - ssl.port = 23457 test.local-address = "test://remote-sys@localhost:12346" } """).withFallback(system.settings.config).resolve() val other = ActorSystem("remote-sys", conf) + for ( + (name, proto) ← Seq( + "/gonk" -> "tcp", + "/zagzag" -> "udp", + "/roghtaar" -> "tcp.ssl") + ) deploy(system, Deploy(name, scope = RemoteScope(addr(other, proto)))) + + def addr(sys: ActorSystem, proto: String) = + sys.asInstanceOf[ExtendedActorSystem].provider.getExternalAddressFor(Address(s"$proto.akka", "", "", 0)).get + def port(sys: ActorSystem, proto: String) = addr(sys, proto).port.get + def deploy(sys: ActorSystem, d: Deploy) { + sys.asInstanceOf[ExtendedActorSystem].provider.asInstanceOf[RemoteActorRefProvider].deployer.deploy(d) + } + val remote = other.actorOf(Props(new Actor { def receive = { case "ping" ⇒ sender ! (("pong", sender)) @@ -119,7 +127,7 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D } "send error message for wrong address" in { - EventFilter.error(start = "AssociationError").intercept { + filterEvents(EventFilter[EndpointException](occurrences = 6), EventFilter.error(start = "Association", occurrences = 6)) { system.actorFor("test.akka://nonexistingsystem@localhost:12346/user/echo") ! "ping" } } @@ -183,7 +191,8 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D "be able to use multiple transports and use the appropriate one (TCP)" in { val r = system.actorOf(Props[Echo], "gonk") - r.path.toString must be === "tcp.akka://remote-sys@localhost:12346/remote/tcp.akka/RemotingSpec@localhost:12345/user/gonk" + r.path.toString must be === + s"tcp.akka://remote-sys@localhost:${port(other, "tcp")}/remote/tcp.akka/RemotingSpec@localhost:${port(system, "tcp")}/user/gonk" r ! 42 expectMsg(42) EventFilter[Exception]("crash", occurrences = 1).intercept { @@ -198,7 +207,8 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D "be able to use multiple transports and use the appropriate one (UDP)" in { val r = system.actorOf(Props[Echo], "zagzag") - r.path.toString must be === "udp.akka://remote-sys@localhost:12346/remote/udp.akka/RemotingSpec@localhost:12345/user/zagzag" + r.path.toString must be === + s"udp.akka://remote-sys@localhost:${port(other, "udp")}/remote/udp.akka/RemotingSpec@localhost:${port(system, "udp")}/user/zagzag" r ! 42 expectMsg(10 seconds, 42) EventFilter[Exception]("crash", occurrences = 1).intercept { @@ -213,7 +223,8 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D "be able to use multiple transports and use the appropriate one (SSL)" in { val r = system.actorOf(Props[Echo], "roghtaar") - r.path.toString must be === "tcp.ssl.akka://remote-sys@localhost:23457/remote/tcp.ssl.akka/RemotingSpec@localhost:23456/user/roghtaar" + r.path.toString must be === + s"tcp.ssl.akka://remote-sys@localhost:${port(other, "tcp.ssl")}/remote/tcp.ssl.akka/RemotingSpec@localhost:${port(system, "tcp.ssl")}/user/roghtaar" r ! 42 expectMsg(10 seconds, 42) EventFilter[Exception]("crash", occurrences = 1).intercept { @@ -226,6 +237,15 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D expectMsg("postStop") } + "shut down more logging" in { + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + other.eventStream.publish(TestEvent.Mute( + EventFilter[EndpointException](), + EventFilter.error(start = "AssociationError"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate|HandleListener)"))) + } + } } From 8c537fbc37442cea945ae98dc21794391ada1b74 Mon Sep 17 00:00:00 2001 From: Roland Date: Thu, 3 Jan 2013 12:33:09 +0100 Subject: [PATCH 016/122] remove postfixOps warnings in remote tests --- .../src/test/scala/akka/remote/RemotingSpec.scala | 4 ++-- .../akka/remote/transport/AkkaProtocolSpec.scala | 14 +++++++------- .../remote/transport/AkkaProtocolStressTest.scala | 2 +- .../transport/ThrottlerTransportAdapterSpec.scala | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala index 76930f1a9f..7e0bcd440d 100644 --- a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala @@ -210,7 +210,7 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D r.path.toString must be === s"udp.akka://remote-sys@localhost:${port(other, "udp")}/remote/udp.akka/RemotingSpec@localhost:${port(system, "udp")}/user/zagzag" r ! 42 - expectMsg(10 seconds, 42) + expectMsg(10.seconds, 42) EventFilter[Exception]("crash", occurrences = 1).intercept { r ! new Exception("crash") }(other) @@ -226,7 +226,7 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D r.path.toString must be === s"tcp.ssl.akka://remote-sys@localhost:${port(other, "tcp.ssl")}/remote/tcp.ssl.akka/RemotingSpec@localhost:${port(system, "tcp.ssl")}/user/roghtaar" r ! 42 - expectMsg(10 seconds, 42) + expectMsg(10.seconds, 42) EventFilter[Exception]("crash", occurrences = 1).intercept { r ! new Exception("crash") }(other) diff --git a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolSpec.scala index d3a3125c3b..592a491693 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolSpec.scala @@ -202,7 +202,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re codec, failureDetector))) - Await.result(statusPromise.future, 3 seconds) match { + Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress @@ -241,7 +241,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re // finish connection by sending back a payload reader ! testPayload - Await.result(statusPromise.future, 3 seconds) match { + Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress @@ -315,7 +315,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re codec, failureDetector))) - Await.result(statusPromise.future, 3 seconds) match { + Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress @@ -341,7 +341,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re codec, failureDetector))) - val wrappedHandle = Await.result(statusPromise.future, 3 seconds) match { + val wrappedHandle = Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress @@ -379,7 +379,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re // Finish association with a heartbeat -- pushes state out of WaitActivity reader ! testHeartbeat - val wrappedHandle = Await.result(statusPromise.future, 3 seconds) match { + val wrappedHandle = Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress @@ -412,7 +412,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re codec, failureDetector))) - val wrappedHandle = Await.result(statusPromise.future, 3 seconds) match { + val wrappedHandle = Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress @@ -448,7 +448,7 @@ class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = "akka.remote.Re codec, failureDetector))) - val wrappedHandle = Await.result(statusPromise.future, 3 seconds) match { + val wrappedHandle = Await.result(statusPromise.future, 3.seconds) match { case h: AssociationHandle ⇒ h.remoteAddress must be === remoteAkkaAddress h.localAddress must be === localAkkaAddress diff --git a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala index b16b8040d4..595ec02e60 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala @@ -79,7 +79,7 @@ class AkkaProtocolStressTest extends AkkaSpec(configA) with ImplicitSender with "guarantee at-most-once delivery and message ordering despite packet loss" taggedAs TimingTest in { val tester = system.actorOf(Props(new SequenceVerifier(here, self))) ! "start" - expectMsgPF(30 seconds) { + expectMsgPF(30.seconds) { case (received: Int, lost: Int) ⇒ log.debug(s" ######## Received ${received - lost} messages from ${received} ########") } diff --git a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala index 4d997c88cc..7559996e7b 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala @@ -70,10 +70,10 @@ class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSende "maintain average message rate" taggedAs TimingTest in { Await.result( system.asInstanceOf[ExtendedActorSystem].provider.asInstanceOf[RemoteActorRefProvider].transport - .managementCommand(SetThrottle(Address("akka", "systemB", "localhost", rootB.address.port.get), Direction.Send, TokenBucket(200, 500, 0, 0))), 3 seconds) + .managementCommand(SetThrottle(Address("akka", "systemB", "localhost", rootB.address.port.get), Direction.Send, TokenBucket(200, 500, 0, 0))), 3.seconds) val tester = system.actorOf(Props(new ThrottlingTester(here, self))) ! "start" - expectMsgPF((TotalTime + 3) seconds) { + expectMsgPF((TotalTime + 3).seconds) { case time: Long ⇒ log.warning("Total time of transmission: " + NANOSECONDS.toSeconds(time)) } system.eventStream.publish(TestEvent.Mute( From 01e3c5fce720cf4fe9f396b4893e7bfacf135cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Thu, 3 Jan 2013 14:54:17 +0100 Subject: [PATCH 017/122] Added setIssueHandshake() to enable auto-handshake --- .../akka/remote/transport/netty/NettyTransport.scala | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index f913fa0cbc..6b912e54ec 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -23,6 +23,7 @@ import util.control.{ NoStackTrace, NonFatal } import akka.dispatch.ThreadPoolConfig import akka.remote.transport.AssociationHandle.HandleEventListener import java.util.concurrent.atomic.AtomicInteger +import org.jboss.netty.handler.ssl.SslHandler object NettyTransportSettings { sealed trait Mode @@ -230,10 +231,17 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s } private val associationListenerPromise: Promise[AssociationEventListener] = Promise() + + private def sslHandler(isClient: Boolean): SslHandler = { + val handler = NettySSLSupport(settings.SslSettings.get, log, isClient) + handler.setIssueHandshake(true) + handler + } + private val serverPipelineFactory: ChannelPipelineFactory = new ChannelPipelineFactory { override def getPipeline: ChannelPipeline = { val pipeline = newPipeline - if (EnableSsl) pipeline.addFirst("SslHandler", NettySSLSupport(settings.SslSettings.get, log, false)) + if (EnableSsl) pipeline.addFirst("SslHandler", sslHandler(false)) val handler = if (isDatagram) new UdpServerHandler(NettyTransport.this, associationListenerPromise.future) else new TcpServerHandler(NettyTransport.this, associationListenerPromise.future) pipeline.addLast("ServerHandler", handler) @@ -244,7 +252,7 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s private def clientPipelineFactory(statusPromise: Promise[AssociationHandle]): ChannelPipelineFactory = new ChannelPipelineFactory { override def getPipeline: ChannelPipeline = { val pipeline = newPipeline - if (EnableSsl) pipeline.addFirst("SslHandler", NettySSLSupport(settings.SslSettings.get, log, true)) + if (EnableSsl) pipeline.addFirst("SslHandler", sslHandler(true)) val handler = if (isDatagram) new UdpClientHandler(NettyTransport.this, statusPromise) else new TcpClientHandler(NettyTransport.this, statusPromise) pipeline.addLast("clienthandler", handler) From e399aefe3dac000ab9ba73947ec439e4cec9f210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Thu, 3 Jan 2013 16:18:25 +0100 Subject: [PATCH 018/122] Using named parameters for booleans --- .../scala/akka/remote/transport/netty/NettyTransport.scala | 6 +++--- .../main/scala/akka/remote/transport/netty/UdpSupport.scala | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index 6b912e54ec..7381a62297 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -11,7 +11,7 @@ import com.typesafe.config.Config import java.net.{ UnknownHostException, SocketAddress, InetAddress, InetSocketAddress, ConnectException } import java.util.concurrent.{ ConcurrentHashMap, Executor, Executors, CancellationException } import org.jboss.netty.bootstrap.{ ConnectionlessBootstrap, Bootstrap, ClientBootstrap, ServerBootstrap } -import org.jboss.netty.buffer.{ChannelBuffers, ChannelBuffer} +import org.jboss.netty.buffer.{ ChannelBuffers, ChannelBuffer } import org.jboss.netty.channel._ import org.jboss.netty.channel.group.{ ChannelGroupFuture, ChannelGroupFutureListener } import org.jboss.netty.channel.socket.nio.{ NioDatagramChannelFactory, NioServerSocketChannelFactory, NioClientSocketChannelFactory } @@ -241,7 +241,7 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s private val serverPipelineFactory: ChannelPipelineFactory = new ChannelPipelineFactory { override def getPipeline: ChannelPipeline = { val pipeline = newPipeline - if (EnableSsl) pipeline.addFirst("SslHandler", sslHandler(false)) + if (EnableSsl) pipeline.addFirst("SslHandler", sslHandler(isClient = false)) val handler = if (isDatagram) new UdpServerHandler(NettyTransport.this, associationListenerPromise.future) else new TcpServerHandler(NettyTransport.this, associationListenerPromise.future) pipeline.addLast("ServerHandler", handler) @@ -252,7 +252,7 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s private def clientPipelineFactory(statusPromise: Promise[AssociationHandle]): ChannelPipelineFactory = new ChannelPipelineFactory { override def getPipeline: ChannelPipeline = { val pipeline = newPipeline - if (EnableSsl) pipeline.addFirst("SslHandler", sslHandler(true)) + if (EnableSsl) pipeline.addFirst("SslHandler", sslHandler(isClient = true)) val handler = if (isDatagram) new UdpClientHandler(NettyTransport.this, statusPromise) else new TcpClientHandler(NettyTransport.this, statusPromise) pipeline.addLast("clienthandler", handler) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala index cb4251bf92..c52e8d9bc9 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala @@ -35,7 +35,7 @@ private[remote] trait UdpHandlers extends CommonHandlers { } else { val listener = transport.udpConnectionTable.get(inetSocketAddress) val bytes: Array[Byte] = e.getMessage.asInstanceOf[ChannelBuffer].array() - if (bytes.length > 0)listener notify InboundPayload(ByteString(bytes)) + if (bytes.length > 0) listener notify InboundPayload(ByteString(bytes)) } case _ ⇒ } From ff24be7650518022235fa74c3fcf77e4352332ba Mon Sep 17 00:00:00 2001 From: Roland Date: Thu, 3 Jan 2013 16:38:18 +0100 Subject: [PATCH 019/122] introduce AkkaSpec.beforeTermination hook, e.g. to silence shutdown logs - apply it in RemoteRouterSpec, RemoteDeathWatchSpec, RemotingSpec, AkkaProtocolStressTest and ThrottlerTransportAdapterSpec --- .../akka/remote/RemoteDeathWatchSpec.scala | 5 +++++ .../scala/akka/remote/RemoteRouterSpec.scala | 5 +++++ .../test/scala/akka/remote/RemotingSpec.scala | 16 ++++++++-------- .../transport/AkkaProtocolStressTest.scala | 17 ++++++++++------- .../ThrottlerTransportAdapterSpec.scala | 17 ++++++++++------- .../src/test/scala/akka/testkit/AkkaSpec.scala | 3 +++ 6 files changed, 41 insertions(+), 22 deletions(-) diff --git a/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala index 636910aa64..1b21a5c4bd 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala @@ -26,6 +26,11 @@ akka { val other = ActorSystem("other", ConfigFactory.parseString("akka.remoting.transports.tcp.port=2666") .withFallback(system.settings.config)) + override def beforeTermination() { + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(pattern = "received dead letter.*Disassociate"))) + } + override def atTermination() { other.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala index e4611d0ba1..e3031a7cc2 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala @@ -219,4 +219,9 @@ akka.actor.deployment { } + override def beforeTermination() { + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(pattern = "received dead letter.*Disassociate"))) + } + } diff --git a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala index 7e0bcd440d..4a8e691b7d 100644 --- a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala @@ -237,15 +237,15 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D expectMsg("postStop") } - "shut down more logging" in { - system.eventStream.publish(TestEvent.Mute( - EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) - other.eventStream.publish(TestEvent.Mute( - EventFilter[EndpointException](), - EventFilter.error(start = "AssociationError"), - EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate|HandleListener)"))) - } + } + override def beforeTermination() { + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + other.eventStream.publish(TestEvent.Mute( + EventFilter[EndpointException](), + EventFilter.error(start = "AssociationError"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate|HandleListener)"))) } } diff --git a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala index 595ec02e60..eba8670d79 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala @@ -83,16 +83,19 @@ class AkkaProtocolStressTest extends AkkaSpec(configA) with ImplicitSender with case (received: Int, lost: Int) ⇒ log.debug(s" ######## Received ${received - lost} messages from ${received} ########") } - system.eventStream.publish(TestEvent.Mute( - EventFilter.warning(source = "akka://AkkaProtocolStressTest/user/$a", start = "received dead letter"), - EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) - systemB.eventStream.publish(TestEvent.Mute( - EventFilter[EndpointException](), - EventFilter.error(start = "AssociationError"), - EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) } } + override def beforeTermination() { + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(source = "akka://AkkaProtocolStressTest/user/$a", start = "received dead letter"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + systemB.eventStream.publish(TestEvent.Mute( + EventFilter[EndpointException](), + EventFilter.error(start = "AssociationError"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + } + override def atTermination(): Unit = systemB.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala index 7559996e7b..8795c62412 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala @@ -76,16 +76,19 @@ class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSende expectMsgPF((TotalTime + 3).seconds) { case time: Long ⇒ log.warning("Total time of transmission: " + NANOSECONDS.toSeconds(time)) } - system.eventStream.publish(TestEvent.Mute( - EventFilter.warning(source = "akka://AkkaProtocolStressTest/user/$a", start = "received dead letter"), - EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) - systemB.eventStream.publish(TestEvent.Mute( - EventFilter[EndpointException](), - EventFilter.error(start = "AssociationError"), - EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) } } + override def beforeTermination() { + system.eventStream.publish(TestEvent.Mute( + EventFilter.warning(source = "akka://AkkaProtocolStressTest/user/$a", start = "received dead letter"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + systemB.eventStream.publish(TestEvent.Mute( + EventFilter[EndpointException](), + EventFilter.error(start = "AssociationError"), + EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) + } + override def atTermination(): Unit = systemB.shutdown() } diff --git a/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala b/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala index d4844087b7..1ed8e22384 100644 --- a/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala @@ -70,6 +70,7 @@ abstract class AkkaSpec(_system: ActorSystem) } final override def afterAll { + beforeTermination() system.shutdown() try system.awaitTermination(5 seconds) catch { case _: TimeoutException ⇒ @@ -81,6 +82,8 @@ abstract class AkkaSpec(_system: ActorSystem) protected def atStartup() {} + protected def beforeTermination() {} + protected def atTermination() {} def spawn(dispatcherId: String = Dispatchers.DefaultDispatcherId)(body: ⇒ Unit): Unit = From 6c31d5313e437c50c8ae3aa450953851e87d5a4d Mon Sep 17 00:00:00 2001 From: Roland Date: Thu, 3 Jan 2013 17:17:12 +0100 Subject: [PATCH 020/122] rename AkkaSpec.{atTermination => afterTermination} --- .../src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala | 2 +- .../code/docs/actor/mailbox/DurableMailboxDocSpec.scala | 2 +- .../scala/code/docs/remoting/RemoteDeploymentDocSpec.scala | 2 +- .../akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala | 4 ++-- .../test/scala/akka/actor/mailbox/DurableMailboxSpec.scala | 4 ++-- .../src/main/scala/akka/remote/testkit/MultiNodeSpec.scala | 4 ++-- .../src/test/scala/akka/remote/RemoteCommunicationSpec.scala | 2 +- .../src/test/scala/akka/remote/RemoteDeathWatchSpec.scala | 2 +- akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala | 2 +- akka-remote/src/test/scala/akka/remote/RemotingSpec.scala | 2 +- .../test/scala/akka/remote/Ticket1978CommunicationSpec.scala | 2 +- akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala | 2 +- .../scala/akka/remote/transport/AkkaProtocolStressTest.scala | 2 +- .../akka/remote/transport/ThrottlerTransportAdapterSpec.scala | 2 +- akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala | 4 ++-- 15 files changed, 19 insertions(+), 19 deletions(-) diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala index 97711b30de..dd6a421819 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala @@ -100,7 +100,7 @@ abstract class LargeClusterSpec */ override def cluster: Cluster = Cluster(system) - override def atTermination(): Unit = { + override def afterTermination(): Unit = { systems foreach { _.shutdown } val shutdownTimeout = 20.seconds val deadline = Deadline.now + shutdownTimeout diff --git a/akka-docs/rst/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala b/akka-docs/rst/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala index 4c2880f53d..018a14fcc0 100644 --- a/akka-docs/rst/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala +++ b/akka-docs/rst/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala @@ -127,7 +127,7 @@ class MyMailboxSpec extends DurableMailboxSpec("MyStorage", MyMailboxSpec.config override def atStartup() { } - override def atTermination() { + override def afterTermination() { } "MyMailbox" must { diff --git a/akka-docs/rst/scala/code/docs/remoting/RemoteDeploymentDocSpec.scala b/akka-docs/rst/scala/code/docs/remoting/RemoteDeploymentDocSpec.scala index 0816d262a6..ddea525a13 100644 --- a/akka-docs/rst/scala/code/docs/remoting/RemoteDeploymentDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/remoting/RemoteDeploymentDocSpec.scala @@ -28,7 +28,7 @@ class RemoteDeploymentDocSpec extends AkkaSpec(""" val other = ActorSystem("remote", system.settings.config) val address = other.asInstanceOf[ExtendedActorSystem].provider.getExternalAddressFor(Address("tcp.akka", "s", "host", 1)).get - override def atTermination() { other.shutdown() } + override def afterTermination() { other.shutdown() } "demonstrate programmatic deployment" in { //#deploy diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala index e0271461e8..1ba5f23f1c 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala @@ -45,8 +45,8 @@ class FileBasedMailboxSpec extends DurableMailboxSpec("File", FileBasedMailboxSp super.atStartup() } - override def atTermination() { + override def afterTermination() { clean() - super.atTermination() + super.afterTermination() } } diff --git a/akka-durable-mailboxes/akka-mailboxes-common/src/test/scala/akka/actor/mailbox/DurableMailboxSpec.scala b/akka-durable-mailboxes/akka-mailboxes-common/src/test/scala/akka/actor/mailbox/DurableMailboxSpec.scala index 2c6706f693..decfec6014 100644 --- a/akka-durable-mailboxes/akka-mailboxes-common/src/test/scala/akka/actor/mailbox/DurableMailboxSpec.scala +++ b/akka-durable-mailboxes/akka-mailboxes-common/src/test/scala/akka/actor/mailbox/DurableMailboxSpec.scala @@ -84,14 +84,14 @@ abstract class DurableMailboxSpec(system: ActorSystem, val backendName: String) try system.awaitTermination(5 seconds) catch { case _: TimeoutException ⇒ system.log.warning("Failed to stop [{}] within 5 seconds", system.name) } - atTermination() + afterTermination() } /** * May be implemented in concrete subclass to do additional things once after all * test cases have been run. */ - def atTermination() {} + def afterTermination() {} protected def streamMustContain(in: InputStream, words: String): Unit = { val output = new Array[Byte](8192) diff --git a/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala b/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala index d2d7ad50d5..ec926dd3af 100644 --- a/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala +++ b/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala @@ -272,7 +272,7 @@ abstract class MultiNodeSpec(val myself: RoleName, _system: ActorSystem, _roles: if (verifySystemShutdown) throw new RuntimeException(msg) else system.log.warning(msg) } - atTermination() + afterTermination() } /** @@ -293,7 +293,7 @@ abstract class MultiNodeSpec(val myself: RoleName, _system: ActorSystem, _roles: /** * Override this method to do something when the whole test is terminating. */ - protected def atTermination(): Unit = {} + protected def afterTermination(): Unit = {} /** * All registered roles diff --git a/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala index 8e619d8bb3..7e27c1ffc1 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteCommunicationSpec.scala @@ -75,7 +75,7 @@ akka { val here = system.actorFor(RootActorPath(remoteAddr) / "user" / "echo") - override def atTermination() { + override def afterTermination() { other.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala index 1b21a5c4bd..95eb10f3af 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteDeathWatchSpec.scala @@ -31,7 +31,7 @@ akka { EventFilter.warning(pattern = "received dead letter.*Disassociate"))) } - override def atTermination() { + override def afterTermination() { other.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala index e3031a7cc2..869a45445f 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala @@ -70,7 +70,7 @@ akka.actor.deployment { }""").withFallback(system.settings.config) val otherSystem = ActorSystem("remote-sys", conf) - override def atTermination() { + override def afterTermination() { otherSystem.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala index 4a8e691b7d..177fb49a9a 100644 --- a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala @@ -114,7 +114,7 @@ class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with D val here = system.actorFor("test.akka://remote-sys@localhost:12346/user/echo") - override def atTermination() { + override def afterTermination() { other.shutdown() AssociationRegistry.clear() } diff --git a/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala b/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala index 7498cf269c..73d857aefc 100644 --- a/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala @@ -125,7 +125,7 @@ abstract class Ticket1978CommunicationSpec(val cipherConfig: CipherConfig) exten "remote-sys", ConfigFactory.parseString("akka.remote.netty.port=" + cipherConfig.remotePort).withFallback(system.settings.config)) - override def atTermination() { + override def afterTermination() { if (cipherConfig.runTest) { other.shutdown() other.awaitTermination() diff --git a/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala b/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala index 03b8b5a921..8e555ee9f6 100644 --- a/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala @@ -37,7 +37,7 @@ akka.loglevel = DEBUG val target1 = other.actorFor(RootActorPath(addr) / "remote") val target2 = other.actorFor(RootActorPath(addr) / testActor.path.elements) - override def atTermination() { + override def afterTermination() { other.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala index eba8670d79..0d2dcb002e 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/AkkaProtocolStressTest.scala @@ -96,6 +96,6 @@ class AkkaProtocolStressTest extends AkkaSpec(configA) with ImplicitSender with EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) } - override def atTermination(): Unit = systemB.shutdown() + override def afterTermination(): Unit = systemB.shutdown() } diff --git a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala index 8795c62412..134f58ee09 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala @@ -89,7 +89,7 @@ class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSende EventFilter.warning(pattern = "received dead letter.*(InboundPayload|Disassociate)"))) } - override def atTermination(): Unit = systemB.shutdown() + override def afterTermination(): Unit = systemB.shutdown() } class ThrottlerTransportAdapterGenericSpec extends GenericTransportSpec(withAkkaProtocol = true) { diff --git a/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala b/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala index 1ed8e22384..d1fc341447 100644 --- a/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala @@ -77,14 +77,14 @@ abstract class AkkaSpec(_system: ActorSystem) system.log.warning("Failed to stop [{}] within 5 seconds", system.name) println(system.asInstanceOf[ActorSystemImpl].printTree) } - atTermination() + afterTermination() } protected def atStartup() {} protected def beforeTermination() {} - protected def atTermination() {} + protected def afterTermination() {} def spawn(dispatcherId: String = Dispatchers.DefaultDispatcherId)(body: ⇒ Unit): Unit = Future(body)(system.dispatchers.lookup(dispatcherId)) From abb8366eb4be934035634b3ca6ca12f3d1da89f4 Mon Sep 17 00:00:00 2001 From: Crossing-Tech Date: Fri, 4 Jan 2013 10:48:38 +0100 Subject: [PATCH 021/122] rkuhn comments applied: no more extension --- .../src/main/scala/akka/osgi/OsgiActorSystemFactory.scala | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala b/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala index 9069e5d06d..620e4bfc5a 100644 --- a/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala +++ b/akka-osgi/src/main/scala/akka/osgi/OsgiActorSystemFactory.scala @@ -44,10 +44,8 @@ class OsgiActorSystemFactory(val context: BundleContext, val fallbackClassLoader def actorSystemConfig(context: BundleContext): Config = { val bundleSymbolicName = context.getBundle.getSymbolicName val bundleId = context.getBundle.getBundleId - val acceptedFileExtension = List("conf", "properties", "json") - val acceptedFileName = List(s"bundle-$bundleSymbolicName", s"bundle-$bundleId", "akka") - val configurationFiles = acceptedFileName.flatMap(x => acceptedFileExtension.map(y => s"etc/$x.$y")) - val applicationConfiguration = configurationFiles.foldLeft(ConfigFactory.empty())((x, y) => x.withFallback(ConfigFactory.parseFileAnySyntax(new File(y)))) + val acceptedFilePath = List(s"bundle-$bundleSymbolicName", s"bundle-$bundleId", "akka").map(x => s"etc/$x") + val applicationConfiguration = acceptedFilePath.foldLeft(ConfigFactory.empty())((x, y) => x.withFallback(ConfigFactory.parseFileAnySyntax(new File(y)))) applicationConfiguration.withFallback(ConfigFactory.load(classloader).withFallback(ConfigFactory.defaultReference(OsgiActorSystemFactory.akkaActorClassLoader))) } From 48c6374721f485d70a7c3eb8b5d302d0c85c2523 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Thu, 3 Jan 2013 14:51:41 +0100 Subject: [PATCH 022/122] Clean shutdown of ReliableProxySpec, see #2846 * Solved by adding missing Dequeue in throttler * Changed to FSM timers in throttler * Some boy scouting --- .../contrib/pattern/ReliableProxySpec.scala | 45 +++++----- akka-docs/rst/dev/multi-node-testing.rst | 4 +- .../akka/remote/testconductor/Conductor.scala | 26 +++--- .../akka/remote/testconductor/Extension.scala | 4 +- .../akka/remote/testkit/MultiNodeSpec.scala | 4 +- .../transport/ThrottlerTransportAdapter.scala | 85 ++++++++++--------- .../remote/transport/ThrottleModeSpec.scala | 40 ++++----- 7 files changed, 105 insertions(+), 103 deletions(-) diff --git a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala index deef1871c2..56d795c83b 100644 --- a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala +++ b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala @@ -37,8 +37,9 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod override def afterEach { runOn(local) { - testConductor.throttle(local, remote, Direction.Both, -1).await + testConductor.passThrough(local, remote, Direction.Both).await } + enterBarrier("after-each") } @volatile var target: ActorRef = system.deadLetters @@ -46,8 +47,8 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod def expectState(s: State) = expectMsg(FSM.CurrentState(proxy, s)) def expectTransition(s1: State, s2: State) = expectMsg(FSM.Transition(proxy, s1, s2)) - - def sendN(n: Int) = (1 to n) foreach (proxy ! _) + + def sendN(n: Int) = (1 to n) foreach (proxy ! _) def expectN(n: Int) = (1 to n) foreach { n ⇒ expectMsg(n); lastSender must be === target } "A ReliableProxy" must { @@ -82,6 +83,8 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod runOn(remote) { expectMsg("hello") } + + enterBarrier("initialize-done") } "forward messages in sequence" in { @@ -95,9 +98,9 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectN(100) } } - + enterBarrier("test1a") - + runOn(local) { sendN(100) expectTransition(Idle, Active) @@ -108,7 +111,7 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectN(100) } } - + enterBarrier("test1b") } @@ -121,17 +124,17 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectNoMsg } } - + enterBarrier("test2a") - + runOn(remote) { expectNoMsg(0 seconds) } - + enterBarrier("test2b") - + runOn(local) { - testConductor.throttle(local, remote, Direction.Send, -1).await + testConductor.passThrough(local, remote, Direction.Send).await within(5 seconds) { expectTransition(Active, Idle) } } runOn(remote) { @@ -139,7 +142,7 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectN(100) } } - + enterBarrier("test2c") } @@ -157,14 +160,14 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectN(100) } } - + enterBarrier("test3a") - + runOn(local) { - testConductor.throttle(local, remote, Direction.Receive, -1).await + testConductor.passThrough(local, remote, Direction.Receive).await within(5 seconds) { expectTransition(Active, Idle) } } - + enterBarrier("test3b") } @@ -182,11 +185,11 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectN(50) } } - + enterBarrier("test4a") - + runOn(local) { - testConductor.throttle(local, remote, Direction.Send, rateMBit = -1).await + testConductor.passThrough(local, remote, Direction.Send).await testConductor.throttle(local, remote, Direction.Receive, rateMBit = 0.1).await sendN(50) within(5 seconds) { @@ -199,8 +202,8 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod expectN(50) } } - - enterBarrier("test4a") + + enterBarrier("test4b") } } diff --git a/akka-docs/rst/dev/multi-node-testing.rst b/akka-docs/rst/dev/multi-node-testing.rst index b098317054..eb293eaeb8 100644 --- a/akka-docs/rst/dev/multi-node-testing.rst +++ b/akka-docs/rst/dev/multi-node-testing.rst @@ -207,8 +207,8 @@ surprising ways. * Don't issue a shutdown of the first node. The first node is the controller and if it shuts down your test will break. - * To be able to use ``blackhole``, ``passThrough``, and ``throttle`` you must activate the ``TestConductorTranport`` - by specifying ``testTransport(on = true)`` in your MultiNodeConfig. + * To be able to use ``blackhole``, ``passThrough``, and ``throttle`` you must activate the failure injector and + throttler transport adapters by specifying ``testTransport(on = true)`` in your MultiNodeConfig. * Throttling, shutdown and other failure injections can only be done from the first node, which again is the controller. diff --git a/akka-remote-tests/src/main/scala/akka/remote/testconductor/Conductor.scala b/akka-remote-tests/src/main/scala/akka/remote/testconductor/Conductor.scala index 31d05b8a71..ea14dccc57 100644 --- a/akka-remote-tests/src/main/scala/akka/remote/testconductor/Conductor.scala +++ b/akka-remote-tests/src/main/scala/akka/remote/testconductor/Conductor.scala @@ -94,8 +94,8 @@ trait Conductor { this: TestConductorExt ⇒ * increased latency. * * ====Note==== - * To use this feature you must activate the `TestConductorTranport` - * by specifying `testTransport(on = true)` in your MultiNodeConfig. + * To use this feature you must activate the failure injector and throttler + * transport adapters by specifying `testTransport(on = true)` in your MultiNodeConfig. * * @param node is the symbolic name of the node which is to be affected * @param target is the symbolic name of the other node to which connectivity shall be throttled @@ -115,18 +115,15 @@ trait Conductor { this: TestConductorExt ⇒ * Socket. * * ====Note==== - * To use this feature you must activate the `TestConductorTranport` - * by specifying `testTransport(on = true)` in your MultiNodeConfig. + * To use this feature you must activate the failure injector and throttler + * transport adapters by specifying `testTransport(on = true)` in your MultiNodeConfig. * * @param node is the symbolic name of the node which is to be affected * @param target is the symbolic name of the other node to which connectivity shall be impeded * @param direction can be either `Direction.Send`, `Direction.Receive` or `Direction.Both` */ - def blackhole(node: RoleName, target: RoleName, direction: Direction): Future[Done] = { - import Settings.QueryTimeout - requireTestConductorTranport() - controller ? Throttle(node, target, direction, 0f) mapTo classTag[Done] - } + def blackhole(node: RoleName, target: RoleName, direction: Direction): Future[Done] = + throttle(node, target, direction, 0f) private def requireTestConductorTranport(): Unit = if (!transport.defaultAddress.protocol.contains(".gremlin.trttl.")) throw new ConfigurationException("To use this feature you must activate the failure injector adapters " + @@ -137,18 +134,15 @@ trait Conductor { this: TestConductorExt ⇒ * sending and/or receiving. * * ====Note==== - * To use this feature you must activate the `TestConductorTranport` - * by specifying `testTransport(on = true)` in your MultiNodeConfig. + * To use this feature you must activate the failure injector and throttler + * transport adapters by specifying `testTransport(on = true)` in your MultiNodeConfig. * * @param node is the symbolic name of the node which is to be affected * @param target is the symbolic name of the other node to which connectivity shall be impeded * @param direction can be either `Direction.Send`, `Direction.Receive` or `Direction.Both` */ - def passThrough(node: RoleName, target: RoleName, direction: Direction): Future[Done] = { - import Settings.QueryTimeout - requireTestConductorTranport() - controller ? Throttle(node, target, direction, -1f) mapTo classTag[Done] - } + def passThrough(node: RoleName, target: RoleName, direction: Direction): Future[Done] = + throttle(node, target, direction, -1f) /** * Tell the remote support to shutdown the connection to the given remote diff --git a/akka-remote-tests/src/main/scala/akka/remote/testconductor/Extension.scala b/akka-remote-tests/src/main/scala/akka/remote/testconductor/Extension.scala index 4a054fdff4..3ad3027331 100644 --- a/akka-remote-tests/src/main/scala/akka/remote/testconductor/Extension.scala +++ b/akka-remote-tests/src/main/scala/akka/remote/testconductor/Extension.scala @@ -36,8 +36,8 @@ object TestConductor extends ExtensionKey[TestConductorExt] { * to be a [[akka.remote.RemoteActorRefProvider]]. * * To use ``blackhole``, ``passThrough``, and ``throttle`` you must activate the - * `TestConductorTranport` by specifying `testTransport(on = true)` in your - * MultiNodeConfig. + * failure injector and throttler transport adapters by specifying `testTransport(on = true)` + * in your MultiNodeConfig. * */ class TestConductorExt(val system: ExtendedActorSystem) extends Extension with Conductor with Player { diff --git a/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala b/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala index ec926dd3af..f390c1b32f 100644 --- a/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala +++ b/akka-remote-tests/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala @@ -87,8 +87,8 @@ abstract class MultiNodeConfig { /** * To be able to use `blackhole`, `passThrough`, and `throttle` you must - * activate the TestConductorTranport by specifying - * `testTransport(on = true)` in your MultiNodeConfig. + * activate the failure injector and throttler transport adapters by + * specifying `testTransport(on = true)` in your MultiNodeConfig. */ def testTransport(on: Boolean): Unit = _testTransport = on diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index d76bbbf071..82143f483a 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -59,43 +59,42 @@ object ThrottlerTransportAdapter { case class SetThrottle(address: Address, direction: Direction, mode: ThrottleMode) sealed trait ThrottleMode { - def tryConsumeTokens(timeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) - def timeToAvailable(currentTime: Long, tokens: Int): Long + def tryConsumeTokens(nanoTimeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) + def timeToAvailable(currentNanoTime: Long, tokens: Int): FiniteDuration } - case class TokenBucket(capacity: Int, tokensPerSecond: Double, lastSend: Long, availableTokens: Int) + case class TokenBucket(capacity: Int, tokensPerSecond: Double, nanoTimeOfLastSend: Long, availableTokens: Int) extends ThrottleMode { - private def isAvailable(timeOfSend: Long, tokens: Int): Boolean = if ((tokens > capacity && availableTokens > 0)) { + private def isAvailable(nanoTimeOfSend: Long, tokens: Int): Boolean = if ((tokens > capacity && availableTokens > 0)) { true // Allow messages larger than capacity through, it will be recorded as negative tokens - } else min((availableTokens + tokensGenerated(timeOfSend)), capacity) >= tokens + } else min((availableTokens + tokensGenerated(nanoTimeOfSend)), capacity) >= tokens - override def tryConsumeTokens(timeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) = { - if (isAvailable(timeOfSend, tokens)) + override def tryConsumeTokens(nanoTimeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) = { + if (isAvailable(nanoTimeOfSend, tokens)) (this.copy( - lastSend = timeOfSend, - availableTokens = min(availableTokens - tokens + tokensGenerated(timeOfSend), capacity)), true) + nanoTimeOfLastSend = nanoTimeOfSend, + availableTokens = min(availableTokens - tokens + tokensGenerated(nanoTimeOfSend), capacity)), true) else (this, false) } - override def timeToAvailable(currentTime: Long, tokens: Int): Long = { - val needed = (if (tokens > capacity) 1 else tokens) - tokensGenerated(currentTime) - TimeUnit.SECONDS.toNanos((needed / tokensPerSecond).toLong) + override def timeToAvailable(currentNanoTime: Long, tokens: Int): FiniteDuration = { + val needed = (if (tokens > capacity) 1 else tokens) - tokensGenerated(currentNanoTime) + (needed / tokensPerSecond).seconds } - private def tokensGenerated(timeOfSend: Long): Int = - (TimeUnit.NANOSECONDS.toMillis(timeOfSend - lastSend) * tokensPerSecond / 1000.0).toInt + private def tokensGenerated(nanoTimeOfSend: Long): Int = + (TimeUnit.NANOSECONDS.toMillis(nanoTimeOfSend - nanoTimeOfLastSend) * tokensPerSecond / 1000.0).toInt } case object Unthrottled extends ThrottleMode { - - override def tryConsumeTokens(timeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) = (this, true) - override def timeToAvailable(currentTime: Long, tokens: Int): Long = 1L + override def tryConsumeTokens(nanoTimeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) = (this, true) + override def timeToAvailable(currentNanoTime: Long, tokens: Int): FiniteDuration = Duration.Zero } case object Blackhole extends ThrottleMode { - override def tryConsumeTokens(timeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) = (this, false) - override def timeToAvailable(currentTime: Long, tokens: Int): Long = 0L + override def tryConsumeTokens(nanoTimeOfSend: Long, tokens: Int): (ThrottleMode, Boolean) = (this, false) + override def timeToAvailable(currentNanoTime: Long, tokens: Int): FiniteDuration = Duration.Zero } } @@ -215,6 +214,8 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A } object ThrottledAssociation { + private final val DequeueTimerName = "dequeue" + case object Dequeue sealed trait ThrottlerState @@ -253,7 +254,7 @@ private[transport] class ThrottledAssociation( import context.dispatcher var inboundThrottleMode: ThrottleMode = _ - var queue = Queue.empty[ByteString] + var throttledMessages = Queue.empty[ByteString] var upstreamListener: HandleEventListener = _ override def postStop(): Unit = originalHandle.disassociate() @@ -272,7 +273,7 @@ private[transport] class ThrottledAssociation( when(WaitOrigin) { case Event(InboundPayload(p), ExposedHandle(exposedHandle)) ⇒ - queue = queue enqueue p + throttledMessages = throttledMessages enqueue p peekOrigin(p) match { case Some(origin) ⇒ manager ! Checkin(origin, exposedHandle) @@ -283,12 +284,12 @@ private[transport] class ThrottledAssociation( when(WaitMode) { case Event(InboundPayload(p), _) ⇒ - queue = queue enqueue p + throttledMessages = throttledMessages enqueue p stay() case Event(mode: ThrottleMode, ExposedHandle(exposedHandle)) ⇒ inboundThrottleMode = mode if (inboundThrottleMode == Blackhole) { - queue = Queue.empty[ByteString] + throttledMessages = Queue.empty[ByteString] exposedHandle.disassociate() stop() } else { @@ -300,7 +301,7 @@ private[transport] class ThrottledAssociation( when(WaitUpstreamListener) { case Event(InboundPayload(p), _) ⇒ - queue = queue enqueue p + throttledMessages = throttledMessages enqueue p stay() case Event(listener: HandleEventListener, _) ⇒ upstreamListener = listener @@ -315,30 +316,30 @@ private[transport] class ThrottledAssociation( self ! Dequeue goto(Throttling) case Event(InboundPayload(p), _) ⇒ - queue = queue enqueue p + throttledMessages = throttledMessages enqueue p stay() } when(Throttling) { case Event(mode: ThrottleMode, _) ⇒ inboundThrottleMode = mode - if (inboundThrottleMode == Blackhole) queue = Queue.empty[ByteString] + if (inboundThrottleMode == Blackhole) throttledMessages = Queue.empty[ByteString] + cancelTimer(DequeueTimerName) + if (throttledMessages.nonEmpty) + scheduleDequeue(inboundThrottleMode.timeToAvailable(System.nanoTime(), throttledMessages.head.length)) stay() case Event(InboundPayload(p), _) ⇒ forwardOrDelay(p) stay() case Event(Dequeue, _) ⇒ - if (!queue.isEmpty) { - val (payload, newqueue) = queue.dequeue + if (throttledMessages.nonEmpty) { + val (payload, newqueue) = throttledMessages.dequeue upstreamListener notify InboundPayload(payload) - queue = newqueue + throttledMessages = newqueue inboundThrottleMode = inboundThrottleMode.tryConsumeTokens(System.nanoTime(), payload.length)._1 - if (inboundThrottleMode == Unthrottled && !queue.isEmpty) self ! Dequeue - else if (!queue.isEmpty) { - context.system.scheduler.scheduleOnce( - inboundThrottleMode.timeToAvailable(System.nanoTime(), queue.head.length).nanos, self, Dequeue) - } + if (throttledMessages.nonEmpty) + scheduleDequeue(inboundThrottleMode.timeToAvailable(System.nanoTime(), throttledMessages.head.length)) } stay() @@ -370,24 +371,28 @@ private[transport] class ThrottledAssociation( if (inboundThrottleMode == Blackhole) { // Do nothing } else { - if (queue.isEmpty) { + if (throttledMessages.isEmpty) { val tokens = payload.length val (newbucket, success) = inboundThrottleMode.tryConsumeTokens(System.nanoTime(), tokens) if (success) { inboundThrottleMode = newbucket upstreamListener notify InboundPayload(payload) } else { - queue = queue.enqueue(payload) - - context.system.scheduler.scheduleOnce( - inboundThrottleMode.timeToAvailable(System.nanoTime(), tokens).nanos, self, Dequeue) + throttledMessages = throttledMessages.enqueue(payload) + scheduleDequeue(inboundThrottleMode.timeToAvailable(System.nanoTime(), tokens)) } } else { - queue = queue.enqueue(payload) + throttledMessages = throttledMessages.enqueue(payload) } } } + def scheduleDequeue(delay: FiniteDuration): Unit = inboundThrottleMode match { + case Blackhole ⇒ // Do nothing + case _ if delay <= Duration.Zero ⇒ self ! Dequeue + case _ ⇒ setTimer(DequeueTimerName, Dequeue, delay, repeat = false) + } + } private[transport] case class ThrottlerHandle(_wrappedHandle: AssociationHandle, throttlerActor: ActorRef) diff --git a/akka-remote/src/test/scala/akka/remote/transport/ThrottleModeSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/ThrottleModeSpec.scala index c91007b479..bda2e0a517 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/ThrottleModeSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/ThrottleModeSpec.scala @@ -18,77 +18,77 @@ class ThrottleModeSpec extends AkkaSpec { } "in tokenbucket mode allow consuming tokens up to capacity" in { - val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, lastSend = 0L, availableTokens = 100) - val (bucket1, success1) = bucket.tryConsumeTokens(timeOfSend = 0L, 10) + val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, nanoTimeOfLastSend = 0L, availableTokens = 100) + val (bucket1, success1) = bucket.tryConsumeTokens(nanoTimeOfSend = 0L, 10) bucket1 must be(TokenBucket(100, 100, 0, 90)) success1 must be(true) - val (bucket2, success2) = bucket1.tryConsumeTokens(timeOfSend = 0L, 40) + val (bucket2, success2) = bucket1.tryConsumeTokens(nanoTimeOfSend = 0L, 40) bucket2 must be(TokenBucket(100, 100, 0, 50)) success2 must be(true) - val (bucket3, success3) = bucket2.tryConsumeTokens(timeOfSend = 0L, 50) + val (bucket3, success3) = bucket2.tryConsumeTokens(nanoTimeOfSend = 0L, 50) bucket3 must be(TokenBucket(100, 100, 0, 0)) success3 must be(true) - val (bucket4, success4) = bucket3.tryConsumeTokens(timeOfSend = 0, 1) + val (bucket4, success4) = bucket3.tryConsumeTokens(nanoTimeOfSend = 0, 1) bucket4 must be(TokenBucket(100, 100, 0, 0)) success4 must be(false) } "accurately replenish tokens" in { - val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, lastSend = 0L, availableTokens = 0) - val (bucket1, success1) = bucket.tryConsumeTokens(timeOfSend = 0L, 0) + val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, nanoTimeOfLastSend = 0L, availableTokens = 0) + val (bucket1, success1) = bucket.tryConsumeTokens(nanoTimeOfSend = 0L, 0) bucket1 must be(TokenBucket(100, 100, 0, 0)) success1 must be(true) - val (bucket2, success2) = bucket1.tryConsumeTokens(timeOfSend = halfSecond, 0) + val (bucket2, success2) = bucket1.tryConsumeTokens(nanoTimeOfSend = halfSecond, 0) bucket2 must be(TokenBucket(100, 100, halfSecond, 50)) success2 must be(true) - val (bucket3, success3) = bucket2.tryConsumeTokens(timeOfSend = 2 * halfSecond, 0) + val (bucket3, success3) = bucket2.tryConsumeTokens(nanoTimeOfSend = 2 * halfSecond, 0) bucket3 must be(TokenBucket(100, 100, 2 * halfSecond, 100)) success3 must be(true) - val (bucket4, success4) = bucket3.tryConsumeTokens(timeOfSend = 3 * halfSecond, 0) + val (bucket4, success4) = bucket3.tryConsumeTokens(nanoTimeOfSend = 3 * halfSecond, 0) bucket4 must be(TokenBucket(100, 100, 3 * halfSecond, 100)) success4 must be(true) } "accurately interleave replenish and consume" in { - val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, lastSend = 0L, availableTokens = 20) - val (bucket1, success1) = bucket.tryConsumeTokens(timeOfSend = 0L, 10) + val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, nanoTimeOfLastSend = 0L, availableTokens = 20) + val (bucket1, success1) = bucket.tryConsumeTokens(nanoTimeOfSend = 0L, 10) bucket1 must be(TokenBucket(100, 100, 0, 10)) success1 must be(true) - val (bucket2, success2) = bucket1.tryConsumeTokens(timeOfSend = halfSecond, 60) + val (bucket2, success2) = bucket1.tryConsumeTokens(nanoTimeOfSend = halfSecond, 60) bucket2 must be(TokenBucket(100, 100, halfSecond, 0)) success2 must be(true) - val (bucket3, success3) = bucket2.tryConsumeTokens(timeOfSend = 2 * halfSecond, 40) + val (bucket3, success3) = bucket2.tryConsumeTokens(nanoTimeOfSend = 2 * halfSecond, 40) bucket3 must be(TokenBucket(100, 100, 2 * halfSecond, 10)) success3 must be(true) - val (bucket4, success4) = bucket3.tryConsumeTokens(timeOfSend = 3 * halfSecond, 70) + val (bucket4, success4) = bucket3.tryConsumeTokens(nanoTimeOfSend = 3 * halfSecond, 70) bucket4 must be(TokenBucket(100, 100, 2 * halfSecond, 10)) success4 must be(false) } "allow oversized packets through by loaning" in { - val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, lastSend = 0L, availableTokens = 20) - val (bucket1, success1) = bucket.tryConsumeTokens(timeOfSend = 0L, 30) + val bucket = TokenBucket(capacity = 100, tokensPerSecond = 100, nanoTimeOfLastSend = 0L, availableTokens = 20) + val (bucket1, success1) = bucket.tryConsumeTokens(nanoTimeOfSend = 0L, 30) bucket1 must be(TokenBucket(100, 100, 0, 20)) success1 must be(false) - val (bucket2, success2) = bucket1.tryConsumeTokens(timeOfSend = halfSecond, 110) + val (bucket2, success2) = bucket1.tryConsumeTokens(nanoTimeOfSend = halfSecond, 110) bucket2 must be(TokenBucket(100, 100, halfSecond, -40)) success2 must be(true) - val (bucket3, success3) = bucket2.tryConsumeTokens(timeOfSend = 2 * halfSecond, 20) + val (bucket3, success3) = bucket2.tryConsumeTokens(nanoTimeOfSend = 2 * halfSecond, 20) bucket3 must be(TokenBucket(100, 100, halfSecond, -40)) success3 must be(false) - val (bucket4, success4) = bucket3.tryConsumeTokens(timeOfSend = 3 * halfSecond, 20) + val (bucket4, success4) = bucket3.tryConsumeTokens(nanoTimeOfSend = 3 * halfSecond, 20) bucket4 must be(TokenBucket(100, 100, 3 * halfSecond, 40)) success4 must be(true) } From f876d921ffccc04eb45daccfc23b7582299733d4 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 4 Jan 2013 13:07:56 +0100 Subject: [PATCH 023/122] fix broken rename of nanoTimeOfLastSend --- .../scala/akka/remote/testconductor/Player.scala | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/akka-remote-tests/src/main/scala/akka/remote/testconductor/Player.scala b/akka-remote-tests/src/main/scala/akka/remote/testconductor/Player.scala index f6bf469b36..f3b7a89c08 100644 --- a/akka-remote-tests/src/main/scala/akka/remote/testconductor/Player.scala +++ b/akka-remote-tests/src/main/scala/akka/remote/testconductor/Player.scala @@ -52,12 +52,16 @@ trait Player { this: TestConductorExt ⇒ val a = system.actorOf(Props(new Actor { var waiting: ActorRef = _ def receive = { - case fsm: ActorRef ⇒ waiting = sender; fsm ! SubscribeTransitionCallBack(self) + case fsm: ActorRef ⇒ + waiting = sender; fsm ! SubscribeTransitionCallBack(self) case Transition(_, Connecting, AwaitDone) ⇒ // step 1, not there yet - case Transition(_, AwaitDone, Connected) ⇒ waiting ! Done; context stop self - case t: Transition[_] ⇒ waiting ! Status.Failure(new RuntimeException("unexpected transition: " + t)); context stop self - case CurrentState(_, Connected) ⇒ waiting ! Done; context stop self - case _: CurrentState[_] ⇒ + case Transition(_, AwaitDone, Connected) ⇒ + waiting ! Done; context stop self + case t: Transition[_] ⇒ + waiting ! Status.Failure(new RuntimeException("unexpected transition: " + t)); context stop self + case CurrentState(_, Connected) ⇒ + waiting ! Done; context stop self + case _: CurrentState[_] ⇒ } })) @@ -218,7 +222,7 @@ private[akka] class ClientFSM(name: RoleName, controllerAddr: InetSocketAddress) else if (t.rateMBit == 0.0f) Blackhole // Conversion needed as the TokenBucket measures in octets: 125000 Octets/s = 1Mbit/s // FIXME: Initial capacity should be carefully chosen - else TokenBucket(capacity = 1000, tokensPerSecond = t.rateMBit * 125000.0, lastSend = 0, availableTokens = 0) + else TokenBucket(capacity = 1000, tokensPerSecond = t.rateMBit * 125000.0, nanoTimeOfLastSend = 0, availableTokens = 0) val cmdFuture = TestConductor().transport.managementCommand(SetThrottle(t.target, t.direction, mode)) From 6fae695b3cdece228cf5c6e210f1104af8b4d0b8 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 4 Jan 2013 11:44:12 +0100 Subject: [PATCH 024/122] Enable blackhole tests again, see #2832 --- .../src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala | 2 +- .../scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala index 4fe1f551aa..95b362e6b3 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala @@ -59,7 +59,7 @@ abstract class SplitBrainSpec(multiNodeConfig: SplitBrainMultiNodeConfig) val side1 = Vector(first, second) val side2 = Vector(third, fourth, fifth) - "A cluster of 5 members" ignore { + "A cluster of 5 members" must { "reach initial convergence" taggedAs LongRunningTest in { awaitClusterUp(first, second, third, fourth, fifth) diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala index 45760a3bcd..99b076b8d6 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala @@ -67,7 +67,7 @@ abstract class UnreachableNodeRejoinsClusterSpec(multiNodeConfig: UnreachableNod enterBarrier("after_" + endBarrierNumber) } - "A cluster of " + roles.size + " members" ignore { + "A cluster of " + roles.size + " members" must { "reach initial convergence" taggedAs LongRunningTest in { awaitClusterUp(roles: _*) From 58324eb2632e39e2d59f8d78f8f29ee75c08447f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Fri, 4 Jan 2013 11:25:54 +0100 Subject: [PATCH 025/122] Enforcing ordering of Terminated wrt remote/local #2835 --- .../src/main/scala/akka/actor/Address.scala | 1 + .../scala/akka/actor/dungeon/DeathWatch.scala | 26 ++++++++++++++----- .../akka/actor/dungeon/FaultHandling.scala | 6 ++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/Address.scala b/akka-actor/src/main/scala/akka/actor/Address.scala index d98bbcb208..33c147de7a 100644 --- a/akka-actor/src/main/scala/akka/actor/Address.scala +++ b/akka-actor/src/main/scala/akka/actor/Address.scala @@ -19,6 +19,7 @@ import scala.collection.immutable */ @SerialVersionUID(1L) final case class Address private (protocol: String, system: String, host: Option[String], port: Option[Int]) { + // Please note that local/non-local distinction must be preserved: host.isDefined == !isLocal def this(protocol: String, system: String) = this(protocol, system, None, None) def this(protocol: String, system: String, host: String, port: Int) = this(protocol, system, Option(host), Some(port)) diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala b/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala index 70f79f1d48..313796ad68 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala @@ -4,7 +4,7 @@ package akka.actor.dungeon -import akka.actor.{ Terminated, InternalActorRef, ActorRef, ActorCell, Actor, Address, AddressTerminated } +import akka.actor.{ Terminated, InternalActorRef, ActorRef, ActorRefScope, ActorCell, Actor, Address, AddressTerminated } import akka.dispatch.{ Watch, Unwatch } import akka.event.Logging.{ Warning, Error, Debug } import scala.util.control.NonFatal @@ -51,12 +51,24 @@ private[akka] trait DeathWatch { this: ActorCell ⇒ if (!watchedBy.isEmpty) { val terminated = Terminated(self)(existenceConfirmed = true, addressTerminated = false) try { - watchedBy foreach { - watcher ⇒ - try watcher.tell(terminated, self) catch { - case NonFatal(t) ⇒ publish(Error(t, self.path.toString, clazz(actor), "deathwatch")) - } - } + def sendTerminated(ifLocal: Boolean)(watcher: ActorRef): Unit = + if (watcher.asInstanceOf[ActorRefScope].isLocal == ifLocal) watcher.tell(terminated, self) + + /* + * It is important to notify the remote watchers first, otherwise RemoteDaemon might shut down, causing + * the remoting to shut down as well. At this point Terminated messages to remote watchers are no longer + * deliverable. + * + * The problematic case is: + * 1. Terminated is sent to RemoteDaemon + * 1a. RemoteDaemon is fast enough to notify the terminator actor in RemoteActorRefProvider + * 1b. The terminator is fast enough to enqueue the shutdown command in the remoting + * 2. Only at this point is the Terminated (to be sent remotely) enqueued in the mailbox of remoting + * + * If the remote watchers are notified first, then the mailbox of the Remoting will guarantee the correct order. + */ + watchedBy foreach sendTerminated(ifLocal = false) + watchedBy foreach sendTerminated(ifLocal = true) } finally watchedBy = ActorCell.emptyActorRefSet } } diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala index ac4f5b5c36..c2ff511809 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala @@ -190,7 +190,11 @@ private[akka] trait FaultHandling { this: ActorCell ⇒ private def finishTerminate() { val a = actor - // The following order is crucial for things to work properly. Only chnage this if you're very confident and lucky. + /* The following order is crucial for things to work properly. Only change this if you're very confident and lucky. + * + * Please note that if a parent is also a watcher then ChildTerminated and Terminated must be processed in this + * specific order. + */ try if (a ne null) a.postStop() finally try dispatcher.detach(this) finally try parent.sendSystemMessage(ChildTerminated(self)) From dc5f835f1f72cf3cd2a31317864cf891904669ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Fri, 4 Jan 2013 14:24:39 +0100 Subject: [PATCH 026/122] Added scope query methods to Address. --- .../src/main/scala/akka/actor/Address.scala | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/akka-actor/src/main/scala/akka/actor/Address.scala b/akka-actor/src/main/scala/akka/actor/Address.scala index 33c147de7a..f02dcfb567 100644 --- a/akka-actor/src/main/scala/akka/actor/Address.scala +++ b/akka-actor/src/main/scala/akka/actor/Address.scala @@ -19,11 +19,27 @@ import scala.collection.immutable */ @SerialVersionUID(1L) final case class Address private (protocol: String, system: String, host: Option[String], port: Option[Int]) { - // Please note that local/non-local distinction must be preserved: host.isDefined == !isLocal + // Please note that local/non-local distinction must be preserved: + // host.isDefined == hasGlobalScope + // host.isEmpty == hasLocalScope + // hasLocalScope == !hasGlobalScope def this(protocol: String, system: String) = this(protocol, system, None, None) def this(protocol: String, system: String, host: String, port: Int) = this(protocol, system, Option(host), Some(port)) + /** + * Returns true if this Address is only defined locally. It is not safe to send locally scoped addresses to remote + * hosts. See also [[akka.actor.Address#hasGlobalScope]]. + */ + def hasLocalScope: Boolean = host.isEmpty + + /** + * Returns true if this Address is usable globally. Unlike locally defined addresses ([[akka.actor.Address#hasLocalScope]]) + * addresses of global scope are safe to sent to other hosts, as they globally and uniquely identify an addressable + * entity. + */ + def hasGlobalScope: Boolean = host.isDefined + /** * Returns the canonical String representation of this Address formatted as: * From 06f1945561f737d211dc0bde91391dc54ef76d2d Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 4 Jan 2013 12:59:45 +0100 Subject: [PATCH 027/122] Improve ReliableProxy resend across a slow link, see #2849 * The within margin was too small. On my machine the transition to Idle is done when 400 ms is remaining, which is too timing sensitive. * Improved the "resend across a slow link" test to actually trigger resending, which it didn't do before. --- .../contrib/pattern/ReliableProxySpec.scala | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala index 56d795c83b..cd2d2b6157 100644 --- a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala +++ b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala @@ -171,12 +171,18 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod enterBarrier("test3b") } - "resend across a slow link" in { + "resend across a slow outbound link" in { runOn(local) { - testConductor.throttle(local, remote, Direction.Send, rateMBit = 0.1).await + // the rateMBit value is derived from empirical studies so that it will trigger resends, + // the exact value is not important, but it must not be too large + testConductor.throttle(local, remote, Direction.Send, rateMBit = 0.02).await sendN(50) within(5 seconds) { expectTransition(Idle, Active) + // use the slow link for a while, which will trigger resends + Thread.sleep(2000) + // full speed, and it will catch up outstanding messages + testConductor.passThrough(local, remote, Direction.Send).await expectTransition(Active, Idle) } } @@ -184,16 +190,25 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod within(5 seconds) { expectN(50) } + expectNoMsg(1 second) } - enterBarrier("test4a") + enterBarrier("test4") + } + "resend across a slow inbound link" in { runOn(local) { testConductor.passThrough(local, remote, Direction.Send).await - testConductor.throttle(local, remote, Direction.Receive, rateMBit = 0.1).await + // the rateMBit value is derived from empirical studies so that it will trigger resends, + // the exact value is not important, but it must not be too large + testConductor.throttle(local, remote, Direction.Receive, rateMBit = 0.02).await sendN(50) within(5 seconds) { expectTransition(Idle, Active) + // use the slow link for a while, which will trigger resends + Thread.sleep(2000) + // full speed, and it will catch up outstanding messages + testConductor.passThrough(local, remote, Direction.Receive).await expectTransition(Active, Idle) } } @@ -201,9 +216,10 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod within(1 second) { expectN(50) } + expectNoMsg(2 seconds) } - enterBarrier("test4b") + enterBarrier("test5") } } From f147f4d3d27ce626cec21d879666212ec5a1ed79 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Wed, 12 Dec 2012 11:49:20 +0100 Subject: [PATCH 028/122] Stress / long running test of cluster, see #2786 * akka.cluster.StressSpec * Configurable number of nodes and duration for each step * Report metrics and phi periodically to see progress * Configurable payload size * Test of various join and remove scenarios * Test of watch * Exercise supervision * Report cluster stats * Test with many actors in tree structure Apart from the test this commit also solves some issues: * Avoid adding back members when downed in ClusterHeartbeatSender * Avoid duplicate close of ClusterReadView * Add back the publish of AddressTerminated when MemberDowned/Removed it was lost in merge of "publish on convergence", see #2779 --- .../scala/akka/cluster/ClusterEvent.scala | 18 +- .../scala/akka/cluster/ClusterHeartbeat.scala | 1 + .../main/scala/akka/cluster/ClusterJmx.scala | 1 - ...ientDowningNodeThatIsUnreachableSpec.scala | 4 +- .../ClientDowningNodeThatIsUpSpec.scala | 4 +- ...aderDowningNodeThatIsUnreachableSpec.scala | 8 +- .../scala/akka/cluster/MBeanSpec.scala | 2 +- .../akka/cluster/MultiNodeClusterSpec.scala | 8 +- .../akka/cluster/SingletonClusterSpec.scala | 2 +- .../scala/akka/cluster/SplitBrainSpec.scala | 4 +- .../scala/akka/cluster/StressSpec.scala | 1082 +++++++++++++++++ .../UnreachableNodeRejoinsClusterSpec.scala | 2 +- 12 files changed, 1112 insertions(+), 24 deletions(-) create mode 100644 akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala index c896e721cc..7d1997649d 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala @@ -284,18 +284,24 @@ private[cluster] final class ClusterDomainEventPublisher extends Actor with Acto // keep the latestGossip to be sent to new subscribers latestGossip = newGossip // first publish the diffUnreachable between the last two gossips - diffUnreachable(oldGossip, newGossip) foreach { event ⇒ - publish(event) - // notify DeathWatch about unreachable node - publish(AddressTerminated(event.member.address)) - } + diffUnreachable(oldGossip, newGossip) foreach publish // buffer up the MemberEvents waiting for convergence memberEvents ++= diffMemberEvents(oldGossip, newGossip) // if we have convergence then publish the MemberEvents and possibly a LeaderChanged if (newGossip.convergence) { val previousConvergedGossip = latestConvergedGossip latestConvergedGossip = newGossip - memberEvents foreach publish + memberEvents foreach { event ⇒ + event match { + case m @ (MemberDowned(_) | MemberRemoved(_)) ⇒ + // TODO MemberDowned match should probably be covered by MemberRemoved, see ticket #2788 + // but right now we don't change Downed to Removed + publish(event) + // notify DeathWatch about downed node + publish(AddressTerminated(m.member.address)) + case _ ⇒ publish(event) + } + } memberEvents = immutable.Seq.empty diffLeader(previousConvergedGossip, latestConvergedGossip) foreach publish } diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala index 3ada580bb2..94e4e9b9f9 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala @@ -116,6 +116,7 @@ private[cluster] final class ClusterHeartbeatSender extends Actor with ActorLogg case HeartbeatTick ⇒ heartbeat() case s: CurrentClusterState ⇒ reset(s) case UnreachableMember(m) ⇒ removeMember(m) + case MemberDowned(m) ⇒ removeMember(m) case MemberRemoved(m) ⇒ removeMember(m) case e: MemberEvent ⇒ addMember(e.member) case JoinInProgress(a, d) ⇒ addJoinInProgress(a, d) diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala index ae023263c8..ec0c38a944 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala @@ -140,7 +140,6 @@ private[akka] class ClusterJmx(cluster: Cluster, log: LoggingAdapter) { * Unregisters the cluster JMX MBean from MBean server. */ def unregisterMBean(): Unit = { - clusterView.close() try { mBeanServer.unregisterMBean(clusterMBeanName) } catch { diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala index bf1009b472..a10e941c3f 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala @@ -52,7 +52,7 @@ abstract class ClientDowningNodeThatIsUnreachableSpec(multiNodeConfig: ClientDow cluster.down(thirdAddress) enterBarrier("down-third-node") - awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = List(thirdAddress)) + awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = Set(thirdAddress)) clusterView.members.exists(_.address == thirdAddress) must be(false) } @@ -63,7 +63,7 @@ abstract class ClientDowningNodeThatIsUnreachableSpec(multiNodeConfig: ClientDow runOn(second, fourth) { enterBarrier("down-third-node") - awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = List(thirdAddress)) + awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = Set(thirdAddress)) } enterBarrier("await-completion") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala index 2a0af15997..a8c8bdb736 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala @@ -50,7 +50,7 @@ abstract class ClientDowningNodeThatIsUpSpec(multiNodeConfig: ClientDowningNodeT markNodeAsUnavailable(thirdAddress) - awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = List(thirdAddress)) + awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = Set(thirdAddress)) clusterView.members.exists(_.address == thirdAddress) must be(false) } @@ -61,7 +61,7 @@ abstract class ClientDowningNodeThatIsUpSpec(multiNodeConfig: ClientDowningNodeT runOn(second, fourth) { enterBarrier("down-third-node") - awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = List(thirdAddress)) + awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = Set(thirdAddress)) } enterBarrier("await-completion") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala index 279e32ab66..6a917be56e 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala @@ -60,7 +60,7 @@ abstract class LeaderDowningNodeThatIsUnreachableSpec(multiNodeConfig: LeaderDow // --- HERE THE LEADER SHOULD DETECT FAILURE AND AUTO-DOWN THE UNREACHABLE NODE --- - awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = List(fourthAddress), 30.seconds) + awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = Set(fourthAddress), 30.seconds) } runOn(fourth) { @@ -70,7 +70,7 @@ abstract class LeaderDowningNodeThatIsUnreachableSpec(multiNodeConfig: LeaderDow runOn(second, third) { enterBarrier("down-fourth-node") - awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = List(fourthAddress), 30.seconds) + awaitUpConvergence(numberOfMembers = 3, canNotBePartOfMemberRing = Set(fourthAddress), 30.seconds) } enterBarrier("await-completion-1") @@ -90,7 +90,7 @@ abstract class LeaderDowningNodeThatIsUnreachableSpec(multiNodeConfig: LeaderDow // --- HERE THE LEADER SHOULD DETECT FAILURE AND AUTO-DOWN THE UNREACHABLE NODE --- - awaitUpConvergence(numberOfMembers = 2, canNotBePartOfMemberRing = List(secondAddress), 30.seconds) + awaitUpConvergence(numberOfMembers = 2, canNotBePartOfMemberRing = Set(secondAddress), 30.seconds) } runOn(second) { @@ -100,7 +100,7 @@ abstract class LeaderDowningNodeThatIsUnreachableSpec(multiNodeConfig: LeaderDow runOn(third) { enterBarrier("down-second-node") - awaitUpConvergence(numberOfMembers = 2, canNotBePartOfMemberRing = List(secondAddress), 30 seconds) + awaitUpConvergence(numberOfMembers = 2, canNotBePartOfMemberRing = Set(secondAddress), 30 seconds) } enterBarrier("await-completion-2") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala index e6d83f881e..5d55afb00f 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala @@ -115,7 +115,7 @@ abstract class MBeanSpec enterBarrier("fourth-down") runOn(first, second, third) { - awaitUpConvergence(3, canNotBePartOfMemberRing = List(fourthAddress)) + awaitUpConvergence(3, canNotBePartOfMemberRing = Set(fourthAddress)) assertMembers(clusterView.members, first, second, third) } diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala index fd2714005b..9d7447e6c9 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala @@ -218,17 +218,17 @@ trait MultiNodeClusterSpec extends Suite with STMultiNodeSpec { self: MultiNodeS */ def awaitUpConvergence( numberOfMembers: Int, - canNotBePartOfMemberRing: immutable.Seq[Address] = Nil, + canNotBePartOfMemberRing: Set[Address] = Set.empty, timeout: FiniteDuration = 20.seconds): Unit = { within(timeout) { + if (!canNotBePartOfMemberRing.isEmpty) // don't run this on an empty set + awaitCond( + canNotBePartOfMemberRing forall (address ⇒ !(clusterView.members exists (_.address == address)))) awaitCond(clusterView.members.size == numberOfMembers) awaitCond(clusterView.members.forall(_.status == MemberStatus.Up)) // clusterView.leader is updated by LeaderChanged, await that to be updated also val expectedLeader = clusterView.members.headOption.map(_.address) awaitCond(clusterView.leader == expectedLeader) - if (!canNotBePartOfMemberRing.isEmpty) // don't run this on an empty set - awaitCond( - canNotBePartOfMemberRing forall (address ⇒ !(clusterView.members exists (_.address == address)))) } } diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala index 33ce67ecb5..d1e7098f9b 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala @@ -66,7 +66,7 @@ abstract class SingletonClusterSpec(multiNodeConfig: SingletonClusterMultiNodeCo markNodeAsUnavailable(secondAddress) - awaitUpConvergence(numberOfMembers = 1, canNotBePartOfMemberRing = List(secondAddress), 30.seconds) + awaitUpConvergence(numberOfMembers = 1, canNotBePartOfMemberRing = Set(secondAddress), 30.seconds) clusterView.isSingletonCluster must be(true) awaitCond(clusterView.isLeader) } diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala index 95b362e6b3..0633969319 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala @@ -102,7 +102,7 @@ abstract class SplitBrainSpec(multiNodeConfig: SplitBrainMultiNodeConfig) // auto-down = on awaitCond(clusterView.unreachableMembers.forall(m ⇒ m.status == MemberStatus.Down), 15 seconds) clusterView.unreachableMembers.map(_.address) must be(side2.toSet map address) - awaitUpConvergence(side1.size, side2 map address) + awaitUpConvergence(side1.size, side2.toSet map address) assertLeader(side1: _*) } @@ -110,7 +110,7 @@ abstract class SplitBrainSpec(multiNodeConfig: SplitBrainMultiNodeConfig) // auto-down = on awaitCond(clusterView.unreachableMembers.forall(m ⇒ m.status == MemberStatus.Down), 15 seconds) clusterView.unreachableMembers.map(_.address) must be(side1.toSet map address) - awaitUpConvergence(side2.size, side1 map address) + awaitUpConvergence(side2.size, side1.toSet map address) assertLeader(side2: _*) } diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala new file mode 100644 index 0000000000..707e96610f --- /dev/null +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala @@ -0,0 +1,1082 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ +package akka.cluster + +import language.postfixOps +import scala.annotation.tailrec +import scala.collection.immutable +import scala.concurrent.duration._ +import scala.concurrent.forkjoin.ThreadLocalRandom +import org.scalatest.BeforeAndAfterEach +import com.typesafe.config.Config +import com.typesafe.config.ConfigFactory +import akka.actor.Actor +import akka.actor.ActorLogging +import akka.actor.ActorRef +import akka.actor.ActorSystem +import akka.actor.Address +import akka.actor.Deploy +import akka.actor.OneForOneStrategy +import akka.actor.Props +import akka.actor.RootActorPath +import akka.actor.SupervisorStrategy._ +import akka.actor.Terminated +import akka.cluster.ClusterEvent.ClusterMetricsChanged +import akka.cluster.ClusterEvent.CurrentClusterState +import akka.cluster.ClusterEvent.MemberEvent +import akka.cluster.StandardMetrics.Cpu +import akka.cluster.StandardMetrics.HeapMemory +import akka.remote.RemoteScope +import akka.remote.testkit.MultiNodeConfig +import akka.remote.testkit.MultiNodeSpec +import akka.routing.FromConfig +import akka.testkit._ +import akka.testkit.TestEvent._ + +/** + * This test is intended to be used as long running stress test + * of cluster related features. Number of nodes and duration of + * the test steps can be configured. The test scenario is organized as + * follows: + * 1. join nodes in various ways up to the configured total number of nodes + * 2 while nodes are joining a few cluster aware routers are also working + * 3. exercise concurrent joining and shutdown of nodes repeatedly + * 4. exercise cluster aware routers, including high throughput + * 5. exercise many actors in a tree structure + * 6. exercise remote supervision + * 7. leave and shutdown nodes in various ways + * 8. while nodes are removed remote death watch is also exercised + * 9. while nodes are removed a few cluster aware routers are also working + */ +object StressMultiJvmSpec extends MultiNodeConfig { + + // Note that this test uses default configuration, + // not MultiNodeClusterSpec.clusterConfig + commonConfig(ConfigFactory.parseString(""" + akka.test.cluster-stress-spec { + # scale the nr-of-nodes* settings with this factor + nr-of-nodes-factor = 1 + nr-of-nodes = 13 + # not scaled + nr-of-seed-nodes = 3 + nr-of-nodes-joining-to-seed-initally = 2 + nr-of-nodes-joining-one-by-one-small = 2 + nr-of-nodes-joining-one-by-one-large = 2 + nr-of-nodes-joining-to-one = 2 + nr-of-nodes-joining-to-seed = 2 + nr-of-nodes-leaving-one-by-one-small = 1 + nr-of-nodes-leaving-one-by-one-large = 2 + nr-of-nodes-leaving = 2 + nr-of-nodes-shutdown-one-by-one-small = 1 + nr-of-nodes-shutdown-one-by-one-large = 2 + nr-of-nodes-shutdown = 2 + nr-of-nodes-join-remove = 2 + # not scaled + join-remove-duration = 90s + work-batch-size = 100 + work-batch-interval = 2s + payload-size = 1000 + # scale the *-duration settings with this factor + duration-factor = 1 + normal-throughput-duration = 30s + high-throughput-duration = 10s + supervision-duration = 10s + # actors are created in a tree structure defined + # by tree-width (number of children for each actor) and + # tree-levels, total number of actors can be calculated by + # (width * math.pow(width, levels) - 1) / (width - 1) + tree-width = 5 + tree-levels = 4 + report-metrics-interval = 10s + # scale convergence within timeouts with this factor + convergence-within-factor = 1.0 + } + + akka.actor.provider = akka.cluster.ClusterActorRefProvider + akka.cluster { + auto-join = off + auto-down = on + publish-stats-interval = 0 s # always, when it happens + } + akka.event-handlers = ["akka.testkit.TestEventListener"] + akka.loglevel = INFO + akka.remote.log-remote-lifecycle-events = off + + akka.actor.deployment { + /master-node-1/workers { + router = round-robin + nr-of-instances = 100 + cluster { + enabled = on + max-nr-of-instances-per-node = 1 + allow-local-routees = off + } + } + /master-node-2/workers { + router = round-robin + nr-of-instances = 100 + cluster { + enabled = on + routees-path = "/user/worker" + allow-local-routees = off + } + } + /master-node-3/workers = { + router = adaptive + nr-of-instances = 100 + cluster { + enabled = on + max-nr-of-instances-per-node = 1 + allow-local-routees = off + } + } + } + """)) + + class Settings(conf: Config) { + private val testConfig = conf.getConfig("akka.test.cluster-stress-spec") + import testConfig._ + + private def getDuration(name: String): FiniteDuration = Duration(getMilliseconds(name), MILLISECONDS) + + val nFactor = getInt("nr-of-nodes-factor") + val totalNumberOfNodes = getInt("nr-of-nodes") * nFactor ensuring ( + _ >= 10, "nr-of-nodes must be >= 10") + val numberOfSeedNodes = getInt("nr-of-seed-nodes") // not scaled by nodes factor + val numberOfNodesJoiningToSeedNodesInitially = getInt("nr-of-nodes-joining-to-seed-initally") * nFactor + val numberOfNodesJoiningOneByOneSmall = getInt("nr-of-nodes-joining-one-by-one-small") * nFactor + val numberOfNodesJoiningOneByOneLarge = getInt("nr-of-nodes-joining-one-by-one-large") * nFactor + val numberOfNodesJoiningToOneNode = getInt("nr-of-nodes-joining-to-one") * nFactor + val numberOfNodesJoiningToSeedNodes = getInt("nr-of-nodes-joining-to-seed") * nFactor + val numberOfNodesLeavingOneByOneSmall = getInt("nr-of-nodes-leaving-one-by-one-small") * nFactor + val numberOfNodesLeavingOneByOneLarge = getInt("nr-of-nodes-leaving-one-by-one-large") * nFactor + val numberOfNodesLeaving = getInt("nr-of-nodes-leaving") * nFactor + val numberOfNodesShutdownOneByOneSmall = getInt("nr-of-nodes-shutdown-one-by-one-small") * nFactor + val numberOfNodesShutdownOneByOneLarge = getInt("nr-of-nodes-shutdown-one-by-one-large") * nFactor + val numberOfNodesShutdown = getInt("nr-of-nodes-shutdown") * nFactor + val numberOfNodesJoinRemove = getInt("nr-of-nodes-join-remove") // not scaled by nodes factor + + val workBatchSize = getInt("work-batch-size") + val workBatchInterval = Duration(getMilliseconds("work-batch-interval"), MILLISECONDS) + val payloadSize = getInt("payload-size") + val dFactor = getInt("duration-factor") + val joinRemoveDuration = getDuration("join-remove-duration") * dFactor + val normalThroughputDuration = getDuration("normal-throughput-duration") * dFactor + val highThroughputDuration = getDuration("high-throughput-duration") * dFactor + val supervisionDuration = getDuration("supervision-duration") * dFactor + val treeWidth = getInt("tree-width") + val treeLevels = getInt("tree-levels") + val reportMetricsInterval = getDuration("report-metrics-interval") + val convergenceWithinFactor = getDouble("convergence-within-factor") + + require(numberOfSeedNodes + numberOfNodesJoiningToSeedNodesInitially + numberOfNodesJoiningOneByOneSmall + + numberOfNodesJoiningOneByOneLarge + numberOfNodesJoiningToOneNode + numberOfNodesJoiningToSeedNodes <= totalNumberOfNodes, + s"specified number of joining nodes <= ${totalNumberOfNodes}") + + // don't shutdown the 3 nodes hosting the master actors + require(numberOfNodesLeavingOneByOneSmall + numberOfNodesLeavingOneByOneLarge + numberOfNodesLeaving + + numberOfNodesShutdownOneByOneSmall + numberOfNodesShutdownOneByOneLarge + numberOfNodesShutdown <= totalNumberOfNodes - 3, + s"specified number of leaving/shutdown nodes <= ${totalNumberOfNodes - 3}") + + require(numberOfNodesJoinRemove <= totalNumberOfNodes, s"nr-of-nodes-join-remove must be <= ${totalNumberOfNodes}") + } + + // FIXME configurable number of nodes + for (n ← 1 to 13) role("node-" + n) + + implicit class FormattedDouble(val d: Double) extends AnyVal { + def form: String = d.formatted("%.2f") + } + + case class ClusterResult( + address: Address, + duration: Duration, + clusterStats: ClusterStats) + + case class AggregatedClusterResult(title: String, duration: Duration, clusterStats: ClusterStats) + + /** + * Central aggregator of cluster statistics and metrics. + * Reports the result via log periodically and when all + * expected results has been collected. It shuts down + * itself when expected results has been collected. + */ + class ClusterResultAggregator(title: String, expectedResults: Int, reportMetricsInterval: FiniteDuration) extends Actor with ActorLogging { + val cluster = Cluster(context.system) + var reportTo: Option[ActorRef] = None + var results = Vector.empty[ClusterResult] + var nodeMetrics = Set.empty[NodeMetrics] + var phiValuesObservedByNode = { + import akka.cluster.Member.addressOrdering + immutable.SortedMap.empty[Address, Set[PhiValue]] + } + + import context.dispatcher + val reportMetricsTask = context.system.scheduler.schedule( + reportMetricsInterval, reportMetricsInterval, self, ReportTick) + + // subscribe to ClusterMetricsChanged, re-subscribe when restart + override def preStart(): Unit = cluster.subscribe(self, classOf[ClusterMetricsChanged]) + override def postStop(): Unit = { + cluster.unsubscribe(self) + reportMetricsTask.cancel() + super.postStop() + } + + def receive = { + case ClusterMetricsChanged(clusterMetrics) ⇒ nodeMetrics = clusterMetrics + case PhiResult(from, phiValues) ⇒ phiValuesObservedByNode += from -> phiValues + case ReportTick ⇒ + log.info(s"[${title}] in progress\n${formatMetrics}\n\n${formatPhi}") + case r: ClusterResult ⇒ + results :+= r + if (results.size == expectedResults) { + val aggregated = AggregatedClusterResult(title, maxDuration, totalClusterStats) + log.info(s"[${title}] completed in [${aggregated.duration.toMillis}] ms\n${aggregated.clusterStats}\n${formatMetrics}\n\n${formatPhi}") + reportTo foreach { _ ! aggregated } + context stop self + } + case _: CurrentClusterState ⇒ + case ReportTo(ref) ⇒ reportTo = ref + } + + def maxDuration = results.map(_.duration).max + + def totalClusterStats = results.map(_.clusterStats).foldLeft(ClusterStats()) { (acc, s) ⇒ + ClusterStats( + receivedGossipCount = acc.receivedGossipCount + s.receivedGossipCount, + mergeConflictCount = acc.mergeConflictCount + s.mergeConflictCount, + mergeCount = acc.mergeCount + s.mergeCount, + mergeDetectedCount = acc.mergeDetectedCount + s.mergeDetectedCount) + } + + def formatMetrics: String = { + import akka.cluster.Member.addressOrdering + (formatMetricsHeader +: (nodeMetrics.toSeq.sortBy(_.address) map formatMetricsLine)).mkString("\n") + } + + def formatMetricsHeader: String = "Node\tHeap (MB)\tCPU (%)\tLoad" + + def formatMetricsLine(nodeMetrics: NodeMetrics): String = { + val heap = nodeMetrics match { + case HeapMemory(address, timestamp, used, committed, max) ⇒ + (used.doubleValue / 1024 / 1024).form + case _ ⇒ "" + } + val cpuAndLoad = nodeMetrics match { + case Cpu(address, timestamp, loadOption, cpuOption, processors) ⇒ + format(cpuOption) + "\t" + format(loadOption) + case _ ⇒ "N/A\tN/A" + } + s"${nodeMetrics.address}\t${heap}\t${cpuAndLoad}" + } + + def format(opt: Option[Double]) = opt match { + case None ⇒ "N/A" + case Some(x) ⇒ x.form + } + + def formatPhi: String = { + if (phiValuesObservedByNode.isEmpty) "" + else { + import akka.cluster.Member.addressOrdering + val lines = + for { + (monitor, phiValues) ← phiValuesObservedByNode.toSeq + phi ← phiValues.toSeq.sortBy(_.address) + } yield formatPhiLine(monitor, phi.address, phi) + + (formatPhiHeader +: lines).mkString("\n") + } + } + + def formatPhiHeader: String = "Monitor\tSubject\tcount\tcount phi > 1.0\tmax phi" + + def formatPhiLine(monitor: Address, subject: Address, phi: PhiValue): String = + s"${monitor}\t${subject}\t${phi.count}\t${phi.countAboveOne}\t${phi.max.form}" + + } + + /** + * Keeps cluster statistics and metrics reported by + * ClusterResultAggregator. Logs the list of historical + * results when a new AggregatedClusterResult is received. + */ + class ClusterResultHistory extends Actor with ActorLogging { + var history = Vector.empty[AggregatedClusterResult] + + def receive = { + case result: AggregatedClusterResult ⇒ + history :+= result + log.info("Cluster result history\n" + formatHistory) + } + + def formatHistory: String = + (formatHistoryHeader +: (history map formatHistoryLine)).mkString("\n") + + def formatHistoryHeader: String = "title\tduration (ms)\tgossip count\tmerge count" + + def formatHistoryLine(result: AggregatedClusterResult): String = + s"${result.title}\t${result.duration.toMillis}\t${result.clusterStats.receivedGossipCount}\t${result.clusterStats.mergeCount}" + + } + + /** + * Collect phi values of the failure detector and report to the + * central ClusterResultAggregator. + */ + class PhiObserver extends Actor with ActorLogging { + val cluster = Cluster(context.system) + val fd = cluster.failureDetector.asInstanceOf[AccrualFailureDetector] + var reportTo: Option[ActorRef] = None + val emptyPhiByNode = Map.empty[Address, PhiValue].withDefault(address ⇒ PhiValue(address, 0, 0, 0.0)) + var phiByNode = emptyPhiByNode + var nodes = Set.empty[Address] + + import context.dispatcher + val checkPhiTask = context.system.scheduler.schedule( + 1.second, 1.second, self, PhiTick) + + // subscribe to MemberEvent, re-subscribe when restart + override def preStart(): Unit = cluster.subscribe(self, classOf[MemberEvent]) + override def postStop(): Unit = { + cluster.unsubscribe(self) + checkPhiTask.cancel() + super.postStop() + } + + def receive = { + case PhiTick ⇒ + nodes foreach { node ⇒ + val previous = phiByNode(node) + val φ = fd.phi(node) + if (φ > 0) { + val aboveOne = if (!φ.isInfinite && φ > 1.0) 1 else 0 + phiByNode += node -> PhiValue(node, previous.countAboveOne + aboveOne, previous.count + 1, + math.max(previous.max, φ)) + } + } + reportTo foreach { _ ! PhiResult(cluster.selfAddress, phiByNode.values.toSet) } + case state: CurrentClusterState ⇒ nodes = state.members.map(_.address) + case memberEvent: MemberEvent ⇒ nodes += memberEvent.member.address + case ReportTo(ref) ⇒ reportTo = ref + case Reset ⇒ + phiByNode = emptyPhiByNode + nodes = Set.empty[Address] + cluster.unsubscribe(self) + cluster.subscribe(self, classOf[MemberEvent]) + + } + } + + /** + * Master of routers + * + * Flow control, to not flood the consumers, is handled by scheduling a + * batch of messages to be sent to the router when half of the number + * of outstanding messages remains. + * + * It uses a simple message retry mechanism. If an ack of a sent message + * is not received within a timeout, that message will be resent to the router, + * infinite number of times. + * + * When it receives the `End` command it will stop sending messages to the router, + * resends continuous, until all outstanding acks have been received, and then + * finally it replies with `WorkResult` to the sender of the `End` command, and stops + * itself. + */ + class Master(settings: StressMultiJvmSpec.Settings, batchInterval: FiniteDuration, tree: Boolean) extends Actor { + val workers = context.actorOf(Props[Worker].withRouter(FromConfig), "workers") + val payload = Array.fill(settings.payloadSize)(ThreadLocalRandom.current.nextInt(127).toByte) + val retryTimeout = 5.seconds.dilated(context.system) + val idCounter = Iterator from 0 + var sendCounter = 0L + var ackCounter = 0L + var outstanding = Map.empty[JobId, JobState] + var startTime = 0L + + import context.dispatcher + val resendTask = context.system.scheduler.schedule(3.seconds, 3.seconds, self, RetryTick) + + override def postStop(): Unit = { + resendTask.cancel() + super.postStop() + } + + def receive = { + case Begin ⇒ + startTime = System.nanoTime + self ! SendBatch + context.become(working) + case RetryTick ⇒ + } + + def working: Receive = { + case Ack(id) ⇒ + outstanding -= id + ackCounter += 1 + if (outstanding.size == settings.workBatchSize / 2) + if (batchInterval == Duration.Zero) self ! SendBatch + else context.system.scheduler.scheduleOnce(batchInterval, self, SendBatch) + case SendBatch ⇒ sendJobs() + case RetryTick ⇒ resend() + case End ⇒ + done(sender) + context.become(ending(sender)) + } + + def ending(replyTo: ActorRef): Receive = { + case Ack(id) ⇒ + outstanding -= id + ackCounter += 1 + done(replyTo) + case SendBatch ⇒ + case RetryTick ⇒ resend() + } + + def done(replyTo: ActorRef): Unit = if (outstanding.isEmpty) { + val duration = (System.nanoTime - startTime).nanos + replyTo ! WorkResult(duration, sendCounter, ackCounter) + context stop self + } + + def sendJobs(): Unit = { + 0 until settings.workBatchSize foreach { _ ⇒ + send(createJob()) + } + } + + def createJob(): Job = { + if (tree) TreeJob(idCounter.next(), payload, ThreadLocalRandom.current.nextInt(settings.treeWidth), + settings.treeLevels, settings.treeWidth) + else SimpleJob(idCounter.next(), payload) + } + + def resend(): Unit = { + outstanding.values foreach { jobState ⇒ + if (jobState.deadline.isOverdue) + send(jobState.job) + } + } + + def send(job: Job): Unit = { + outstanding += job.id -> JobState(Deadline.now + retryTimeout, job) + sendCounter += 1 + workers ! job + } + } + + /** + * Used by Master as routee + */ + class Worker extends Actor with ActorLogging { + def receive = { + case SimpleJob(id, payload) ⇒ sender ! Ack(id) + case TreeJob(id, payload, idx, levels, width) ⇒ + // create the actors when first TreeJob message is received + val totalActors = ((width * math.pow(width, levels) - 1) / (width - 1)).toInt + log.info("Creating [{}] actors in a tree structure of [{}] levels and each actor has [{}] children", + totalActors, levels, width) + val tree = context.actorOf(Props(new TreeNode(levels, width)), "tree") + tree forward (idx, SimpleJob(id, payload)) + context.become(treeWorker(tree)) + } + + def treeWorker(tree: ActorRef): Receive = { + case SimpleJob(id, payload) ⇒ sender ! Ack(id) + case TreeJob(id, payload, idx, _, _) ⇒ + tree forward (idx, SimpleJob(id, payload)) + } + } + + class TreeNode(level: Int, width: Int) extends Actor { + require(level >= 1) + def createChild(): Actor = if (level == 1) new Leaf else new TreeNode(level - 1, width) + val indexedChildren = + 0 until width map { i ⇒ context.actorOf(Props(createChild()), name = i.toString) } toVector + + def receive = { + case (idx: Int, job: SimpleJob) if idx < width ⇒ indexedChildren(idx) forward (idx, job) + } + } + + class Leaf extends Actor { + def receive = { + case (_: Int, job: SimpleJob) ⇒ sender ! Ack(job.id) + } + } + + /** + * Used for remote death watch testing + */ + class Watchee extends Actor { + def receive = Actor.emptyBehavior + } + + /** + * Used for remote supervision testing + */ + class Supervisor extends Actor { + + var restartCount = 0 + + override val supervisorStrategy = + OneForOneStrategy(maxNrOfRetries = 5, withinTimeRange = 1 minute) { + case _: Exception ⇒ + restartCount += 1 + Restart + } + + def receive = { + case props: Props ⇒ context.actorOf(props) + case e: Exception ⇒ context.children foreach { _ ! e } + case GetChildrenCount ⇒ sender ! ChildrenCount(context.children.size, restartCount) + case Reset ⇒ + require(context.children.isEmpty, + s"ResetChildrenCount not allowed when children exists, [${context.children.size}]") + restartCount = 0 + } + } + + /** + * Child of Supervisor for remote supervision testing + */ + class RemoteChild extends Actor { + def receive = { + case e: Exception ⇒ throw e + } + } + + case object Begin + case object End + case object RetryTick + case object ReportTick + case object PhiTick + case class PhiResult(from: Address, phiValues: Set[PhiValue]) + case class PhiValue(address: Address, countAboveOne: Int, count: Int, max: Double) + case class ReportTo(ref: Option[ActorRef]) + + type JobId = Int + trait Job { def id: JobId } + case class SimpleJob(id: JobId, payload: Any) extends Job + case class TreeJob(id: JobId, payload: Any, idx: Int, levels: Int, width: Int) extends Job + case class Ack(id: JobId) + case class JobState(deadline: Deadline, job: Job) + case class WorkResult(duration: Duration, sendCount: Long, ackCount: Long) { + def retryCount: Long = sendCount - ackCount + def jobsPerSecond: Double = ackCount * 1000.0 / duration.toMillis + } + case object SendBatch + case class CreateTree(levels: Int, width: Int) + + case object GetChildrenCount + case class ChildrenCount(numberOfChildren: Int, numberOfChildRestarts: Int) + case object Reset + +} + +class StressMultiJvmNode1 extends StressSpec +class StressMultiJvmNode2 extends StressSpec +class StressMultiJvmNode3 extends StressSpec +class StressMultiJvmNode4 extends StressSpec +class StressMultiJvmNode5 extends StressSpec +class StressMultiJvmNode6 extends StressSpec +class StressMultiJvmNode7 extends StressSpec +class StressMultiJvmNode8 extends StressSpec +class StressMultiJvmNode9 extends StressSpec +class StressMultiJvmNode10 extends StressSpec +class StressMultiJvmNode11 extends StressSpec +class StressMultiJvmNode12 extends StressSpec +class StressMultiJvmNode13 extends StressSpec + +abstract class StressSpec + extends MultiNodeSpec(StressMultiJvmSpec) + with MultiNodeClusterSpec with BeforeAndAfterEach with ImplicitSender { + + import StressMultiJvmSpec._ + import ClusterEvent._ + + val settings = new Settings(system.settings.config) + import settings._ + + var step = 0 + var nbrUsedRoles = 0 + + override def beforeEach(): Unit = { step += 1 } + + override def muteLog(sys: ActorSystem = system): Unit = { + super.muteLog(sys) + sys.eventStream.publish(Mute(EventFilter[RuntimeException](pattern = ".*Simulated exception.*"))) + sys.eventStream.publish(Mute(EventFilter.warning(pattern = ".*PhiResult.*"))) + sys.eventStream.publish(Mute(EventFilter.warning(pattern = ".*SendBatch.*"))) + } + + val seedNodes = roles.take(numberOfSeedNodes) + + override def cluster: Cluster = { + createWorker + super.cluster + } + + // always create one worker when the cluster is started + lazy val createWorker: Unit = + system.actorOf(Props[Worker], "worker") + + def createResultAggregator(title: String, expectedResults: Int, includeInHistory: Boolean): Unit = { + runOn(roles.head) { + val aggregator = system.actorOf(Props(new ClusterResultAggregator(title, expectedResults, reportMetricsInterval)), + name = "result" + step) + if (includeInHistory) aggregator ! ReportTo(Some(clusterResultHistory)) + else aggregator ! ReportTo(None) + } + enterBarrier("result-aggregator-created-" + step) + runOn(roles.take(nbrUsedRoles): _*) { + phiObserver ! ReportTo(Some(clusterResultAggregator)) + } + } + + def clusterResultAggregator: ActorRef = system.actorFor(node(roles.head) / "user" / ("result" + step)) + + lazy val clusterResultHistory = system.actorOf(Props[ClusterResultHistory], "resultHistory") + + lazy val phiObserver = system.actorOf(Props[PhiObserver], "phiObserver") + + def awaitClusterResult: Unit = { + runOn(roles.head) { + val r = clusterResultAggregator + watch(r) + expectMsgPF(remaining) { case Terminated(`r`) ⇒ true } + } + enterBarrier("cluster-result-done-" + step) + } + + def joinOneByOne(numberOfNodes: Int): Unit = { + 0 until numberOfNodes foreach { _ ⇒ + joinOne() + nbrUsedRoles += 1 + step += 1 + } + } + + def convergenceWithin(base: FiniteDuration, nodes: Int): FiniteDuration = + (base.toMillis * convergenceWithinFactor * nodes).millis + + def joinOne(): Unit = within(5.seconds + convergenceWithin(2.seconds, nbrUsedRoles + 1)) { + val currentRoles = roles.take(nbrUsedRoles + 1) + val title = s"join one to ${nbrUsedRoles} nodes cluster" + createResultAggregator(title, expectedResults = currentRoles.size, includeInHistory = true) + runOn(currentRoles: _*) { + reportResult { + runOn(currentRoles.last) { + cluster.join(roles.head) + } + awaitUpConvergence(currentRoles.size, timeout = remaining) + } + + } + awaitClusterResult + enterBarrier("join-one-" + step) + } + + def joinSeveral(numberOfNodes: Int, toSeedNodes: Boolean): Unit = + within(10.seconds + convergenceWithin(3.seconds, nbrUsedRoles + numberOfNodes)) { + val currentRoles = roles.take(nbrUsedRoles + numberOfNodes) + val joiningRoles = currentRoles.takeRight(numberOfNodes) + val title = s"join ${numberOfNodes} to ${if (toSeedNodes) "seed nodes" else "one node"}, in ${nbrUsedRoles} nodes cluster" + createResultAggregator(title, expectedResults = currentRoles.size, includeInHistory = true) + runOn(currentRoles: _*) { + reportResult { + runOn(joiningRoles: _*) { + if (toSeedNodes) cluster.joinSeedNodes(seedNodes.toIndexedSeq map address) + else cluster.join(roles.head) + } + awaitUpConvergence(currentRoles.size, timeout = remaining) + } + + } + awaitClusterResult + enterBarrier("join-several-" + step) + } + + def removeOneByOne(numberOfNodes: Int, shutdown: Boolean): Unit = { + 0 until numberOfNodes foreach { _ ⇒ + removeOne(shutdown) + nbrUsedRoles -= 1 + step += 1 + } + } + + def removeOne(shutdown: Boolean): Unit = within(10.seconds + convergenceWithin(3.seconds, nbrUsedRoles - 1)) { + val currentRoles = roles.take(nbrUsedRoles - 1) + val title = s"${if (shutdown) "shutdown" else "remove"} one from ${nbrUsedRoles} nodes cluster" + createResultAggregator(title, expectedResults = currentRoles.size, includeInHistory = true) + val removeRole = roles(nbrUsedRoles - 1) + val removeAddress = address(removeRole) + runOn(removeRole) { + system.actorOf(Props[Watchee], "watchee") + if (!shutdown) cluster.leave(myself) + } + enterBarrier("watchee-created-" + step) + runOn(roles.head) { + watch(system.actorFor(node(removeRole) / "user" / "watchee")) + } + enterBarrier("watch-estabilished-" + step) + + runOn(currentRoles: _*) { + reportResult { + runOn(roles.head) { + if (shutdown) { + log.info("Shutting down [{}]", removeAddress) + testConductor.shutdown(removeRole, 0).await + } + } + awaitUpConvergence(currentRoles.size, timeout = remaining) + } + } + + runOn(roles.head) { + val expectedRef = system.actorFor(RootActorPath(removeAddress) / "user" / "watchee") + expectMsgPF(remaining) { + case Terminated(`expectedRef`) ⇒ true + } + } + enterBarrier("watch-verified-" + step) + + awaitClusterResult + enterBarrier("remove-one-" + step) + } + + def removeSeveral(numberOfNodes: Int, shutdown: Boolean): Unit = + within(10.seconds + convergenceWithin(5.seconds, nbrUsedRoles - numberOfNodes)) { + val currentRoles = roles.take(nbrUsedRoles - numberOfNodes) + val removeRoles = roles.slice(currentRoles.size, nbrUsedRoles) + val title = s"${if (shutdown) "shutdown" else "leave"} ${numberOfNodes} in ${nbrUsedRoles} nodes cluster" + createResultAggregator(title, expectedResults = currentRoles.size, includeInHistory = true) + runOn(removeRoles: _*) { + if (!shutdown) cluster.leave(myself) + } + runOn(currentRoles: _*) { + reportResult { + runOn(roles.head) { + if (shutdown) removeRoles.foreach { r ⇒ + log.info("Shutting down [{}]", address(r)) + testConductor.shutdown(r, 0).await + } + } + awaitUpConvergence(currentRoles.size, timeout = remaining) + } + } + awaitClusterResult + enterBarrier("remove-several-" + step) + } + + def reportResult[T](thunk: ⇒ T): T = { + val startTime = System.nanoTime + val startStats = clusterView.latestStats + + val returnValue = thunk + + val duration = (System.nanoTime - startTime).nanos + val latestStats = clusterView.latestStats + val clusterStats = ClusterStats( + receivedGossipCount = latestStats.receivedGossipCount - startStats.receivedGossipCount, + mergeConflictCount = latestStats.mergeConflictCount - startStats.mergeConflictCount, + mergeCount = latestStats.mergeCount - startStats.mergeCount, + mergeDetectedCount = latestStats.mergeDetectedCount - startStats.mergeDetectedCount) + clusterResultAggregator ! ClusterResult(cluster.selfAddress, duration, clusterStats) + returnValue + } + + def exerciseJoinRemove(title: String, duration: FiniteDuration): Unit = { + val activeRoles = roles.take(numberOfNodesJoinRemove) + val loopDuration = 10.seconds + convergenceWithin(4.seconds, nbrUsedRoles + activeRoles.size) + val deadline = Deadline.now + duration - loopDuration + val usedRoles = roles.take(nbrUsedRoles) + val usedAddresses = usedRoles.map(address(_)).toSet + + @tailrec def loop(counter: Int, previousAS: Option[ActorSystem], allPreviousAddresses: Set[Address]): Option[ActorSystem] = { + if (deadline.isOverdue) previousAS + else { + val t = title + " round " + counter + runOn(usedRoles: _*) { + phiObserver ! Reset + } + createResultAggregator(t, expectedResults = nbrUsedRoles, includeInHistory = true) + val (nextAS, nextAddresses) = within(loopDuration) { + reportResult { + val nextAS = + if (activeRoles contains myself) { + previousAS foreach { _.shutdown() } + val sys = ActorSystem(system.name, system.settings.config) + muteLog(sys) + Cluster(sys).joinSeedNodes(seedNodes.toIndexedSeq map address) + Some(sys) + } else previousAS + runOn(usedRoles: _*) { + awaitUpConvergence( + nbrUsedRoles + activeRoles.size, + canNotBePartOfMemberRing = allPreviousAddresses, + timeout = remaining) + } + val nextAddresses = clusterView.members.map(_.address) -- usedAddresses + runOn(usedRoles: _*) { + nextAddresses.size must be(numberOfNodesJoinRemove) + } + + enterBarrier("join-remove-" + step) + (nextAS, nextAddresses) + } + } + awaitClusterResult + + step += 1 + loop(counter + 1, nextAS, nextAddresses) + + } + } + + loop(1, None, Set.empty) foreach { _.shutdown } + within(loopDuration) { + runOn(usedRoles: _*) { + awaitUpConvergence(nbrUsedRoles, timeout = remaining) + phiObserver ! Reset + } + } + enterBarrier("join-remove-shutdown-" + step) + + } + + def master: ActorRef = system.actorFor("/user/master-" + myself.name) + + def exerciseRouters(title: String, duration: FiniteDuration, batchInterval: FiniteDuration, + expectDroppedMessages: Boolean, tree: Boolean): Unit = + within(duration + 10.seconds) { + createResultAggregator(title, expectedResults = nbrUsedRoles, includeInHistory = false) + + val (masterRoles, otherRoles) = roles.take(nbrUsedRoles).splitAt(3) + runOn(masterRoles: _*) { + reportResult { + val m = system.actorOf(Props(new Master(settings, batchInterval, tree)), + name = "master-" + myself.name) + m ! Begin + import system.dispatcher + system.scheduler.scheduleOnce(highThroughputDuration) { + m.tell(End, testActor) + } + val workResult = awaitWorkResult + workResult.sendCount must be > (0L) + workResult.ackCount must be > (0L) + if (!expectDroppedMessages) + workResult.retryCount must be(0) + + enterBarrier("routers-done-" + step) + } + } + runOn(otherRoles: _*) { + reportResult { + enterBarrier("routers-done-" + step) + } + } + + awaitClusterResult + } + + def awaitWorkResult: WorkResult = { + val m = master + val workResult = expectMsgType[WorkResult] + log.info("{} result, [{}] jobs/s, retried [{}] of [{}] msg", m.path.name, + workResult.jobsPerSecond.form, + workResult.retryCount, workResult.sendCount) + watch(m) + expectMsgPF(remaining) { case Terminated(`m`) ⇒ true } + workResult + } + + def exerciseSupervision(title: String, duration: FiniteDuration): Unit = + within(duration + 10.seconds) { + val supervisor = system.actorOf(Props[Supervisor], "supervisor") + while (remaining > 10.seconds) { + createResultAggregator(title, expectedResults = nbrUsedRoles, includeInHistory = false) + + reportResult { + roles.take(nbrUsedRoles) foreach { r ⇒ + supervisor ! Props[RemoteChild].withDeploy(Deploy(scope = RemoteScope(address(r)))) + } + supervisor ! GetChildrenCount + expectMsgType[ChildrenCount] must be(ChildrenCount(nbrUsedRoles, 0)) + + 1 to 5 foreach { _ ⇒ supervisor ! new RuntimeException("Simulated exception") } + awaitCond { + supervisor ! GetChildrenCount + val c = expectMsgType[ChildrenCount] + c == ChildrenCount(nbrUsedRoles, 5 * nbrUsedRoles) + } + + // after 5 restart attempts the children should be stopped + supervisor ! new RuntimeException("Simulated exception") + awaitCond { + supervisor ! GetChildrenCount + val c = expectMsgType[ChildrenCount] + // zero children + c == ChildrenCount(0, 6 * nbrUsedRoles) + } + supervisor ! Reset + + } + + awaitClusterResult + } + } + + "A cluster under stress" must { + + "join seed nodes" taggedAs LongRunningTest in { + + val otherNodesJoiningSeedNodes = roles.slice(numberOfSeedNodes, numberOfSeedNodes + numberOfNodesJoiningToSeedNodesInitially) + val size = seedNodes.size + otherNodesJoiningSeedNodes.size + + createResultAggregator("join seed nodes", expectedResults = size, includeInHistory = true) + + runOn((seedNodes ++ otherNodesJoiningSeedNodes): _*) { + reportResult { + cluster.joinSeedNodes(seedNodes.toIndexedSeq map address) + awaitUpConvergence(size) + } + } + + awaitClusterResult + + nbrUsedRoles += size + enterBarrier("after-" + step) + } + + "start routers that are running while nodes are joining" taggedAs LongRunningTest in { + runOn(roles.take(3): _*) { + system.actorOf(Props(new Master(settings, settings.workBatchInterval, tree = false)), + name = "master-" + myself.name) ! Begin + } + enterBarrier("after-" + step) + } + + "join nodes one-by-one to small cluster" taggedAs LongRunningTest in { + joinOneByOne(numberOfNodesJoiningOneByOneSmall) + enterBarrier("after-" + step) + } + + "join several nodes to one node" taggedAs LongRunningTest in { + joinSeveral(numberOfNodesJoiningToOneNode, toSeedNodes = false) + nbrUsedRoles += numberOfNodesJoiningToOneNode + enterBarrier("after-" + step) + } + + "join several nodes to seed nodes" taggedAs LongRunningTest in { + joinSeveral(numberOfNodesJoiningToOneNode, toSeedNodes = true) + nbrUsedRoles += numberOfNodesJoiningToSeedNodes + enterBarrier("after-" + step) + } + + "join nodes one-by-one to large cluster" taggedAs LongRunningTest in { + joinOneByOne(numberOfNodesJoiningOneByOneLarge) + enterBarrier("after-" + step) + } + + "end routers that are running while nodes are joining" taggedAs LongRunningTest in within(30.seconds) { + runOn(roles.take(3): _*) { + val m = master + m.tell(End, testActor) + val workResult = awaitWorkResult + workResult.retryCount must be(0) + workResult.sendCount must be > (0L) + workResult.ackCount must be > (0L) + } + enterBarrier("after-" + step) + } + + "use routers with normal throughput" taggedAs LongRunningTest in { + exerciseRouters("use routers with normal throughput", normalThroughputDuration, + batchInterval = workBatchInterval, expectDroppedMessages = false, tree = false) + enterBarrier("after-" + step) + } + + "use routers with high throughput" taggedAs LongRunningTest in { + exerciseRouters("use routers with high throughput", highThroughputDuration, + batchInterval = Duration.Zero, expectDroppedMessages = false, tree = false) + enterBarrier("after-" + step) + } + + "use many actors with normal throughput" taggedAs LongRunningTest in { + exerciseRouters("use many actors with normal throughput", normalThroughputDuration, + batchInterval = workBatchInterval, expectDroppedMessages = false, tree = true) + enterBarrier("after-" + step) + } + + "use many actors with high throughput" taggedAs LongRunningTest in { + exerciseRouters("use many actors with high throughput", highThroughputDuration, + batchInterval = Duration.Zero, expectDroppedMessages = false, tree = true) + enterBarrier("after-" + step) + } + + "excercise join/remove/join/remove" taggedAs LongRunningTest in { + exerciseJoinRemove("excercise join/remove", joinRemoveDuration) + enterBarrier("after-" + step) + } + + "excercise supervision" taggedAs LongRunningTest in { + exerciseSupervision("excercise supervision", supervisionDuration) + enterBarrier("after-" + step) + } + + "start routers that are running while nodes are removed" taggedAs LongRunningTest in { + runOn(roles.take(3): _*) { + system.actorOf(Props(new Master(settings, settings.workBatchInterval, tree = false)), + name = "master-" + myself.name) ! Begin + } + enterBarrier("after-" + step) + } + + "leave nodes one-by-one from large cluster" taggedAs LongRunningTest in { + removeOneByOne(numberOfNodesLeavingOneByOneLarge, shutdown = false) + enterBarrier("after-" + step) + } + + "shutdown nodes one-by-one from large cluster" taggedAs LongRunningTest in { + removeOneByOne(numberOfNodesShutdownOneByOneLarge, shutdown = true) + enterBarrier("after-" + step) + } + + "leave several nodes" taggedAs LongRunningTest in { + removeSeveral(numberOfNodesLeaving, shutdown = false) + nbrUsedRoles -= numberOfNodesLeaving + enterBarrier("after-" + step) + } + + "shutdown several nodes" taggedAs LongRunningTest in { + removeSeveral(numberOfNodesShutdown, shutdown = true) + nbrUsedRoles -= numberOfNodesShutdown + enterBarrier("after-" + step) + } + + "leave nodes one-by-one from small cluster" taggedAs LongRunningTest in { + removeOneByOne(numberOfNodesLeavingOneByOneSmall, shutdown = false) + enterBarrier("after-" + step) + } + + "shutdown nodes one-by-one from small cluster" taggedAs LongRunningTest in { + removeOneByOne(numberOfNodesShutdownOneByOneSmall, shutdown = true) + enterBarrier("after-" + step) + } + + "end routers that are running while nodes are removed" taggedAs LongRunningTest in within(30.seconds) { + runOn(roles.take(3): _*) { + val m = master + m.tell(End, testActor) + val workResult = awaitWorkResult + workResult.sendCount must be > (0L) + workResult.ackCount must be > (0L) + } + enterBarrier("after-" + step) + } + + } +} diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala index 99b076b8d6..a33ca8146e 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala @@ -130,7 +130,7 @@ abstract class UnreachableNodeRejoinsClusterSpec(multiNodeConfig: UnreachableNod } runOn(allBut(victim): _*) { - awaitUpConvergence(roles.size - 1, List(victim)) + awaitUpConvergence(roles.size - 1, Set(victim)) } endBarrier From 48216980fcb08a99233f26fcc32f42733a105f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Fri, 4 Jan 2013 14:17:28 +0100 Subject: [PATCH 029/122] Fixed startup race in transport adapters #2867 --- .../transport/AbstractTransportAdapter.scala | 50 ++++++++++++++++--- .../transport/AkkaProtocolTransport.scala | 29 ++--------- .../transport/ThrottlerTransportAdapter.scala | 28 +++-------- 3 files changed, 55 insertions(+), 52 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala index b46f89262b..3dae6d479b 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala @@ -2,16 +2,17 @@ package akka.remote.transport import scala.language.postfixOps import akka.actor._ -import akka.pattern.ask +import akka.pattern.{ ask, pipe } +import akka.remote.Remoting.RegisterTransportActor +import akka.remote.transport.ActorTransportAdapter.ListenUnderlying +import akka.remote.transport.ActorTransportAdapter.ListenerRegistered import akka.remote.transport.Transport._ -import akka.remote.{ RARP, RemotingSettings, RemoteActorRefProvider } +import akka.remote.{ RARP, RemotingSettings } +import akka.util.Timeout import scala.collection.immutable +import scala.concurrent.duration._ import scala.concurrent.{ ExecutionContext, Promise, Future } import scala.util.Success -import scala.util.Failure -import akka.remote.Remoting.RegisterTransportActor -import akka.util.Timeout -import scala.concurrent.duration._ trait TransportAdapterProvider extends ((Transport, ExtendedActorSystem) ⇒ Transport) @@ -121,7 +122,9 @@ object ActorTransportAdapter { abstract class ActorTransportAdapter(wrappedTransport: Transport, system: ActorSystem) extends AbstractTransportAdapter(wrappedTransport)(system.dispatcher) { + import ActorTransportAdapter._ + private implicit val timeout = new Timeout(3 seconds) protected def managerName: String @@ -150,3 +153,38 @@ abstract class ActorTransportAdapter(wrappedTransport: Transport, system: ActorS override def shutdown(): Unit = manager ! PoisonPill } +abstract class ActorTransportAdapterManager extends Actor { + private var delayedEvents = immutable.Queue.empty[Any] + + protected var associationListener: AssociationEventListener = _ + protected var localAddress: Address = _ + private var uniqueId = 0L + + protected def nextId(): Long = { + uniqueId += 1 + uniqueId + } + + import context.dispatcher + + def receive: Receive = { + case ListenUnderlying(listenAddress, upstreamListenerFuture) ⇒ + localAddress = listenAddress + upstreamListenerFuture.future.map { ListenerRegistered(_) } pipeTo self + + case ListenerRegistered(listener) ⇒ + associationListener = listener + delayedEvents foreach { self.tell(_, Actor.noSender) } + delayedEvents = immutable.Queue.empty[Any] + context.become(ready) + + /* Simple imitation of Stash. It is more lightweight as it does not need any specific dispatchers or additional + * queue. The difference is that these messages will not survive a restart -- which is not needed here. + * These messages will be processed in the ready state. + */ + case otherEvent ⇒ delayedEvents = delayedEvents enqueue otherEvent + + } + + protected def ready: Receive +} diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala index 09ac87b9fa..c99cbcb398 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala @@ -101,9 +101,7 @@ private[remote] class AkkaProtocolTransport( private[transport] class AkkaProtocolManager( private val wrappedTransport: Transport, private val settings: AkkaProtocolSettings) - extends Actor { - - import context.dispatcher + extends ActorTransportAdapterManager { // The AkkaProtocolTransport does not handle the recovery of associations, this task is implemented in the // remoting itself. Hence the strategy Stop. @@ -111,32 +109,13 @@ private[transport] class AkkaProtocolManager( case NonFatal(_) ⇒ Stop } - private val nextId = Iterator from 0 - - var localAddress: Address = _ - - private var associationHandler: AssociationEventListener = _ - - def receive: Receive = { - case ListenUnderlying(listenAddress, upstreamListenerFuture) ⇒ - localAddress = listenAddress - upstreamListenerFuture.future.map { ListenerRegistered(_) } pipeTo self - - case ListenerRegistered(listener) ⇒ - associationHandler = listener - context.become(ready) - - // Block inbound associations until handler is registered - case InboundAssociation(handle) ⇒ handle.disassociate() - } - private def actorNameFor(remoteAddress: Address): String = - "akkaProtocol-" + AddressUrlEncoder(remoteAddress) + "-" + nextId.next() + "akkaProtocol-" + AddressUrlEncoder(remoteAddress) + "-" + nextId() - private def ready: Receive = { + override def ready: Receive = { case InboundAssociation(handle) ⇒ val stateActorLocalAddress = localAddress - val stateActorAssociationHandler = associationHandler + val stateActorAssociationHandler = associationListener val stateActorSettings = settings val failureDetector = createFailureDetector() context.actorOf(Props(new ProtocolStateActor( diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index 82143f483a..bb74937563 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -4,8 +4,6 @@ import ThrottlerTransportAdapter._ import akka.actor._ import akka.pattern.pipe import akka.remote.transport.ActorTransportAdapter.AssociateUnderlying -import akka.remote.transport.ActorTransportAdapter.ListenUnderlying -import akka.remote.transport.ActorTransportAdapter.ListenerRegistered import akka.remote.transport.AkkaPduCodec.Associate import akka.remote.transport.AssociationHandle.{ ActorHandleEventListener, Disassociated, InboundPayload, HandleEventListener } import akka.remote.transport.ThrottledAssociation._ @@ -104,7 +102,10 @@ class ThrottlerTransportAdapter(_wrappedTransport: Transport, _system: ExtendedA override protected def addedSchemeIdentifier = SchemeIdentifier override protected def maximumOverhead = 0 protected def managerName = s"throttlermanager.${wrappedTransport.schemeIdentifier}${UniqueId.getAndIncrement}" - protected def managerProps = Props(new ThrottlerManager(wrappedTransport)) + protected def managerProps = { + val wt = wrappedTransport + Props(new ThrottlerManager(wt)) + } override def managementCommand(cmd: Any, statusPromise: Promise[Boolean]): Unit = cmd match { case s @ SetThrottle(_, _, _) ⇒ @@ -119,12 +120,10 @@ private[transport] object ThrottlerManager { case class Checkin(origin: Address, handle: ThrottlerHandle) } -private[transport] class ThrottlerManager(wrappedTransport: Transport) extends Actor { +private[transport] class ThrottlerManager(wrappedTransport: Transport) extends ActorTransportAdapterManager { import context.dispatcher - private val ids = Iterator from 0 - private var associationListener: AssociationEventListener = _ private var throttlingModes = Map[Address, (ThrottleMode, Direction)]() private var handleTable = List[(Address, ThrottlerHandle)]() @@ -132,20 +131,7 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A override def postStop(): Unit = wrappedTransport.shutdown() - def receive: Receive = { - case ListenUnderlying(listenAddress, upstreamListenerFuture) ⇒ - upstreamListenerFuture.future.map { ListenerRegistered(_) } pipeTo self - - case ListenerRegistered(listener) ⇒ - associationListener = listener - context.become(ready) - - // Block inbound associations until handler is registered - case InboundAssociation(handle) ⇒ - handle.disassociate() - } - - private def ready: Receive = { + override def ready: Receive = { case InboundAssociation(handle) ⇒ val wrappedHandle = wrapHandle(handle, associationListener, inbound = true) wrappedHandle.throttlerActor ! wrappedHandle @@ -207,7 +193,7 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A private def wrapHandle(originalHandle: AssociationHandle, listener: AssociationEventListener, inbound: Boolean): ThrottlerHandle = { val managerRef = self val throttlerActor = context.actorOf(Props(new ThrottledAssociation(managerRef, listener, originalHandle, inbound)), - "throttler" + ids.next()) + "throttler" + nextId()) ThrottlerHandle(originalHandle, throttlerActor) } From 9c1a00d02017a1786820d27a62496afb7e8285ce Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Tue, 8 Jan 2013 11:48:50 +0100 Subject: [PATCH 030/122] Propagate statusPromise down to the actual change in throttler, see #2877 * added some missing copyright headers --- .../src/main/scala/akka/remote/Endpoint.scala | 3 ++ .../scala/akka/remote/FailureDetector.scala | 3 ++ .../remote/PhiAccrualFailureDetector.scala | 3 ++ .../src/main/scala/akka/remote/Remoting.scala | 10 +++- .../scala/akka/remote/RemotingLifecycle.scala | 3 ++ .../transport/AbstractTransportAdapter.scala | 3 ++ .../akka/remote/transport/AkkaPduCodec.scala | 3 ++ .../transport/AkkaProtocolTransport.scala | 6 ++- .../FailureInjectorTransportAdapter.scala | 3 ++ .../akka/remote/transport/TestTransport.scala | 3 ++ .../transport/ThrottlerTransportAdapter.scala | 52 ++++++++++++------- .../akka/remote/transport/Transport.scala | 3 ++ .../remote/transport/netty/NettyHelpers.scala | 3 ++ .../transport/netty/NettyTransport.scala | 3 ++ .../remote/transport/netty/TcpSupport.scala | 3 ++ .../remote/transport/netty/UdpSupport.scala | 3 ++ 16 files changed, 85 insertions(+), 22 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/Endpoint.scala b/akka-remote/src/main/scala/akka/remote/Endpoint.scala index 639084e812..2b90447517 100644 --- a/akka-remote/src/main/scala/akka/remote/Endpoint.scala +++ b/akka-remote/src/main/scala/akka/remote/Endpoint.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote import akka.{ OnlyCauseStackTrace, AkkaException } diff --git a/akka-remote/src/main/scala/akka/remote/FailureDetector.scala b/akka-remote/src/main/scala/akka/remote/FailureDetector.scala index d3562b2afd..d4ac7b896f 100644 --- a/akka-remote/src/main/scala/akka/remote/FailureDetector.scala +++ b/akka-remote/src/main/scala/akka/remote/FailureDetector.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote import java.util.concurrent.TimeUnit._ diff --git a/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala b/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala index b0525b48d8..caff3fe387 100644 --- a/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala +++ b/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote import akka.remote.FailureDetector.Clock diff --git a/akka-remote/src/main/scala/akka/remote/Remoting.scala b/akka-remote/src/main/scala/akka/remote/Remoting.scala index be9ff83684..1653293269 100644 --- a/akka-remote/src/main/scala/akka/remote/Remoting.scala +++ b/akka-remote/src/main/scala/akka/remote/Remoting.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote import scala.language.postfixOps @@ -400,7 +403,12 @@ private[remote] class EndpointManager(conf: Config, log: LoggingAdapter) extends val accepting: Receive = { case ManagementCommand(cmd, statusPromise) ⇒ - transportMapping.values foreach { _.managementCommand(cmd, statusPromise) } + val allStatuses = transportMapping.values map { transport ⇒ + val p = Promise[Boolean]() + transport.managementCommand(cmd, p) + p.future + } + statusPromise completeWith Future.fold(allStatuses)(true)(_ && _) case s @ Send(message, senderOption, recipientRef) ⇒ val recipientAddress = recipientRef.path.address diff --git a/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala b/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala index bd44ff3982..1c454f8101 100644 --- a/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala +++ b/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote import akka.event.{ LoggingAdapter, Logging } diff --git a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala index b46f89262b..1163e8cea0 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import scala.language.postfixOps diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala index b6b17c68c7..3d1d68c437 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import akka.AkkaException diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala index 09ac87b9fa..4799bfba76 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import akka.{ OnlyCauseStackTrace, AkkaException } @@ -375,7 +378,8 @@ private[transport] class ProtocolStateActor(initialData: InitialProtocolStateDat case Disassociate ⇒ stop() - case Heartbeat ⇒ failureDetector.heartbeat(); stay() + case Heartbeat ⇒ + failureDetector.heartbeat(); stay() case Payload(payload) ⇒ stateData match { case AssociatedWaitHandler(handlerFuture, wrappedHandle, queue) ⇒ diff --git a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala index 59be194dde..2846c72e02 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import FailureInjectorTransportAdapter._ diff --git a/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala index 200e038778..c9fb06e6bc 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import TestTransport._ diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index 82143f483a..f668953037 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -1,8 +1,12 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import ThrottlerTransportAdapter._ import akka.actor._ import akka.pattern.pipe +import akka.remote.EndpointManager.ManagementCommand import akka.remote.transport.ActorTransportAdapter.AssociateUnderlying import akka.remote.transport.ActorTransportAdapter.ListenUnderlying import akka.remote.transport.ActorTransportAdapter.ListenerRegistered @@ -17,6 +21,7 @@ import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicReference import scala.annotation.tailrec import scala.collection.immutable.Queue +import scala.concurrent.Future import scala.concurrent.Promise import scala.math.min import scala.util.{ Success, Failure } @@ -107,10 +112,8 @@ class ThrottlerTransportAdapter(_wrappedTransport: Transport, _system: ExtendedA protected def managerProps = Props(new ThrottlerManager(wrappedTransport)) override def managementCommand(cmd: Any, statusPromise: Promise[Boolean]): Unit = cmd match { - case s @ SetThrottle(_, _, _) ⇒ - manager ! s - statusPromise.success(true) - case _ ⇒ wrappedTransport.managementCommand(cmd, statusPromise) + case s: SetThrottle ⇒ manager ! ManagementCommand(s, statusPromise) + case _ ⇒ wrappedTransport.managementCommand(cmd, statusPromise) } } @@ -164,17 +167,22 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A wrappedHandle.readHandlerPromise.future.map { (_, inMode) } pipeTo wrappedHandle.throttlerActor handleTable ::= nakedAddress(naked) -> wrappedHandle statusPromise.success(wrappedHandle) - case s @ SetThrottle(address, direction, mode) ⇒ + case ManagementCommand(SetThrottle(address, direction, mode), statusPromise) ⇒ val naked = nakedAddress(address) throttlingModes += naked -> (mode, direction) - handleTable.foreach { - case (addr, handle) ⇒ - if (addr == naked) setMode(handle, mode, direction) + val allStatuses = handleTable.map { + case (`naked`, handle) ⇒ + val p = Promise[Boolean]() + setMode(handle, mode, direction, p) + p.future + case _ ⇒ Future.successful(true) } + statusPromise completeWith Future.fold(allStatuses)(true)(_ && _) + case Checkin(origin, handle) ⇒ val naked: Address = nakedAddress(origin) handleTable ::= naked -> handle - setMode(naked, handle) + setMode(naked, handle, Promise[Boolean]()) } @@ -192,16 +200,19 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A } } - private def setMode(nakedAddress: Address, handle: ThrottlerHandle): Unit = { + private def setMode(nakedAddress: Address, handle: ThrottlerHandle, statusPromise: Promise[Boolean]): Unit = { throttlingModes.get(nakedAddress) match { - case Some((mode, direction)) ⇒ setMode(handle, mode, direction) - case None ⇒ setMode(handle, Unthrottled, Direction.Both) + case Some((mode, direction)) ⇒ setMode(handle, mode, direction, statusPromise) + case None ⇒ setMode(handle, Unthrottled, Direction.Both, statusPromise) } } - private def setMode(handle: ThrottlerHandle, mode: ThrottleMode, direction: Direction): Unit = { - if (direction.includes(Direction.Receive)) handle.throttlerActor ! mode - if (direction.includes(Direction.Send)) handle.outboundThrottleMode.set(mode) + private def setMode(handle: ThrottlerHandle, mode: ThrottleMode, direction: Direction, + statusPromise: Promise[Boolean]): Unit = { + if (direction.includes(Direction.Send)) + handle.outboundThrottleMode.set(mode) + if (direction.includes(Direction.Receive)) + handle.throttlerActor ! ManagementCommand(mode, statusPromise) } private def wrapHandle(originalHandle: AssociationHandle, listener: AssociationEventListener, inbound: Boolean): ThrottlerHandle = { @@ -286,9 +297,9 @@ private[transport] class ThrottledAssociation( case Event(InboundPayload(p), _) ⇒ throttledMessages = throttledMessages enqueue p stay() - case Event(mode: ThrottleMode, ExposedHandle(exposedHandle)) ⇒ + case Event(ManagementCommand(mode: ThrottleMode, statusPromise), ExposedHandle(exposedHandle)) ⇒ inboundThrottleMode = mode - if (inboundThrottleMode == Blackhole) { + try if (mode == Blackhole) { throttledMessages = Queue.empty[ByteString] exposedHandle.disassociate() stop() @@ -296,7 +307,7 @@ private[transport] class ThrottledAssociation( associationHandler notify InboundAssociation(exposedHandle) exposedHandle.readHandlerPromise.future pipeTo self goto(WaitUpstreamListener) - } + } finally statusPromise.success(true) } when(WaitUpstreamListener) { @@ -321,12 +332,13 @@ private[transport] class ThrottledAssociation( } when(Throttling) { - case Event(mode: ThrottleMode, _) ⇒ + case Event(ManagementCommand(mode: ThrottleMode, statusPromise), _) ⇒ inboundThrottleMode = mode - if (inboundThrottleMode == Blackhole) throttledMessages = Queue.empty[ByteString] + if (mode == Blackhole) throttledMessages = Queue.empty[ByteString] cancelTimer(DequeueTimerName) if (throttledMessages.nonEmpty) scheduleDequeue(inboundThrottleMode.timeToAvailable(System.nanoTime(), throttledMessages.head.length)) + statusPromise.success(true) stay() case Event(InboundPayload(p), _) ⇒ forwardOrDelay(p) diff --git a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala index b2cdbcc54e..649597f4c7 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport import scala.concurrent.{ Promise, Future } diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala index dec126cd6a..f4c4cd05f3 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport.netty import akka.AkkaException diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index abc475ab4b..e285f40e19 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport.netty import akka.{ OnlyCauseStackTrace, ConfigurationException } diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala index 515637dad0..32e4025432 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport.netty import akka.actor.Address diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala index c52e8d9bc9..d46c738b44 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2009-2012 Typesafe Inc. + */ package akka.remote.transport.netty import akka.actor.Address From 695fe02e5855c10f032e50e83cfb26364b0eab7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Tue, 8 Jan 2013 14:05:55 +0100 Subject: [PATCH 031/122] Only client should issue an SSL handshake #2833 --- .../main/scala/akka/remote/transport/netty/NettyTransport.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index abc475ab4b..361337242a 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -248,7 +248,7 @@ class NettyTransport(private val settings: NettyTransportSettings, private val s private def sslHandler(isClient: Boolean): SslHandler = { val handler = NettySSLSupport(settings.SslSettings.get, log, isClient) - handler.setIssueHandshake(true) + if (isClient) handler.setIssueHandshake(true) handler } From 46d376b3e598c9440e18b2f8948970f8f48d9829 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Tue, 8 Jan 2013 15:09:51 +0100 Subject: [PATCH 032/122] Remove LargeClusterSpec, superseded by StressSpec, see #2786 --- .../scala/akka/cluster/LargeClusterSpec.scala | 330 ------------------ 1 file changed, 330 deletions(-) delete mode 100644 akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala deleted file mode 100644 index dd6a421819..0000000000 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LargeClusterSpec.scala +++ /dev/null @@ -1,330 +0,0 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ -package akka.cluster - -import com.typesafe.config.ConfigFactory -import akka.remote.testkit.MultiNodeConfig -import akka.remote.testkit.MultiNodeSpec -import akka.testkit._ -import akka.testkit.TestEvent._ -import scala.concurrent.duration._ -import akka.actor.ActorSystem -import java.util.concurrent.TimeoutException -import scala.collection.immutable.SortedSet -import scala.concurrent.Await -import java.util.concurrent.TimeUnit -import akka.remote.testconductor.RoleName -import akka.actor.Props -import akka.actor.Actor -import akka.cluster.MemberStatus._ - -object LargeClusterMultiJvmSpec extends MultiNodeConfig { - // each jvm simulates a datacenter with many nodes - val firstDatacenter = role("first-datacenter") - val secondDatacenter = role("second-datacenter") - val thirdDatacenter = role("third-datacenter") - val fourthDatacenter = role("fourth-datacenter") - val fifthDatacenter = role("fifth-datacenter") - - // Note that this test uses default configuration, - // not MultiNodeClusterSpec.clusterConfig - commonConfig(ConfigFactory.parseString(""" - # Number of ActorSystems in each jvm, can be specified as - # system property when running real tests. Many nodes - # will take long time and consume many threads. - # 10 => 50 nodes is possible to run on one machine. - akka.test.large-cluster-spec.nodes-per-datacenter = 2 - akka.cluster { - gossip-interval = 500 ms - auto-join = off - auto-down = on - failure-detector.acceptable-heartbeat-pause = 5s - publish-stats-interval = 0 s # always, when it happens - } - akka.event-handlers = ["akka.testkit.TestEventListener"] - akka.loglevel = INFO - akka.actor.provider = akka.cluster.ClusterActorRefProvider - akka.actor.default-dispatcher.fork-join-executor { - # when using nodes-per-datacenter=10 we need some extra - # threads to keep up with netty connect blocking - parallelism-min = 13 - parallelism-max = 13 - } - akka.scheduler.tick-duration = 33 ms - akka.remote.log-remote-lifecycle-events = off - akka.remote.netty.execution-pool-size = 4 - #akka.remote.netty.reconnection-time-window = 10s - akka.remote.netty.write-timeout = 5s - akka.remote.netty.backoff-timeout = 500ms - akka.remote.netty.connection-timeout = 500ms - - # Using a separate dispatcher for netty io doesn't reduce number - # of needed threads - # akka.remote.netty.use-dispatcher-for-io=akka.test.io-dispatcher - # akka.test.io-dispatcher.fork-join-executor { - # parallelism-min = 100 - # parallelism-max = 100 - # } - """)) -} - -class LargeClusterMultiJvmNode1 extends LargeClusterSpec -class LargeClusterMultiJvmNode2 extends LargeClusterSpec -class LargeClusterMultiJvmNode3 extends LargeClusterSpec -class LargeClusterMultiJvmNode4 extends LargeClusterSpec -class LargeClusterMultiJvmNode5 extends LargeClusterSpec - -abstract class LargeClusterSpec - extends MultiNodeSpec(LargeClusterMultiJvmSpec) - with MultiNodeClusterSpec { - - import LargeClusterMultiJvmSpec._ - import ClusterEvent._ - - override def muteLog(sys: ActorSystem = system): Unit = { - super.muteLog(sys) - muteMarkingAsUnreachable(sys) - muteDeadLetters(sys) - } - - var systems: IndexedSeq[ActorSystem] = IndexedSeq(system) - val nodesPerDatacenter = system.settings.config.getInt( - "akka.test.large-cluster-spec.nodes-per-datacenter") - - /** - * Since we start some ActorSystems/Clusters outside of the - * MultiNodeClusterSpec control we can't use use the mechanism - * defined in MultiNodeClusterSpec to inject failure detector etc. - * Use ordinary Cluster extension with default AccrualFailureDetector. - */ - override def cluster: Cluster = Cluster(system) - - override def afterTermination(): Unit = { - systems foreach { _.shutdown } - val shutdownTimeout = 20.seconds - val deadline = Deadline.now + shutdownTimeout - systems.foreach { sys ⇒ - if (sys.isTerminated) - () // already done - else if (deadline.isOverdue) - sys.log.warning("Failed to shutdown [{}] within [{}]", sys.name, shutdownTimeout) - else { - try sys.awaitTermination(deadline.timeLeft) catch { - case _: TimeoutException ⇒ sys.log.warning("Failed to shutdown [{}] within [{}]", sys.name, shutdownTimeout) - } - } - } - } - - def startupSystems(): Unit = { - // one system is already started by the multi-node test - for (n ← 2 to nodesPerDatacenter) { - val sys = ActorSystem(myself.name + "-" + n, system.settings.config) - muteLog(sys) - systems :+= sys - } - - // Initialize the Cluster extensions, i.e. startup the clusters - systems foreach { Cluster(_) } - } - - def expectedMaxDuration(totalNodes: Int): FiniteDuration = 5.seconds + 2.seconds * totalNodes - - def joinAll(from: RoleName, to: RoleName, totalNodes: Int, runOnRoles: RoleName*): Unit = { - val joiningClusters = systems.map(Cluster(_)).toSet - join(joiningClusters, from, to, totalNodes, runOnRoles: _*) - } - - def join(joiningClusterNodes: Set[Cluster], from: RoleName, to: RoleName, totalNodes: Int, runOnRoles: RoleName*): Unit = { - runOnRoles must contain(from) - runOnRoles must contain(to) - - runOn(runOnRoles: _*) { - systems.size must be(nodesPerDatacenter) // make sure it is initialized - - val clusterNodes = if(isNode(from)) joiningClusterNodes else systems.map(Cluster(_)).toSet - val startGossipCounts = Map.empty[Cluster, Long] ++ - clusterNodes.map(c ⇒ (c -> c.readView.latestStats.receivedGossipCount)) - def gossipCount(c: Cluster): Long = { - c.readView.latestStats.receivedGossipCount - startGossipCounts(c) - } - val startTime = System.nanoTime - def tookMillis: String = TimeUnit.NANOSECONDS.toMillis(System.nanoTime - startTime) + " ms" - - val latch = TestLatch(clusterNodes.size) - clusterNodes foreach { c ⇒ - c.subscribe(system.actorOf(Props(new Actor { - var upCount = 0 - def receive = { - case state: CurrentClusterState ⇒ - upCount = state.members.count(_.status == Up) - case MemberUp(_) if !latch.isOpen ⇒ - upCount += 1 - if (upCount == totalNodes) { - log.debug("All [{}] nodes Up in [{}], it took [{}], received [{}] gossip messages", - totalNodes, c.selfAddress, tookMillis, gossipCount(c)) - latch.countDown() - } - case _ ⇒ // ignore - } - })), classOf[MemberEvent]) - } - - runOn(from) { - clusterNodes foreach { _ join to } - } - - Await.ready(latch, remaining) - - val counts = clusterNodes.map(gossipCount(_)) - val formattedStats = "mean=%s min=%s max=%s".format(counts.sum / clusterNodes.size, counts.min, counts.max) - log.info("Convergence of [{}] nodes reached, it took [{}], received [{}] gossip messages per node", - totalNodes, tookMillis, formattedStats) - - } - } - - "A large cluster" must { - - "join all nodes in first-datacenter to first-datacenter" taggedAs LongRunningTest in { - runOn(firstDatacenter) { - startupSystems() - startClusterNode() - } - enterBarrier("first-datacenter-started") - - val totalNodes = nodesPerDatacenter - within(expectedMaxDuration(totalNodes)) { - joinAll(from = firstDatacenter, to = firstDatacenter, totalNodes, runOnRoles = firstDatacenter) - enterBarrier("first-datacenter-joined") - } - } - - "join all nodes in second-datacenter to first-datacenter" taggedAs LongRunningTest in { - runOn(secondDatacenter) { - startupSystems() - } - enterBarrier("second-datacenter-started") - - val totalNodes = nodesPerDatacenter * 2 - within(expectedMaxDuration(totalNodes)) { - joinAll(from = secondDatacenter, to = firstDatacenter, totalNodes, runOnRoles = firstDatacenter, secondDatacenter) - enterBarrier("second-datacenter-joined") - } - } - - "join all nodes in third-datacenter to first-datacenter" taggedAs LongRunningTest in { - runOn(thirdDatacenter) { - startupSystems() - } - enterBarrier("third-datacenter-started") - - val totalNodes = nodesPerDatacenter * 3 - within(expectedMaxDuration(totalNodes)) { - joinAll(from = thirdDatacenter, to = firstDatacenter, totalNodes, - runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter) - enterBarrier("third-datacenter-joined") - } - } - - "join all nodes in fourth-datacenter to first-datacenter" taggedAs LongRunningTest in { - runOn(fourthDatacenter) { - startupSystems() - } - enterBarrier("fourth-datacenter-started") - - val totalNodes = nodesPerDatacenter * 4 - within(expectedMaxDuration(totalNodes)) { - joinAll(from = fourthDatacenter, to = firstDatacenter, totalNodes, - runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter) - enterBarrier("fourth-datacenter-joined") - } - } - - "join nodes one by one from fifth-datacenter to first-datacenter" taggedAs LongRunningTest in { - runOn(fifthDatacenter) { - startupSystems() - } - enterBarrier("fifth-datacenter-started") - - // enough to join a few one-by-one (takes too long time otherwise) - val (bulk, oneByOne) = systems.splitAt(systems.size - 3) - - if (bulk.nonEmpty) { - val totalNodes = nodesPerDatacenter * 4 + bulk.size - within(expectedMaxDuration(totalNodes)) { - val joiningClusters = if(isNode(fifthDatacenter)) bulk.map(Cluster(_)).toSet else Set.empty[Cluster] - join(joiningClusters, from = fifthDatacenter, to = firstDatacenter, totalNodes, - runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter) - enterBarrier("fifth-datacenter-joined-" + bulk.size) - } - } - - for (i ← 0 until oneByOne.size) { - val totalNodes = nodesPerDatacenter * 4 + bulk.size + i + 1 - within(expectedMaxDuration(totalNodes)) { - val joiningClusters = if(isNode(fifthDatacenter)) Set(Cluster(oneByOne(i))) else Set.empty[Cluster] - join(joiningClusters, from = fifthDatacenter, to = firstDatacenter, totalNodes, - runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter) - enterBarrier("fifth-datacenter-joined-" + (bulk.size + i)) - } - } - } - - "detect failure and auto-down crashed nodes in second-datacenter" taggedAs LongRunningTest in { - val downedNodes = nodesPerDatacenter - val liveNodes = nodesPerDatacenter * 4 - - within(30.seconds + 3.seconds * liveNodes) { - val startGossipCounts = Map.empty[Cluster, Long] ++ - systems.map(sys ⇒ (Cluster(sys) -> Cluster(sys).readView.latestStats.receivedGossipCount)) - def gossipCount(c: Cluster): Long = { - c.readView.latestStats.receivedGossipCount - startGossipCounts(c) - } - val startTime = System.nanoTime - def tookMillis: String = TimeUnit.NANOSECONDS.toMillis(System.nanoTime - startTime) + " ms" - - val latch = TestLatch(nodesPerDatacenter) - systems foreach { sys ⇒ - Cluster(sys).subscribe(sys.actorOf(Props(new Actor { - var gotDowned = Set.empty[Member] - def receive = { - case state: CurrentClusterState ⇒ - gotDowned = gotDowned ++ state.unreachable.filter(_.status == Down) - checkDone() - case MemberDowned(m) if !latch.isOpen ⇒ - gotDowned = gotDowned + m - checkDone() - case _ ⇒ // not interesting - } - def checkDone(): Unit = if (gotDowned.size == downedNodes) { - log.info("Detected [{}] downed nodes in [{}], it took [{}], received [{}] gossip messages", - downedNodes, Cluster(sys).selfAddress, tookMillis, gossipCount(Cluster(sys))) - latch.countDown() - } - })), classOf[ClusterDomainEvent]) - } - - runOn(firstDatacenter) { - testConductor.shutdown(secondDatacenter, 0).await - } - - enterBarrier("second-datacenter-shutdown") - - runOn(firstDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter) { - Await.ready(latch, remaining) - val mergeCount = systems.map(sys ⇒ Cluster(sys).readView.latestStats.mergeCount).sum - val counts = systems.map(sys ⇒ gossipCount(Cluster(sys))) - val formattedStats = "mean=%s min=%s max=%s".format(counts.sum / nodesPerDatacenter, counts.min, counts.max) - log.info("Convergence of [{}] nodes reached after failure, it took [{}], received [{}] gossip messages per node, merged [{}] times", - liveNodes, tookMillis, formattedStats, mergeCount) - } - - enterBarrier("after-6") - } - - } - - } -} From 554e3396cafa2c45ad42d5cf5f3f6d0a6785539a Mon Sep 17 00:00:00 2001 From: Roland Kuhn Date: Tue, 8 Jan 2013 18:08:22 +0100 Subject: [PATCH 033/122] remove extra "the" in docs --- akka-docs/rst/general/message-delivery-guarantees.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/akka-docs/rst/general/message-delivery-guarantees.rst b/akka-docs/rst/general/message-delivery-guarantees.rst index 86b0716c90..d9544d7016 100644 --- a/akka-docs/rst/general/message-delivery-guarantees.rst +++ b/akka-docs/rst/general/message-delivery-guarantees.rst @@ -1,4 +1,3 @@ - .. _message-delivery-guarantees: ########################### @@ -171,7 +170,7 @@ Reliability of Local Message Sends ---------------------------------- The Akka test suite relies on not losing messages in the local context (and for -non-error condition tests also for remote deployment), meaning that the we +non-error condition tests also for remote deployment), meaning that we actually do apply the best effort to keep our tests stable. A local ``tell`` operation can however fail for the same reasons as a normal method call can on the JVM: From 943c438d5ea860790dd448e6cd725f4201137f13 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 4 Jan 2013 16:39:48 +0100 Subject: [PATCH 034/122] Publish clean state when joining (PublishStart), see #2871 * The failure in JoinTwoClustersSpec was due to missing publishing of cluster events when clearing current state when joining * This fix is in the right direction, but joining clusters like this will need some design thought, creating ticket 2873 for that --- .../main/scala/akka/cluster/ClusterDaemon.scala | 6 +++--- .../src/main/scala/akka/cluster/ClusterEvent.scala | 14 +++++++++----- .../src/main/scala/akka/cluster/Gossip.scala | 8 ++++++-- .../cluster/ClusterDomainEventPublisherSpec.scala | 12 ++++++++++++ .../src/test/scala/akka/cluster/GossipSpec.scala | 2 +- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala index 50644e431c..6db32a7316 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala @@ -191,7 +191,7 @@ private[cluster] final class ClusterCoreDaemon(publisher: ActorRef) extends Acto // note that self is not initially member, // and the Gossip is not versioned for this 'Node' yet - var latestGossip: Gossip = Gossip() + var latestGossip: Gossip = Gossip.empty var stats = ClusterStats() @@ -283,7 +283,7 @@ private[cluster] final class ClusterCoreDaemon(publisher: ActorRef) extends Acto def join(address: Address): Unit = { if (!latestGossip.members.exists(_.address == address)) { // wipe our state since a node that joins a cluster must be empty - latestGossip = Gossip() + latestGossip = Gossip.empty // wipe the failure detector since we are starting fresh and shouldn't care about the past failureDetector.reset() // wipe the publisher since we are starting fresh @@ -377,7 +377,7 @@ private[cluster] final class ClusterCoreDaemon(publisher: ActorRef) extends Acto def removing(address: Address): Unit = { log.info("Cluster Node [{}] - Node has been REMOVED by the leader - shutting down...", selfAddress) // just cleaning up the gossip state - latestGossip = Gossip() + latestGossip = Gossip.empty publish(latestGossip) context.become(removed) // make sure the final (removed) state is published diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala index 7d1997649d..7e7befeb4e 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala @@ -238,8 +238,8 @@ object ClusterEvent { private[cluster] final class ClusterDomainEventPublisher extends Actor with ActorLogging { import InternalClusterAction._ - var latestGossip: Gossip = Gossip() - var latestConvergedGossip: Gossip = Gossip() + var latestGossip: Gossip = Gossip.empty + var latestConvergedGossip: Gossip = Gossip.empty var memberEvents: immutable.Seq[MemberEvent] = immutable.Seq.empty def receive = { @@ -313,7 +313,11 @@ private[cluster] final class ClusterDomainEventPublisher extends Actor with Acto def publish(event: AnyRef): Unit = eventStream publish event - def publishStart(): Unit = clearState() + def publishStart(): Unit = + if ((latestGossip ne Gossip.empty) || (latestConvergedGossip ne Gossip.empty)) { + clearState() + publishCurrentClusterState(None) + } def publishDone(receiver: ActorRef): Unit = { clearState() @@ -321,7 +325,7 @@ private[cluster] final class ClusterDomainEventPublisher extends Actor with Acto } def clearState(): Unit = { - latestGossip = Gossip() - latestConvergedGossip = Gossip() + latestGossip = Gossip.empty + latestConvergedGossip = Gossip.empty } } diff --git a/akka-cluster/src/main/scala/akka/cluster/Gossip.scala b/akka-cluster/src/main/scala/akka/cluster/Gossip.scala index 1f96434995..9173e977a5 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Gossip.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Gossip.scala @@ -13,6 +13,10 @@ import MemberStatus._ */ private[cluster] object Gossip { val emptyMembers: immutable.SortedSet[Member] = immutable.SortedSet.empty + val empty: Gossip = new Gossip(Gossip.emptyMembers) + + def apply(members: immutable.SortedSet[Member]) = + if (members.isEmpty) empty else empty.copy(members = members) } /** @@ -49,8 +53,8 @@ private[cluster] object Gossip { * removed node telling it to shut itself down. */ private[cluster] case class Gossip( + members: immutable.SortedSet[Member], // sorted set of members with their status, sorted by address overview: GossipOverview = GossipOverview(), - members: immutable.SortedSet[Member] = Gossip.emptyMembers, // sorted set of members with their status, sorted by address version: VectorClock = VectorClock()) // vector clock version extends ClusterMessage // is a serializable cluster message with Versioned[Gossip] { @@ -128,7 +132,7 @@ private[cluster] case class Gossip( // 4. fresh seen table val mergedSeen = Map.empty[Address, VectorClock] - Gossip(GossipOverview(mergedSeen, mergedUnreachable), mergedMembers, mergedVClock) + Gossip(mergedMembers, GossipOverview(mergedSeen, mergedUnreachable), mergedVClock) } /** diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala index 6c13c79f23..37412db930 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala @@ -134,5 +134,17 @@ class ClusterDomainEventPublisherSpec extends AkkaSpec expectMsg(MemberUp(c2)) expectMsgType[SeenChanged] } + + "publish clean state when PublishStart" in { + publisher ! PublishChanges(g3) + expectMsg(MemberUp(b1)) + expectMsg(MemberUp(c2)) + expectMsgType[SeenChanged] + + publisher ! PublishStart + expectMsgType[CurrentClusterState] must be(CurrentClusterState()) + + } + } } diff --git a/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala b/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala index 704b12dac0..63707558ce 100644 --- a/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala @@ -29,7 +29,7 @@ class GossipSpec extends WordSpec with MustMatchers { "A Gossip" must { "reach convergence when it's empty" in { - Gossip().convergence must be(true) + Gossip.empty.convergence must be(true) } "merge members by status priority" in { From dec4542f11a1d7d73d073594f41fb6c3e93c8126 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Tue, 8 Jan 2013 20:58:13 +0100 Subject: [PATCH 035/122] Revert "Propagate statusPromise down to the actual change in throttler, see #2877" This reverts commit 9c1a00d02017a1786820d27a62496afb7e8285ce. --- .../src/main/scala/akka/remote/Endpoint.scala | 3 -- .../scala/akka/remote/FailureDetector.scala | 3 -- .../remote/PhiAccrualFailureDetector.scala | 3 -- .../src/main/scala/akka/remote/Remoting.scala | 10 +--- .../scala/akka/remote/RemotingLifecycle.scala | 3 -- .../transport/AbstractTransportAdapter.scala | 3 -- .../akka/remote/transport/AkkaPduCodec.scala | 3 -- .../transport/AkkaProtocolTransport.scala | 6 +-- .../FailureInjectorTransportAdapter.scala | 3 -- .../akka/remote/transport/TestTransport.scala | 3 -- .../transport/ThrottlerTransportAdapter.scala | 52 +++++++------------ .../akka/remote/transport/Transport.scala | 3 -- .../remote/transport/netty/NettyHelpers.scala | 3 -- .../transport/netty/NettyTransport.scala | 3 -- .../remote/transport/netty/TcpSupport.scala | 3 -- .../remote/transport/netty/UdpSupport.scala | 3 -- 16 files changed, 22 insertions(+), 85 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/Endpoint.scala b/akka-remote/src/main/scala/akka/remote/Endpoint.scala index 2b90447517..639084e812 100644 --- a/akka-remote/src/main/scala/akka/remote/Endpoint.scala +++ b/akka-remote/src/main/scala/akka/remote/Endpoint.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote import akka.{ OnlyCauseStackTrace, AkkaException } diff --git a/akka-remote/src/main/scala/akka/remote/FailureDetector.scala b/akka-remote/src/main/scala/akka/remote/FailureDetector.scala index d4ac7b896f..d3562b2afd 100644 --- a/akka-remote/src/main/scala/akka/remote/FailureDetector.scala +++ b/akka-remote/src/main/scala/akka/remote/FailureDetector.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote import java.util.concurrent.TimeUnit._ diff --git a/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala b/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala index caff3fe387..b0525b48d8 100644 --- a/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala +++ b/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote import akka.remote.FailureDetector.Clock diff --git a/akka-remote/src/main/scala/akka/remote/Remoting.scala b/akka-remote/src/main/scala/akka/remote/Remoting.scala index 1653293269..be9ff83684 100644 --- a/akka-remote/src/main/scala/akka/remote/Remoting.scala +++ b/akka-remote/src/main/scala/akka/remote/Remoting.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote import scala.language.postfixOps @@ -403,12 +400,7 @@ private[remote] class EndpointManager(conf: Config, log: LoggingAdapter) extends val accepting: Receive = { case ManagementCommand(cmd, statusPromise) ⇒ - val allStatuses = transportMapping.values map { transport ⇒ - val p = Promise[Boolean]() - transport.managementCommand(cmd, p) - p.future - } - statusPromise completeWith Future.fold(allStatuses)(true)(_ && _) + transportMapping.values foreach { _.managementCommand(cmd, statusPromise) } case s @ Send(message, senderOption, recipientRef) ⇒ val recipientAddress = recipientRef.path.address diff --git a/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala b/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala index 1c454f8101..bd44ff3982 100644 --- a/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala +++ b/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote import akka.event.{ LoggingAdapter, Logging } diff --git a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala index 1163e8cea0..b46f89262b 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import scala.language.postfixOps diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala index 3d1d68c437..b6b17c68c7 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import akka.AkkaException diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala index 4799bfba76..09ac87b9fa 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import akka.{ OnlyCauseStackTrace, AkkaException } @@ -378,8 +375,7 @@ private[transport] class ProtocolStateActor(initialData: InitialProtocolStateDat case Disassociate ⇒ stop() - case Heartbeat ⇒ - failureDetector.heartbeat(); stay() + case Heartbeat ⇒ failureDetector.heartbeat(); stay() case Payload(payload) ⇒ stateData match { case AssociatedWaitHandler(handlerFuture, wrappedHandle, queue) ⇒ diff --git a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala index 2846c72e02..59be194dde 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import FailureInjectorTransportAdapter._ diff --git a/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala index c9fb06e6bc..200e038778 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import TestTransport._ diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index f668953037..82143f483a 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -1,12 +1,8 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import ThrottlerTransportAdapter._ import akka.actor._ import akka.pattern.pipe -import akka.remote.EndpointManager.ManagementCommand import akka.remote.transport.ActorTransportAdapter.AssociateUnderlying import akka.remote.transport.ActorTransportAdapter.ListenUnderlying import akka.remote.transport.ActorTransportAdapter.ListenerRegistered @@ -21,7 +17,6 @@ import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicReference import scala.annotation.tailrec import scala.collection.immutable.Queue -import scala.concurrent.Future import scala.concurrent.Promise import scala.math.min import scala.util.{ Success, Failure } @@ -112,8 +107,10 @@ class ThrottlerTransportAdapter(_wrappedTransport: Transport, _system: ExtendedA protected def managerProps = Props(new ThrottlerManager(wrappedTransport)) override def managementCommand(cmd: Any, statusPromise: Promise[Boolean]): Unit = cmd match { - case s: SetThrottle ⇒ manager ! ManagementCommand(s, statusPromise) - case _ ⇒ wrappedTransport.managementCommand(cmd, statusPromise) + case s @ SetThrottle(_, _, _) ⇒ + manager ! s + statusPromise.success(true) + case _ ⇒ wrappedTransport.managementCommand(cmd, statusPromise) } } @@ -167,22 +164,17 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A wrappedHandle.readHandlerPromise.future.map { (_, inMode) } pipeTo wrappedHandle.throttlerActor handleTable ::= nakedAddress(naked) -> wrappedHandle statusPromise.success(wrappedHandle) - case ManagementCommand(SetThrottle(address, direction, mode), statusPromise) ⇒ + case s @ SetThrottle(address, direction, mode) ⇒ val naked = nakedAddress(address) throttlingModes += naked -> (mode, direction) - val allStatuses = handleTable.map { - case (`naked`, handle) ⇒ - val p = Promise[Boolean]() - setMode(handle, mode, direction, p) - p.future - case _ ⇒ Future.successful(true) + handleTable.foreach { + case (addr, handle) ⇒ + if (addr == naked) setMode(handle, mode, direction) } - statusPromise completeWith Future.fold(allStatuses)(true)(_ && _) - case Checkin(origin, handle) ⇒ val naked: Address = nakedAddress(origin) handleTable ::= naked -> handle - setMode(naked, handle, Promise[Boolean]()) + setMode(naked, handle) } @@ -200,19 +192,16 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) extends A } } - private def setMode(nakedAddress: Address, handle: ThrottlerHandle, statusPromise: Promise[Boolean]): Unit = { + private def setMode(nakedAddress: Address, handle: ThrottlerHandle): Unit = { throttlingModes.get(nakedAddress) match { - case Some((mode, direction)) ⇒ setMode(handle, mode, direction, statusPromise) - case None ⇒ setMode(handle, Unthrottled, Direction.Both, statusPromise) + case Some((mode, direction)) ⇒ setMode(handle, mode, direction) + case None ⇒ setMode(handle, Unthrottled, Direction.Both) } } - private def setMode(handle: ThrottlerHandle, mode: ThrottleMode, direction: Direction, - statusPromise: Promise[Boolean]): Unit = { - if (direction.includes(Direction.Send)) - handle.outboundThrottleMode.set(mode) - if (direction.includes(Direction.Receive)) - handle.throttlerActor ! ManagementCommand(mode, statusPromise) + private def setMode(handle: ThrottlerHandle, mode: ThrottleMode, direction: Direction): Unit = { + if (direction.includes(Direction.Receive)) handle.throttlerActor ! mode + if (direction.includes(Direction.Send)) handle.outboundThrottleMode.set(mode) } private def wrapHandle(originalHandle: AssociationHandle, listener: AssociationEventListener, inbound: Boolean): ThrottlerHandle = { @@ -297,9 +286,9 @@ private[transport] class ThrottledAssociation( case Event(InboundPayload(p), _) ⇒ throttledMessages = throttledMessages enqueue p stay() - case Event(ManagementCommand(mode: ThrottleMode, statusPromise), ExposedHandle(exposedHandle)) ⇒ + case Event(mode: ThrottleMode, ExposedHandle(exposedHandle)) ⇒ inboundThrottleMode = mode - try if (mode == Blackhole) { + if (inboundThrottleMode == Blackhole) { throttledMessages = Queue.empty[ByteString] exposedHandle.disassociate() stop() @@ -307,7 +296,7 @@ private[transport] class ThrottledAssociation( associationHandler notify InboundAssociation(exposedHandle) exposedHandle.readHandlerPromise.future pipeTo self goto(WaitUpstreamListener) - } finally statusPromise.success(true) + } } when(WaitUpstreamListener) { @@ -332,13 +321,12 @@ private[transport] class ThrottledAssociation( } when(Throttling) { - case Event(ManagementCommand(mode: ThrottleMode, statusPromise), _) ⇒ + case Event(mode: ThrottleMode, _) ⇒ inboundThrottleMode = mode - if (mode == Blackhole) throttledMessages = Queue.empty[ByteString] + if (inboundThrottleMode == Blackhole) throttledMessages = Queue.empty[ByteString] cancelTimer(DequeueTimerName) if (throttledMessages.nonEmpty) scheduleDequeue(inboundThrottleMode.timeToAvailable(System.nanoTime(), throttledMessages.head.length)) - statusPromise.success(true) stay() case Event(InboundPayload(p), _) ⇒ forwardOrDelay(p) diff --git a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala index 649597f4c7..b2cdbcc54e 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport import scala.concurrent.{ Promise, Future } diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala index f4c4cd05f3..dec126cd6a 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyHelpers.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport.netty import akka.AkkaException diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index 001b7a35f0..361337242a 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport.netty import akka.{ OnlyCauseStackTrace, ConfigurationException } diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala index 32e4025432..515637dad0 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport.netty import akka.actor.Address diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala index d46c738b44..c52e8d9bc9 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/UdpSupport.scala @@ -1,6 +1,3 @@ -/** - * Copyright (C) 2009-2012 Typesafe Inc. - */ package akka.remote.transport.netty import akka.actor.Address From 9faccf62703c3e483567e0cd0fe2c38444126a05 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Wed, 9 Jan 2013 11:06:57 +0100 Subject: [PATCH 036/122] Remove todo ReentrantReadWriteLock --- akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala b/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala index 613599fa8e..9cb35c82c1 100644 --- a/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala +++ b/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala @@ -29,7 +29,7 @@ class BoundedBlockingQueue[E <: AnyRef]( require(maxCapacity > 0) } - protected val lock = new ReentrantLock(false) // TODO might want to switch to ReentrantReadWriteLock + protected val lock = new ReentrantLock(false) private val notEmpty = lock.newCondition() private val notFull = lock.newCondition() From adfeb2c1f07153b7eec11705fda956f62b1bbb04 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 9 Jan 2013 01:47:48 +0100 Subject: [PATCH 037/122] #2879 - updating copyright info --- akka-actor-tests/src/test/java/akka/actor/JavaAPI.java | 2 +- akka-actor-tests/src/test/java/akka/actor/JavaExtension.java | 2 +- akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java | 4 ++-- .../src/test/java/akka/routing/CustomRouteTest.java | 2 +- akka-actor-tests/src/test/java/akka/util/JavaDuration.java | 2 +- akka-actor-tests/src/test/scala/akka/Messages.scala | 2 +- .../scala/akka/actor/ActorConfigurationVerificationSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/ActorDSLSpec.scala | 2 +- .../scala/akka/actor/ActorFireForgetRequestReplySpec.scala | 2 +- .../src/test/scala/akka/actor/ActorLifeCycleSpec.scala | 2 +- .../src/test/scala/akka/actor/ActorLookupSpec.scala | 4 ++-- akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala | 2 +- .../src/test/scala/akka/actor/ActorSystemSpec.scala | 2 +- .../src/test/scala/akka/actor/ActorTimeoutSpec.scala | 2 +- .../src/test/scala/akka/actor/ActorWithBoundedStashSpec.scala | 2 +- .../src/test/scala/akka/actor/ActorWithStashSpec.scala | 2 +- .../src/test/scala/akka/actor/DeathWatchSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala | 2 +- .../src/test/scala/akka/actor/FSMTimingSpec.scala | 2 +- .../src/test/scala/akka/actor/FSMTransitionSpec.scala | 2 +- .../src/test/scala/akka/actor/ForwardActorSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/HotSwapSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/IOActor.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/JavaAPISpec.scala | 2 +- .../src/test/scala/akka/actor/LocalActorRefProviderSpec.scala | 2 +- .../src/test/scala/akka/actor/ReceiveTimeoutSpec.scala | 2 +- .../src/test/scala/akka/actor/RelativeActorPathSpec.scala | 2 +- .../src/test/scala/akka/actor/RestartStrategySpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/actor/Supervisor.scala | 2 +- .../src/test/scala/akka/actor/SupervisorHierarchySpec.scala | 2 +- .../src/test/scala/akka/actor/SupervisorMiscSpec.scala | 2 +- .../src/test/scala/akka/actor/SupervisorSpec.scala | 2 +- .../src/test/scala/akka/actor/SupervisorTreeSpec.scala | 2 +- .../src/test/scala/akka/actor/Ticket669Spec.scala | 2 +- .../src/test/scala/akka/actor/TypedActorSpec.scala | 2 +- .../src/test/scala/akka/actor/dispatch/ActorModelSpec.scala | 2 +- .../src/test/scala/akka/actor/dispatch/DispatchersSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/config/ConfigSpec.scala | 2 +- .../src/test/scala/akka/dataflow/Future2Actor.scala | 2 +- .../src/test/scala/akka/dispatch/MailboxConfigSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala | 2 +- .../src/test/scala/akka/event/EventStreamSpec.scala | 2 +- .../src/test/scala/akka/event/LoggingReceiveSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala | 4 ++-- .../src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala | 4 ++-- .../src/test/scala/akka/pattern/CircuitBreakerSpec.scala | 2 +- .../src/test/scala/akka/pattern/PatternSpec.scala | 2 +- .../test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala | 2 +- .../test/scala/akka/routing/ConsistentHashingRouterSpec.scala | 2 +- .../src/test/scala/akka/routing/CustomRouteSpec.scala | 4 ++-- .../src/test/scala/akka/routing/ResizerSpec.scala | 2 +- .../src/test/scala/akka/routing/RoutingSpec.scala | 2 +- .../src/test/scala/akka/serialization/SerializeSpec.scala | 2 +- .../scala/akka/testkit/CallingThreadDispatcherModelSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/util/DurationSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/util/IndexSpec.scala | 4 ++-- .../src/test/scala/akka/util/JavaDurationSpec.scala | 2 +- akka-actor-tests/src/test/scala/akka/util/SwitchSpec.scala | 2 +- akka-actor/src/main/java/akka/actor/AbstractActorRef.java | 2 +- .../src/main/java/akka/actor/dungeon/AbstractActorCell.java | 2 +- akka-actor/src/main/java/akka/dispatch/AbstractMailbox.java | 2 +- .../main/java/akka/dispatch/AbstractMessageDispatcher.java | 2 +- .../src/main/java/akka/pattern/AbstractCircuitBreaker.java | 2 +- .../src/main/java/akka/pattern/AbstractPromiseActorRef.java | 4 ++-- akka-actor/src/main/scala/akka/AkkaException.scala | 2 +- akka-actor/src/main/scala/akka/actor/Actor.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorCell.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorDSL.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorPath.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorRef.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorSelection.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/ActorSystem.scala | 2 +- akka-actor/src/main/scala/akka/actor/Address.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/Deployer.scala | 2 +- akka-actor/src/main/scala/akka/actor/DynamicAccess.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/Extension.scala | 2 +- akka-actor/src/main/scala/akka/actor/FSM.scala | 2 +- akka-actor/src/main/scala/akka/actor/FaultHandling.scala | 2 +- akka-actor/src/main/scala/akka/actor/IO.scala | 2 +- akka-actor/src/main/scala/akka/actor/Props.scala | 2 +- .../src/main/scala/akka/actor/RepointableActorRef.scala | 2 +- akka-actor/src/main/scala/akka/actor/Scheduler.scala | 2 +- akka-actor/src/main/scala/akka/actor/Stash.scala | 2 +- akka-actor/src/main/scala/akka/actor/TypedActor.scala | 2 +- akka-actor/src/main/scala/akka/actor/UntypedActor.scala | 2 +- .../src/main/scala/akka/actor/UntypedActorWithStash.scala | 2 +- akka-actor/src/main/scala/akka/actor/dsl/Creators.scala | 2 +- akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala | 2 +- akka-actor/src/main/scala/akka/actor/dungeon/Children.scala | 4 ++-- .../src/main/scala/akka/actor/dungeon/ChildrenContainer.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala | 4 ++-- .../src/main/scala/akka/actor/dungeon/FaultHandling.scala | 2 +- .../src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/package.scala | 2 +- .../src/main/scala/akka/dispatch/AbstractDispatcher.scala | 2 +- .../src/main/scala/akka/dispatch/BalancingDispatcher.scala | 2 +- .../src/main/scala/akka/dispatch/BatchingExecutor.scala | 2 +- akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala | 2 +- akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala | 2 +- akka-actor/src/main/scala/akka/dispatch/Future.scala | 2 +- akka-actor/src/main/scala/akka/dispatch/Mailbox.scala | 2 +- .../src/main/scala/akka/dispatch/PinnedDispatcher.scala | 2 +- .../src/main/scala/akka/dispatch/ThreadPoolBuilder.scala | 4 ++-- akka-actor/src/main/scala/akka/event/EventBus.scala | 2 +- akka-actor/src/main/scala/akka/event/EventStream.scala | 4 ++-- akka-actor/src/main/scala/akka/event/Logging.scala | 2 +- akka-actor/src/main/scala/akka/event/LoggingReceive.scala | 4 ++-- akka-actor/src/main/scala/akka/japi/JavaAPI.scala | 2 +- akka-actor/src/main/scala/akka/pattern/AskSupport.scala | 4 ++-- akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala | 2 +- .../src/main/scala/akka/pattern/FutureTimeoutSupport.scala | 4 ++-- .../src/main/scala/akka/pattern/GracefulStopSupport.scala | 4 ++-- akka-actor/src/main/scala/akka/pattern/Patterns.scala | 2 +- akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala | 4 ++-- akka-actor/src/main/scala/akka/pattern/package.scala | 4 ++-- akka-actor/src/main/scala/akka/routing/ConsistentHash.scala | 2 +- .../src/main/scala/akka/routing/ConsistentHashingRouter.scala | 4 ++-- akka-actor/src/main/scala/akka/routing/Listeners.scala | 2 +- akka-actor/src/main/scala/akka/routing/Routing.scala | 2 +- akka-actor/src/main/scala/akka/routing/package.scala | 2 +- .../src/main/scala/akka/serialization/Serialization.scala | 2 +- .../scala/akka/serialization/SerializationExtension.scala | 4 ++-- akka-actor/src/main/scala/akka/serialization/Serializer.scala | 2 +- .../src/main/scala/akka/util/BoundedBlockingQueue.scala | 2 +- akka-actor/src/main/scala/akka/util/BoxedType.scala | 2 +- akka-actor/src/main/scala/akka/util/ByteIterator.scala | 2 +- akka-actor/src/main/scala/akka/util/ByteString.scala | 2 +- .../main/scala/akka/util/ClassLoaderObjectInputStream.scala | 2 +- akka-actor/src/main/scala/akka/util/Collections.scala | 4 ++-- akka-actor/src/main/scala/akka/util/Crypt.scala | 2 +- akka-actor/src/main/scala/akka/util/HashCode.scala | 2 +- akka-actor/src/main/scala/akka/util/Helpers.scala | 2 +- akka-actor/src/main/scala/akka/util/Index.scala | 2 +- akka-actor/src/main/scala/akka/util/LockUtil.scala | 2 +- akka-actor/src/main/scala/akka/util/Reflect.scala | 4 ++-- akka-actor/src/main/scala/akka/util/SubclassifiedIndex.scala | 2 +- akka-actor/src/main/scala/akka/util/Timeout.scala | 2 +- akka-actor/src/main/scala/akka/util/Unsafe.java | 2 +- akka-actor/src/main/scala/akka/util/WildcardTree.scala | 2 +- akka-agent/src/main/scala/akka/agent/Agent.scala | 2 +- akka-camel/src/main/scala/akka/camel/Activation.scala | 2 +- .../src/main/scala/akka/camel/ActorRouteDefinition.scala | 2 +- akka-camel/src/main/scala/akka/camel/Camel.scala | 2 +- akka-camel/src/main/scala/akka/camel/CamelMessage.scala | 2 +- akka-camel/src/main/scala/akka/camel/Consumer.scala | 2 +- akka-camel/src/main/scala/akka/camel/Producer.scala | 2 +- .../main/scala/akka/camel/internal/ActivationMessage.scala | 4 ++-- .../main/scala/akka/camel/internal/ActivationTracker.scala | 2 +- .../scala/akka/camel/internal/ConsumerActorRouteBuilder.scala | 2 +- .../scala/akka/camel/internal/component/ActorComponent.scala | 2 +- .../main/scala/akka/camel/javaapi/UntypedConsumerActor.scala | 2 +- .../main/scala/akka/camel/javaapi/UntypedProducerActor.scala | 2 +- akka-camel/src/main/scala/akka/package.scala | 2 +- akka-camel/src/test/java/akka/camel/ConsumerJavaTestBase.java | 2 +- akka-camel/src/test/java/akka/camel/MessageJavaTestBase.java | 2 +- .../src/test/java/akka/camel/SampleErrorHandlingConsumer.java | 2 +- .../src/test/java/akka/camel/SampleUntypedConsumer.java | 2 +- .../test/java/akka/camel/SampleUntypedForwardingProducer.java | 2 +- .../test/java/akka/camel/SampleUntypedReplyingProducer.java | 2 +- .../src/test/scala/akka/camel/ActivationIntegrationTest.scala | 4 ++-- akka-camel/src/test/scala/akka/camel/CamelConfigSpec.scala | 2 +- .../src/test/scala/akka/camel/CamelExchangeAdapterTest.scala | 2 +- akka-camel/src/test/scala/akka/camel/CamelMessageTest.scala | 2 +- .../src/test/scala/akka/camel/ConcurrentActivationTest.scala | 2 +- .../src/test/scala/akka/camel/ConsumerIntegrationTest.scala | 2 +- akka-camel/src/test/scala/akka/camel/ConsumerJavaTest.scala | 4 ++-- akka-camel/src/test/scala/akka/camel/MessageJavaTest.scala | 2 +- akka-camel/src/test/scala/akka/camel/MessageScalaTest.scala | 2 +- .../src/test/scala/akka/camel/ProducerFeatureTest.scala | 2 +- akka-camel/src/test/scala/akka/camel/TestSupport.scala | 2 +- .../src/test/scala/akka/camel/UntypedProducerTest.scala | 2 +- .../internal/component/ActorComponentConfigurationTest.scala | 4 ++-- .../akka/camel/internal/component/ActorProducerTest.scala | 2 +- .../akka/camel/internal/component/DurationConverterTest.scala | 2 +- .../src/main/scala/akka/cluster/AccrualFailureDetector.scala | 2 +- akka-cluster/src/main/scala/akka/cluster/Cluster.scala | 2 +- .../src/main/scala/akka/cluster/ClusterActorRefProvider.scala | 2 +- akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala | 2 +- akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala | 2 +- .../src/main/scala/akka/cluster/ClusterHeartbeat.scala | 2 +- akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala | 2 +- .../src/main/scala/akka/cluster/ClusterMetricsCollector.scala | 2 +- .../src/main/scala/akka/cluster/ClusterReadView.scala | 2 +- .../src/main/scala/akka/cluster/ClusterSettings.scala | 2 +- .../src/main/scala/akka/cluster/FailureDetector.scala | 2 +- akka-cluster/src/main/scala/akka/cluster/Gossip.scala | 2 +- akka-cluster/src/main/scala/akka/cluster/Member.scala | 4 ++-- akka-cluster/src/main/scala/akka/cluster/VectorClock.scala | 2 +- .../akka/cluster/routing/AdaptiveLoadBalancingRouter.scala | 4 ++-- .../main/scala/akka/cluster/routing/ClusterRouterConfig.scala | 2 +- .../akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala | 2 +- .../scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala | 2 +- .../akka/cluster/ClusterAccrualFailureDetectorSpec.scala | 2 +- .../multi-jvm/scala/akka/cluster/ClusterDeathWatchSpec.scala | 2 +- .../scala/akka/cluster/ClusterMetricsDisabledSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/ClusterMetricsSpec.scala | 4 ++-- .../src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/JoinInProgressSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/JoinSeedNodeSpec.scala | 2 +- .../multi-jvm/scala/akka/cluster/JoinTwoClustersSpec.scala | 2 +- .../akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala | 2 +- akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala | 2 +- .../akka/cluster/MembershipChangeListenerExitingSpec.scala | 2 +- .../scala/akka/cluster/MembershipChangeListenerJoinSpec.scala | 2 +- .../akka/cluster/MembershipChangeListenerLeavingSpec.scala | 2 +- .../scala/akka/cluster/MembershipChangeListenerUpSpec.scala | 2 +- .../multi-jvm/scala/akka/cluster/MinMembersBeforeUpSpec.scala | 2 +- .../multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala | 2 +- .../cluster/NodeLeavingAndExitingAndBeingRemovedSpec.scala | 2 +- .../scala/akka/cluster/NodeLeavingAndExitingSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/NodeMembershipSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/NodeUpSpec.scala | 2 +- .../multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/StressSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/SunnyWeatherSpec.scala | 2 +- .../src/multi-jvm/scala/akka/cluster/TransitionSpec.scala | 2 +- .../akka/cluster/UnreachableNodeRejoinsClusterSpec.scala | 2 +- .../cluster/routing/AdaptiveLoadBalancingRouterSpec.scala | 2 +- .../cluster/routing/ClusterConsistentHashingRouterSpec.scala | 2 +- .../cluster/routing/ClusterRoundRobinRoutedActorSpec.scala | 2 +- .../test/scala/akka/cluster/AccrualFailureDetectorSpec.scala | 2 +- .../src/test/scala/akka/cluster/ClusterConfigSpec.scala | 2 +- .../src/test/scala/akka/cluster/ClusterDeployerSpec.scala | 4 ++-- .../scala/akka/cluster/ClusterDomainEventPublisherSpec.scala | 2 +- .../src/test/scala/akka/cluster/ClusterDomainEventSpec.scala | 2 +- .../scala/akka/cluster/ClusterHeartbeatSenderStateSpec.scala | 2 +- akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala | 2 +- akka-cluster/src/test/scala/akka/cluster/EWMASpec.scala | 2 +- .../src/test/scala/akka/cluster/FailureDetectorPuppet.scala | 2 +- akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala | 2 +- .../src/test/scala/akka/cluster/MemberOrderingSpec.scala | 2 +- .../test/scala/akka/cluster/MetricNumericConverterSpec.scala | 4 ++-- .../src/test/scala/akka/cluster/MetricValuesSpec.scala | 4 ++-- .../src/test/scala/akka/cluster/MetricsCollectorSpec.scala | 2 +- .../src/test/scala/akka/cluster/MetricsGossipSpec.scala | 2 +- .../src/test/scala/akka/cluster/NodeMetricsSpec.scala | 2 +- .../src/test/scala/akka/cluster/VectorClockSpec.scala | 2 +- .../test/scala/akka/cluster/routing/MetricsSelectorSpec.scala | 2 +- .../test/scala/akka/cluster/routing/WeightedRouteesSpec.scala | 2 +- .../src/main/scala/akka/contrib/pattern/ReliableProxy.scala | 2 +- .../scala/akka/contrib/throttle/TimerBasedThrottler.scala | 4 ++-- .../scala/akka/contrib/pattern/ReliableProxySpec.scala | 2 +- .../src/test/java/akka/contrib/pattern/ReliableProxyTest.java | 2 +- .../scala/akka/contrib/pattern/ReliableProxyDocSpec.scala | 2 +- .../scala/akka/contrib/throttle/TimerBasedThrottlerSpec.scala | 4 ++-- akka-dataflow/src/main/scala/akka/dataflow/package.scala | 4 ++-- akka-dataflow/src/test/scala/akka/dataflow/DataflowSpec.scala | 2 +- akka-docs/_sphinx/themes/akka/layout.html | 2 +- .../code/docs/circuitbreaker/CircuitBreakerDocSpec.scala | 2 +- .../common/code/docs/circuitbreaker/DangerousJavaActor.java | 4 ++-- akka-docs/rst/common/code/docs/duration/Java.java | 2 +- akka-docs/rst/common/code/docs/duration/Sample.scala | 2 +- akka-docs/rst/general/code/docs/config/ConfigDoc.java | 2 +- akka-docs/rst/general/code/docs/config/ConfigDocSpec.scala | 2 +- akka-docs/rst/java/code/docs/actor/FSMDocTest.scala | 4 ++-- akka-docs/rst/java/code/docs/actor/FSMDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/actor/FaultHandlingTest.scala | 2 +- akka-docs/rst/java/code/docs/actor/FaultHandlingTestBase.java | 2 +- akka-docs/rst/java/code/docs/actor/FirstUntypedActor.java | 2 +- akka-docs/rst/java/code/docs/actor/ImmutableMessage.java | 2 +- .../java/code/docs/actor/MyReceivedTimeoutUntypedActor.java | 4 ++-- akka-docs/rst/java/code/docs/actor/MyUntypedActor.java | 2 +- akka-docs/rst/java/code/docs/actor/SchedulerDocTest.scala | 2 +- akka-docs/rst/java/code/docs/actor/SchedulerDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/actor/TypedActorDocTest.scala | 2 +- akka-docs/rst/java/code/docs/actor/TypedActorDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/actor/UntypedActorDocTest.scala | 2 +- .../rst/java/code/docs/actor/UntypedActorDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/actor/UntypedActorSwapper.java | 2 +- .../rst/java/code/docs/actor/japi/FaultHandlingDocSample.java | 4 ++-- akka-docs/rst/java/code/docs/agent/AgentDocJavaSpec.scala | 4 ++-- akka-docs/rst/java/code/docs/agent/AgentDocTest.java | 4 ++-- .../rst/java/code/docs/dispatcher/DispatcherDocTest.scala | 2 +- .../rst/java/code/docs/dispatcher/DispatcherDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/event/LoggingDocTest.scala | 2 +- akka-docs/rst/java/code/docs/event/LoggingDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/extension/ExtensionDocTest.scala | 2 +- .../rst/java/code/docs/extension/ExtensionDocTestBase.java | 2 +- .../java/code/docs/extension/SettingsExtensionDocTest.scala | 2 +- .../code/docs/extension/SettingsExtensionDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/future/FutureDocTest.scala | 2 +- akka-docs/rst/java/code/docs/future/FutureDocTestBase.java | 2 +- .../docs/jrouting/ConsistentHashingRouterDocTestBase.java | 2 +- .../rst/java/code/docs/jrouting/CustomRouterDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/jrouting/FibonacciActor.java | 2 +- akka-docs/rst/java/code/docs/jrouting/ParentActor.java | 4 ++-- akka-docs/rst/java/code/docs/jrouting/PrintlnActor.java | 2 +- .../rst/java/code/docs/jrouting/RouterViaConfigExample.java | 4 ++-- .../rst/java/code/docs/jrouting/RouterViaProgramExample.java | 4 ++-- akka-docs/rst/java/code/docs/pattern/JavaTemplate.java | 2 +- .../rst/java/code/docs/pattern/SchedulerPatternTest.java | 2 +- .../rst/java/code/docs/remoting/RemoteDeploymentDocTest.scala | 4 ++-- .../java/code/docs/remoting/RemoteDeploymentDocTestBase.java | 4 ++-- .../java/code/docs/serialization/SerializationDocTest.scala | 2 +- .../code/docs/serialization/SerializationDocTestBase.java | 2 +- akka-docs/rst/java/code/docs/testkit/TestKitDocTest.java | 2 +- akka-docs/rst/java/code/docs/testkit/TestKitSampleTest.java | 2 +- .../rst/java/code/docs/transactor/CoordinatedCounter.java | 2 +- akka-docs/rst/java/code/docs/transactor/Coordinator.java | 2 +- akka-docs/rst/java/code/docs/transactor/Counter.java | 2 +- akka-docs/rst/java/code/docs/transactor/FriendlyCounter.java | 2 +- akka-docs/rst/java/code/docs/transactor/Increment.java | 2 +- akka-docs/rst/java/code/docs/transactor/Message.java | 2 +- .../rst/java/code/docs/transactor/TransactorDocJavaSpec.scala | 4 ++-- .../rst/java/code/docs/transactor/TransactorDocTest.java | 2 +- akka-docs/rst/java/code/docs/zeromq/ZeromqDocTest.scala | 2 +- akka-docs/rst/java/code/docs/zeromq/ZeromqDocTestBase.java | 2 +- .../code/docs/actor/mailbox/DurableMailboxDocSpec.scala | 4 ++-- .../code/docs/actor/mailbox/DurableMailboxDocTest.scala | 2 +- .../code/docs/actor/mailbox/DurableMailboxDocTestBase.java | 2 +- akka-docs/rst/scala/code/docs/actor/ActorDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala | 2 +- .../rst/scala/code/docs/actor/FaultHandlingDocSample.scala | 2 +- .../rst/scala/code/docs/actor/FaultHandlingDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/actor/SchedulerDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/actor/TypedActorDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/actor/UnnestedReceives.scala | 2 +- akka-docs/rst/scala/code/docs/agent/AgentDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/camel/Consumers.scala | 4 ++-- akka-docs/rst/scala/code/docs/camel/CustomRoute.scala | 2 +- akka-docs/rst/scala/code/docs/dataflow/DataflowDocSpec.scala | 2 +- .../rst/scala/code/docs/dispatcher/DispatcherDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/event/LoggingDocSpec.scala | 2 +- .../rst/scala/code/docs/extension/ExtensionDocSpec.scala | 2 +- .../scala/code/docs/extension/SettingsExtensionDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/future/FutureDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/io/BinaryCoding.scala | 2 +- akka-docs/rst/scala/code/docs/io/HTTPServer.scala | 2 +- akka-docs/rst/scala/code/docs/pattern/ScalaTemplate.scala | 2 +- .../rst/scala/code/docs/pattern/SchedulerPatternSpec.scala | 2 +- .../scala/code/docs/remoting/RemoteDeploymentDocSpec.scala | 4 ++-- .../code/docs/routing/ConsistentHashingRouterDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/routing/RouterDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/routing/RouterTypeExample.scala | 4 ++-- .../rst/scala/code/docs/routing/RouterViaConfigDocSpec.scala | 4 ++-- .../rst/scala/code/docs/routing/RouterViaConfigExample.scala | 4 ++-- .../rst/scala/code/docs/routing/RouterViaProgramExample.scala | 4 ++-- .../scala/code/docs/serialization/SerializationDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/testkit/PlainWordSpec.scala | 4 ++-- akka-docs/rst/scala/code/docs/testkit/TestKitUsageSpec.scala | 4 ++-- akka-docs/rst/scala/code/docs/testkit/TestkitDocSpec.scala | 2 +- .../rst/scala/code/docs/transactor/TransactorDocSpec.scala | 2 +- akka-docs/rst/scala/code/docs/zeromq/ZeromqDocSpec.scala | 2 +- .../scala/akka/actor/mailbox/filebased/FileBasedMailbox.scala | 2 +- .../actor/mailbox/filebased/FileBasedMailboxSettings.scala | 2 +- .../src/main/scala/akka/actor/mailbox/DurableMailbox.scala | 2 +- .../test/scala/akka/actor/mailbox/DurableMailboxSpec.scala | 2 +- .../osgi/aries/blueprint/BlueprintActorSystemFactory.scala | 2 +- .../akka/osgi/aries/blueprint/ActorSystemAwareBean.scala | 2 +- .../akka/osgi/aries/blueprint/NamespaceHandlerTest.scala | 2 +- akka-osgi/src/main/scala/akka/osgi/ActorSystemActivator.scala | 2 +- .../src/main/scala/akka/osgi/OsgiActorSystemFactory.scala | 2 +- .../scala/akka/osgi/impl/BundleDelegatingClassLoader.scala | 2 +- .../src/test/scala/akka/osgi/ActorSystemActivatorTest.scala | 4 ++-- akka-osgi/src/test/scala/akka/osgi/PojoSRTestSupport.scala | 2 +- akka-osgi/src/test/scala/akka/osgi/test/PingPong.scala | 2 +- akka-osgi/src/test/scala/akka/osgi/test/TestActivators.scala | 4 ++-- .../src/main/scala/akka/remote/testconductor/Conductor.scala | 2 +- .../src/main/scala/akka/remote/testkit/MultiNodeSpec.scala | 2 +- .../multi-jvm/scala/akka/remote/LookupRemoteActorSpec.scala | 2 +- .../src/multi-jvm/scala/akka/remote/NewRemoteActorSpec.scala | 2 +- .../akka/remote/router/RandomRoutedRemoteActorSpec.scala | 2 +- .../akka/remote/router/RoundRobinRoutedRemoteActorSpec.scala | 2 +- .../remote/router/ScatterGatherRoutedRemoteActorSpec.scala | 2 +- .../scala/akka/remote/testconductor/TestConductorSpec.scala | 2 +- .../scala/akka/remote/testkit/MultiNodeSpecSpec.scala | 2 +- .../src/test/scala/akka/remote/QuietReporter.scala | 2 +- .../test/scala/akka/remote/testconductor/BarrierSpec.scala | 2 +- .../test/scala/akka/remote/testconductor/ControllerSpec.scala | 4 ++-- .../src/test/scala/akka/remote/testkit/LogRoleReplace.scala | 4 ++-- .../src/test/scala/akka/remote/testkit/STMultiNodeSpec.scala | 2 +- akka-remote/src/main/protocol/RemoteProtocol.proto | 4 ++-- .../scala/akka/remote/DefaultFailureDetectorRegistry.scala | 2 +- .../src/main/scala/akka/remote/FailureDetectorRegistry.scala | 2 +- .../src/main/scala/akka/remote/MessageSerializer.scala | 2 +- .../src/main/scala/akka/remote/RemoteActorRefProvider.scala | 2 +- akka-remote/src/main/scala/akka/remote/RemoteDaemon.scala | 2 +- akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala | 4 ++-- akka-remote/src/main/scala/akka/remote/RemoteSettings.scala | 2 +- akka-remote/src/main/scala/akka/remote/netty/Client.scala | 2 +- .../src/main/scala/akka/remote/netty/NettyRemoteSupport.scala | 2 +- .../src/main/scala/akka/remote/netty/NettySSLSupport.scala | 2 +- akka-remote/src/main/scala/akka/remote/netty/Server.scala | 2 +- akka-remote/src/main/scala/akka/remote/netty/Settings.scala | 2 +- .../main/scala/akka/remote/routing/RemoteRouterConfig.scala | 2 +- .../akka/remote/security/provider/AES128CounterInetRNG.scala | 2 +- .../remote/security/provider/AES128CounterSecureRNG.scala | 2 +- .../akka/remote/security/provider/AES256CounterInetRNG.scala | 2 +- .../remote/security/provider/AES256CounterSecureRNG.scala | 2 +- .../scala/akka/remote/security/provider/AkkaProvider.scala | 2 +- .../main/scala/akka/remote/security/provider/SeedSize.scala | 2 +- .../akka/remote/serialization/DaemonMsgCreateSerializer.scala | 4 ++-- .../scala/akka/remote/serialization/ProtobufSerializer.scala | 4 ++-- akka-remote/src/test/protocol/ProtobufProtocol.proto | 2 +- .../test/scala/akka/remote/AccrualFailureDetectorSpec.scala | 2 +- .../src/test/scala/akka/remote/NetworkFailureSpec.scala | 2 +- .../src/test/scala/akka/remote/RemoteCommunicationSpec.scala | 2 +- akka-remote/src/test/scala/akka/remote/RemoteConfigSpec.scala | 2 +- .../src/test/scala/akka/remote/RemoteDeathWatchSpec.scala | 2 +- .../src/test/scala/akka/remote/RemoteDeployerSpec.scala | 4 ++-- akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala | 2 +- akka-remote/src/test/scala/akka/remote/RemotingSpec.scala | 2 +- .../test/scala/akka/remote/Ticket1978CommunicationSpec.scala | 2 +- akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala | 4 ++-- .../remote/serialization/DaemonMsgCreateSerializerSpec.scala | 2 +- .../akka/remote/serialization/ProtobufSerializerSpec.scala | 2 +- .../src/main/java/sample/kernel/hello/java/HelloKernel.java | 2 +- .../src/main/scala/sample/kernel/hello/HelloKernel.scala | 2 +- .../akka-sample-hello/src/main/scala/sample/hello/Main.scala | 2 +- .../multi-jvm/scala/sample/multinode/MultiNodeSample.scala | 2 +- .../src/test/scala/sample/multinode/STMultiNodeSpec.scala | 2 +- .../main/java/sample/remote/calculator/java/InternalMsg.java | 2 +- .../remote/calculator/java/JAdvancedCalculatorActor.java | 2 +- .../src/main/java/sample/remote/calculator/java/JCalcApp.java | 2 +- .../sample/remote/calculator/java/JCalculatorApplication.java | 4 ++-- .../java/sample/remote/calculator/java/JCreationActor.java | 2 +- .../main/java/sample/remote/calculator/java/JCreationApp.java | 2 +- .../sample/remote/calculator/java/JCreationApplication.java | 2 +- .../main/java/sample/remote/calculator/java/JLookupActor.java | 2 +- .../main/java/sample/remote/calculator/java/JLookupApp.java | 2 +- .../sample/remote/calculator/java/JLookupApplication.java | 2 +- .../sample/remote/calculator/java/JSimpleCalculatorActor.java | 2 +- .../src/main/java/sample/remote/calculator/java/Op.java | 2 +- .../sample/remote/calculator/CalculatorApplication.scala | 2 +- .../scala/sample/remote/calculator/CreationApplication.scala | 2 +- .../scala/sample/remote/calculator/LookupApplication.scala | 2 +- .../src/main/scala/sample/remote/calculator/MathOp.scala | 4 ++-- akka-sbt-plugin/sample/src/main/scala/HelloKernel.scala | 4 ++-- .../src/main/scala/akka/event/slf4j/Slf4jEventHandler.scala | 2 +- .../test/scala/akka/event/slf4j/Slf4jEventHandlerSpec.scala | 2 +- akka-testkit/src/main/java/akka/testkit/JavaTestKit.java | 2 +- .../src/main/scala/akka/testkit/CallingThreadDispatcher.scala | 2 +- akka-testkit/src/main/scala/akka/testkit/Routing.scala | 2 +- akka-testkit/src/main/scala/akka/testkit/TestActorRef.scala | 2 +- akka-testkit/src/main/scala/akka/testkit/TestBarrier.scala | 2 +- .../src/main/scala/akka/testkit/TestEventListener.scala | 2 +- akka-testkit/src/main/scala/akka/testkit/TestFSMRef.scala | 2 +- akka-testkit/src/main/scala/akka/testkit/TestKit.scala | 2 +- .../src/main/scala/akka/testkit/TestKitExtension.scala | 4 ++-- akka-testkit/src/main/scala/akka/testkit/TestLatch.scala | 2 +- .../src/test/java/akka/testkit/TestActorRefJavaCompile.java | 4 ++-- akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala | 2 +- akka-testkit/src/test/scala/akka/testkit/AkkaSpecSpec.scala | 2 +- .../src/test/scala/akka/testkit/TestActorRefSpec.scala | 2 +- akka-testkit/src/test/scala/akka/testkit/TestFSMRefSpec.scala | 2 +- akka-testkit/src/test/scala/akka/testkit/TestTags.scala | 2 +- .../src/main/scala/akka/transactor/Coordinated.scala | 2 +- .../src/main/scala/akka/transactor/Transactor.scala | 2 +- .../src/main/scala/akka/transactor/TransactorExtension.scala | 4 ++-- .../src/main/scala/akka/transactor/UntypedTransactor.scala | 2 +- .../test/java/akka/transactor/ExpectedFailureException.java | 2 +- akka-transactor/src/test/java/akka/transactor/Increment.java | 2 +- .../test/java/akka/transactor/UntypedCoordinatedCounter.java | 2 +- .../java/akka/transactor/UntypedCoordinatedIncrementTest.java | 2 +- .../src/test/java/akka/transactor/UntypedCounter.java | 2 +- .../src/test/java/akka/transactor/UntypedFailer.java | 2 +- .../src/test/java/akka/transactor/UntypedTransactorTest.java | 2 +- .../test/scala/akka/transactor/CoordinatedIncrementSpec.scala | 2 +- .../src/test/scala/akka/transactor/FickleFriendsSpec.scala | 2 +- .../scala/akka/transactor/JavaUntypedCoordinatedSpec.scala | 2 +- .../scala/akka/transactor/JavaUntypedTransactorSpec.scala | 2 +- .../src/test/scala/akka/transactor/TransactorSpec.scala | 2 +- .../src/main/scala/akka/zeromq/ConcurrentSocketActor.scala | 2 +- akka-zeromq/src/main/scala/akka/zeromq/Response.scala | 2 +- akka-zeromq/src/main/scala/akka/zeromq/SocketOption.scala | 2 +- .../src/main/scala/akka/zeromq/ZMQMessageDeserializer.scala | 2 +- akka-zeromq/src/main/scala/akka/zeromq/ZeroMQ.scala | 4 ++-- akka-zeromq/src/main/scala/akka/zeromq/ZeroMQExtension.scala | 2 +- akka-zeromq/src/main/scala/akka/zeromq/package.scala | 4 ++-- .../src/test/java/akka/zeromq/ZeroMQFromJavaTests.java | 2 +- .../test/scala/akka/zeromq/ConcurrentSocketActorSpec.scala | 2 +- .../src/test/scala/akka/zeromq/ZeroMQFromJavaSpec.scala | 2 +- project/AkkaBuild.scala | 2 +- scripts/generate_config_with_secure_cookie.sh | 2 +- 480 files changed, 559 insertions(+), 559 deletions(-) diff --git a/akka-actor-tests/src/test/java/akka/actor/JavaAPI.java b/akka-actor-tests/src/test/java/akka/actor/JavaAPI.java index 80563b679f..16b92e9abc 100644 --- a/akka-actor-tests/src/test/java/akka/actor/JavaAPI.java +++ b/akka-actor-tests/src/test/java/akka/actor/JavaAPI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor; diff --git a/akka-actor-tests/src/test/java/akka/actor/JavaExtension.java b/akka-actor-tests/src/test/java/akka/actor/JavaExtension.java index b87ace5849..5a054a81b8 100644 --- a/akka-actor-tests/src/test/java/akka/actor/JavaExtension.java +++ b/akka-actor-tests/src/test/java/akka/actor/JavaExtension.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor; diff --git a/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java b/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java index 047492e00f..ac21542c46 100644 --- a/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java +++ b/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor; @@ -14,4 +14,4 @@ class MyNonPublicActorClass extends UntypedActor { @Override public void onReceive(Object msg) { getSender().tell(msg, getSelf()); } -} \ No newline at end of file +} diff --git a/akka-actor-tests/src/test/java/akka/routing/CustomRouteTest.java b/akka-actor-tests/src/test/java/akka/routing/CustomRouteTest.java index c0ccd4de26..2eca39d70b 100644 --- a/akka-actor-tests/src/test/java/akka/routing/CustomRouteTest.java +++ b/akka-actor-tests/src/test/java/akka/routing/CustomRouteTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing; diff --git a/akka-actor-tests/src/test/java/akka/util/JavaDuration.java b/akka-actor-tests/src/test/java/akka/util/JavaDuration.java index 326afb8543..34e7c61353 100644 --- a/akka-actor-tests/src/test/java/akka/util/JavaDuration.java +++ b/akka-actor-tests/src/test/java/akka/util/JavaDuration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util; diff --git a/akka-actor-tests/src/test/scala/akka/Messages.scala b/akka-actor-tests/src/test/scala/akka/Messages.scala index 32f80c7b24..1a4867374a 100644 --- a/akka-actor-tests/src/test/scala/akka/Messages.scala +++ b/akka-actor-tests/src/test/scala/akka/Messages.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorConfigurationVerificationSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorConfigurationVerificationSpec.scala index c130d23149..1466c9e969 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorConfigurationVerificationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorConfigurationVerificationSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorDSLSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorDSLSpec.scala index 2aba0e18d4..29ad6775f3 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorDSLSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorDSLSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorFireForgetRequestReplySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorFireForgetRequestReplySpec.scala index 93e17d3192..277b844319 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorFireForgetRequestReplySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorFireForgetRequestReplySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala index 430a64172a..ec99f97180 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala index 4d19f5ea9e..02b69f83d8 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor @@ -312,4 +312,4 @@ class ActorLookupSpec extends AkkaSpec with DefaultTimeout { } -} \ No newline at end of file +} diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala index a1da055cf6..e0037a5480 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala index 781b8d4cab..5f295de702 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorTimeoutSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorTimeoutSpec.scala index 965a99319d..bd78f849c8 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorTimeoutSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorTimeoutSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorWithBoundedStashSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorWithBoundedStashSpec.scala index 4d95bf02f6..ae683b648b 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorWithBoundedStashSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorWithBoundedStashSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala index c4d9248d88..57f08041a0 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala index d01848943f..54d30d4b65 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala index 954337431c..f5f916a90d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala index b503ddede4..a89c6a931e 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala index e5436d4e9c..c90dde277d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/FSMTransitionSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/FSMTransitionSpec.scala index 04a0eea352..899fc932a2 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/FSMTransitionSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/FSMTransitionSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ForwardActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ForwardActorSpec.scala index 40c652c3ec..965e55f897 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ForwardActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ForwardActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/HotSwapSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/HotSwapSpec.scala index 120caa3e93..354f23c76f 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/HotSwapSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/HotSwapSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/IOActor.scala b/akka-actor-tests/src/test/scala/akka/actor/IOActor.scala index 5cd9075e38..fffc6896d9 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/IOActor.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/IOActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/JavaAPISpec.scala b/akka-actor-tests/src/test/scala/akka/actor/JavaAPISpec.scala index ca7210beaf..35f852ea77 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/JavaAPISpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/JavaAPISpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala index 4cb432aa23..314739e78e 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ReceiveTimeoutSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ReceiveTimeoutSpec.scala index f34dbda9e3..0e77d4a7a9 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ReceiveTimeoutSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ReceiveTimeoutSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/RelativeActorPathSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/RelativeActorPathSpec.scala index 6870a36125..fd076463c7 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/RelativeActorPathSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/RelativeActorPathSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala index 190c738f83..169c84b8e5 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/Supervisor.scala b/akka-actor-tests/src/test/scala/akka/actor/Supervisor.scala index 80524ea9dc..6b16cdfbb6 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/Supervisor.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/Supervisor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor 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 722105ebec..095305dce4 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala index 070a5aba51..52b50491ee 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorSpec.scala index eafb47c47d..7b7c36e0a5 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorTreeSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorTreeSpec.scala index 96e063a383..f10ae024f3 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorTreeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorTreeSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/Ticket669Spec.scala b/akka-actor-tests/src/test/scala/akka/actor/Ticket669Spec.scala index cca4652de9..f04b01d0ae 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/Ticket669Spec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/Ticket669Spec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala index 5522eb0b67..1270d62aca 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala index a736003421..3fa308ca3e 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dispatch diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatchersSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatchersSpec.scala index 39612fe409..6c39655706 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatchersSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatchersSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dispatch diff --git a/akka-actor-tests/src/test/scala/akka/config/ConfigSpec.scala b/akka-actor-tests/src/test/scala/akka/config/ConfigSpec.scala index 9a43631894..8aee3b5caa 100644 --- a/akka-actor-tests/src/test/scala/akka/config/ConfigSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/config/ConfigSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.config diff --git a/akka-actor-tests/src/test/scala/akka/dataflow/Future2Actor.scala b/akka-actor-tests/src/test/scala/akka/dataflow/Future2Actor.scala index bc225933fe..572f0b5ef4 100644 --- a/akka-actor-tests/src/test/scala/akka/dataflow/Future2Actor.scala +++ b/akka-actor-tests/src/test/scala/akka/dataflow/Future2Actor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dataflow diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/MailboxConfigSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/MailboxConfigSpec.scala index 94954ab4d8..a79a3c9ab8 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/MailboxConfigSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/MailboxConfigSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala b/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala index 0f7799adc0..d93fdbb4f6 100644 --- a/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event diff --git a/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala b/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala index 442d35f194..af70e23ab5 100644 --- a/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event diff --git a/akka-actor-tests/src/test/scala/akka/event/LoggingReceiveSpec.scala b/akka-actor-tests/src/test/scala/akka/event/LoggingReceiveSpec.scala index d7ce93e997..d61fd1496b 100644 --- a/akka-actor-tests/src/test/scala/akka/event/LoggingReceiveSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/LoggingReceiveSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event diff --git a/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala index 8f3f7f0510..73e707e3ac 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern @@ -70,4 +70,4 @@ class AskSpec extends AkkaSpec { } -} \ No newline at end of file +} diff --git a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala index a21dd6f22a..c3a5a9cb83 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerMTSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern @@ -91,4 +91,4 @@ class CircuitBreakerMTSpec extends AkkaSpec { result.toSet must be === Set("succeed") } } -} \ No newline at end of file +} diff --git a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala index 954fefb58d..8cfcb559a9 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern diff --git a/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala index 0e4333e04e..028463c8bc 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern diff --git a/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala index 9f3c121d86..4f45bf9257 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing diff --git a/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala index 867da83bd7..a68f08f845 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing diff --git a/akka-actor-tests/src/test/scala/akka/routing/CustomRouteSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/CustomRouteSpec.scala index 00bd46f430..6363325797 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/CustomRouteSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/CustomRouteSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing @@ -49,4 +49,4 @@ class CustomRouteSpec extends AkkaSpec { } } -} \ No newline at end of file +} diff --git a/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala index c9136248e3..398a931ca6 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing diff --git a/akka-actor-tests/src/test/scala/akka/routing/RoutingSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/RoutingSpec.scala index 9d7522f950..23445ae1a0 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/RoutingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/RoutingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing 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 c49dc8037f..d7c7e61b2c 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.serialization diff --git a/akka-actor-tests/src/test/scala/akka/testkit/CallingThreadDispatcherModelSpec.scala b/akka-actor-tests/src/test/scala/akka/testkit/CallingThreadDispatcherModelSpec.scala index 5b023054d4..c23102c35f 100644 --- a/akka-actor-tests/src/test/scala/akka/testkit/CallingThreadDispatcherModelSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/testkit/CallingThreadDispatcherModelSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.testkit diff --git a/akka-actor-tests/src/test/scala/akka/util/DurationSpec.scala b/akka-actor-tests/src/test/scala/akka/util/DurationSpec.scala index ca285274aa..6a82e09949 100644 --- a/akka-actor-tests/src/test/scala/akka/util/DurationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/DurationSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor-tests/src/test/scala/akka/util/IndexSpec.scala b/akka-actor-tests/src/test/scala/akka/util/IndexSpec.scala index d2d87b4c14..16374b9c10 100644 --- a/akka-actor-tests/src/test/scala/akka/util/IndexSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/IndexSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util @@ -129,4 +129,4 @@ class IndexSpec extends AkkaSpec with MustMatchers with DefaultTimeout { tasks.foreach(Await.result(_, timeout.duration)) } } -} \ No newline at end of file +} diff --git a/akka-actor-tests/src/test/scala/akka/util/JavaDurationSpec.scala b/akka-actor-tests/src/test/scala/akka/util/JavaDurationSpec.scala index 2278873b56..f9bd2ace91 100644 --- a/akka-actor-tests/src/test/scala/akka/util/JavaDurationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/JavaDurationSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor-tests/src/test/scala/akka/util/SwitchSpec.scala b/akka-actor-tests/src/test/scala/akka/util/SwitchSpec.scala index cf272cba88..10fca828a1 100644 --- a/akka-actor-tests/src/test/scala/akka/util/SwitchSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/SwitchSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/java/akka/actor/AbstractActorRef.java b/akka-actor/src/main/java/akka/actor/AbstractActorRef.java index 650182a457..65d2834694 100644 --- a/akka-actor/src/main/java/akka/actor/AbstractActorRef.java +++ b/akka-actor/src/main/java/akka/actor/AbstractActorRef.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor; diff --git a/akka-actor/src/main/java/akka/actor/dungeon/AbstractActorCell.java b/akka-actor/src/main/java/akka/actor/dungeon/AbstractActorCell.java index 6735b6e2cb..4f9771b256 100644 --- a/akka-actor/src/main/java/akka/actor/dungeon/AbstractActorCell.java +++ b/akka-actor/src/main/java/akka/actor/dungeon/AbstractActorCell.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon; diff --git a/akka-actor/src/main/java/akka/dispatch/AbstractMailbox.java b/akka-actor/src/main/java/akka/dispatch/AbstractMailbox.java index c4ac378fad..d299a3886a 100644 --- a/akka-actor/src/main/java/akka/dispatch/AbstractMailbox.java +++ b/akka-actor/src/main/java/akka/dispatch/AbstractMailbox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch; diff --git a/akka-actor/src/main/java/akka/dispatch/AbstractMessageDispatcher.java b/akka-actor/src/main/java/akka/dispatch/AbstractMessageDispatcher.java index 183812428e..415670968b 100644 --- a/akka-actor/src/main/java/akka/dispatch/AbstractMessageDispatcher.java +++ b/akka-actor/src/main/java/akka/dispatch/AbstractMessageDispatcher.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch; diff --git a/akka-actor/src/main/java/akka/pattern/AbstractCircuitBreaker.java b/akka-actor/src/main/java/akka/pattern/AbstractCircuitBreaker.java index 44482bb357..6d2f0dbf41 100644 --- a/akka-actor/src/main/java/akka/pattern/AbstractCircuitBreaker.java +++ b/akka-actor/src/main/java/akka/pattern/AbstractCircuitBreaker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern; diff --git a/akka-actor/src/main/java/akka/pattern/AbstractPromiseActorRef.java b/akka-actor/src/main/java/akka/pattern/AbstractPromiseActorRef.java index bb0f03861c..4c55a4c219 100644 --- a/akka-actor/src/main/java/akka/pattern/AbstractPromiseActorRef.java +++ b/akka-actor/src/main/java/akka/pattern/AbstractPromiseActorRef.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern; @@ -18,4 +18,4 @@ final class AbstractPromiseActorRef { throw new ExceptionInInitializerError(t); } } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/AkkaException.scala b/akka-actor/src/main/scala/akka/AkkaException.scala index f290c7e565..3cec55f1c1 100644 --- a/akka-actor/src/main/scala/akka/AkkaException.scala +++ b/akka-actor/src/main/scala/akka/AkkaException.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka diff --git a/akka-actor/src/main/scala/akka/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala index 3706799f23..a665d1029b 100644 --- a/akka-actor/src/main/scala/akka/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index 51f11c044c..6f48fd235e 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorDSL.scala b/akka-actor/src/main/scala/akka/actor/ActorDSL.scala index bee50ff78e..2b43fb8196 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorDSL.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorDSL.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorPath.scala b/akka-actor/src/main/scala/akka/actor/ActorPath.scala index 4cb61d2212..4597d87f9c 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorPath.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorPath.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor import scala.annotation.tailrec diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index a6685ae549..fc88fa4fe8 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index 5a3bb7dac2..f1a8d95fd0 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorSelection.scala b/akka-actor/src/main/scala/akka/actor/ActorSelection.scala index e329af556b..3aeee6c1d1 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSelection.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSelection.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor @@ -70,4 +70,4 @@ trait ScalaActorSelection { this: ActorSelection ⇒ def !(msg: Any)(implicit sender: ActorRef = Actor.noSender) = tell(msg, sender) -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala index 45025f1887..ef253884da 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/Address.scala b/akka-actor/src/main/scala/akka/actor/Address.scala index f02dcfb567..72f0a0c38a 100644 --- a/akka-actor/src/main/scala/akka/actor/Address.scala +++ b/akka-actor/src/main/scala/akka/actor/Address.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor import java.net.URI @@ -147,4 +147,4 @@ object ActorPathExtractor extends PathUtils { } catch { case _: URISyntaxException ⇒ None } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/Deployer.scala b/akka-actor/src/main/scala/akka/actor/Deployer.scala index 8ed7dc754a..310032e06d 100644 --- a/akka-actor/src/main/scala/akka/actor/Deployer.scala +++ b/akka-actor/src/main/scala/akka/actor/Deployer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/DynamicAccess.scala b/akka-actor/src/main/scala/akka/actor/DynamicAccess.scala index af891bc483..9d865b7da9 100644 --- a/akka-actor/src/main/scala/akka/actor/DynamicAccess.scala +++ b/akka-actor/src/main/scala/akka/actor/DynamicAccess.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor @@ -101,4 +101,4 @@ class ReflectiveDynamicAccess(val classLoader: ClassLoader) extends DynamicAcces } recover { case i: InvocationTargetException if i.getTargetException ne null ⇒ throw i.getTargetException } } } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/Extension.scala b/akka-actor/src/main/scala/akka/actor/Extension.scala index 707c07982a..9b6f950d3f 100644 --- a/akka-actor/src/main/scala/akka/actor/Extension.scala +++ b/akka-actor/src/main/scala/akka/actor/Extension.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/FSM.scala b/akka-actor/src/main/scala/akka/actor/FSM.scala index 28151a4a47..ad0e0bf7f0 100644 --- a/akka-actor/src/main/scala/akka/actor/FSM.scala +++ b/akka-actor/src/main/scala/akka/actor/FSM.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/FaultHandling.scala b/akka-actor/src/main/scala/akka/actor/FaultHandling.scala index 7f65c84d02..b04ee4f06e 100644 --- a/akka-actor/src/main/scala/akka/actor/FaultHandling.scala +++ b/akka-actor/src/main/scala/akka/actor/FaultHandling.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/IO.scala b/akka-actor/src/main/scala/akka/actor/IO.scala index e1dedb3ba2..de598210b2 100644 --- a/akka-actor/src/main/scala/akka/actor/IO.scala +++ b/akka-actor/src/main/scala/akka/actor/IO.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/Props.scala b/akka-actor/src/main/scala/akka/actor/Props.scala index 30e28834dd..5608e7c8aa 100644 --- a/akka-actor/src/main/scala/akka/actor/Props.scala +++ b/akka-actor/src/main/scala/akka/actor/Props.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala index 02aef18564..300481ad06 100644 --- a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/Scheduler.scala b/akka-actor/src/main/scala/akka/actor/Scheduler.scala index bbb830110d..55e4be2065 100644 --- a/akka-actor/src/main/scala/akka/actor/Scheduler.scala +++ b/akka-actor/src/main/scala/akka/actor/Scheduler.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/Stash.scala b/akka-actor/src/main/scala/akka/actor/Stash.scala index cdf4ef6d5b..34c6192016 100644 --- a/akka-actor/src/main/scala/akka/actor/Stash.scala +++ b/akka-actor/src/main/scala/akka/actor/Stash.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/TypedActor.scala b/akka-actor/src/main/scala/akka/actor/TypedActor.scala index 7509cd758d..0bc8059ade 100644 --- a/akka-actor/src/main/scala/akka/actor/TypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/TypedActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/UntypedActor.scala b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala index 47ddf4fc43..163d9468bc 100644 --- a/akka-actor/src/main/scala/akka/actor/UntypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/UntypedActorWithStash.scala b/akka-actor/src/main/scala/akka/actor/UntypedActorWithStash.scala index 9b55e9397b..a41e03e8cf 100644 --- a/akka-actor/src/main/scala/akka/actor/UntypedActorWithStash.scala +++ b/akka-actor/src/main/scala/akka/actor/UntypedActorWithStash.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/dsl/Creators.scala b/akka-actor/src/main/scala/akka/actor/dsl/Creators.scala index a9515f3000..bcbcd52cbd 100644 --- a/akka-actor/src/main/scala/akka/actor/dsl/Creators.scala +++ b/akka-actor/src/main/scala/akka/actor/dsl/Creators.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dsl diff --git a/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala b/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala index 418a035e53..46a4f53af5 100644 --- a/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala +++ b/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dsl diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala b/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala index ba856206ea..f897535c91 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon @@ -197,4 +197,4 @@ private[akka] trait Children { this: ActorCell ⇒ } } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala b/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala index 1fccbf8078..13ab3b4c8d 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon @@ -210,4 +210,4 @@ private[akka] object ChildrenContainer { else c.mkString("children (" + toDie.size + " terminating):\n ", "\n ", "\n") + toDie } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala b/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala index 313796ad68..eb191ff415 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/DeathWatch.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon @@ -164,4 +164,4 @@ private[akka] trait DeathWatch { this: ActorCell ⇒ private def subscribeAddressTerminated(): Unit = system.eventStream.subscribe(self, classOf[AddressTerminated]) -} \ No newline at end of file +} 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 469aac78c2..1d3b498c2b 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon @@ -116,4 +116,4 @@ private[akka] trait Dispatch { this: ActorCell ⇒ system.eventStream.publish(Error(e, self.path.toString, clazz(actor), "swallowing exception during message send")) } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala index c2ff511809..99ddd825b1 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala b/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala index 5e1e4465eb..2f52f312fe 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.actor.dungeon @@ -46,4 +46,4 @@ private[akka] trait ReceiveTimeout { this: ActorCell ⇒ receiveTimeoutData = (receiveTimeoutData._1, emptyCancellable) } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/actor/package.scala b/akka-actor/src/main/scala/akka/actor/package.scala index deb9f0e7a9..b6e45e74f6 100644 --- a/akka-actor/src/main/scala/akka/actor/package.scala +++ b/akka-actor/src/main/scala/akka/actor/package.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka diff --git a/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala index f8fa5e1046..5d470746f4 100644 --- a/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/BalancingDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/BalancingDispatcher.scala index 6efb5771ef..2190130440 100644 --- a/akka-actor/src/main/scala/akka/dispatch/BalancingDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/BalancingDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/BatchingExecutor.scala b/akka-actor/src/main/scala/akka/dispatch/BatchingExecutor.scala index cde2034f64..87f7bc6770 100644 --- a/akka-actor/src/main/scala/akka/dispatch/BatchingExecutor.scala +++ b/akka-actor/src/main/scala/akka/dispatch/BatchingExecutor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala index 6577e217a1..b1f4557815 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala index 910a5ceed5..3758bd6df0 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/Future.scala b/akka-actor/src/main/scala/akka/dispatch/Future.scala index a7c964b750..10b4229ccb 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Future.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Future.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala index d17ad5b7b6..e47f869a3e 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala index 9cdff4b521..1b645a64ea 100644 --- a/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/PinnedDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala index 8fb4d6dc4f..cb60867bb1 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dispatch @@ -246,4 +246,4 @@ class SaneRejectedExecutionHandler extends RejectedExecutionHandler { if (threadPoolExecutor.isShutdown) throw new RejectedExecutionException("Shutdown") else runnable.run() } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/event/EventBus.scala b/akka-actor/src/main/scala/akka/event/EventBus.scala index 6e3e25e42c..2499d0fcd9 100644 --- a/akka-actor/src/main/scala/akka/event/EventBus.scala +++ b/akka-actor/src/main/scala/akka/event/EventBus.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event diff --git a/akka-actor/src/main/scala/akka/event/EventStream.scala b/akka-actor/src/main/scala/akka/event/EventStream.scala index 7fa6c8a5cf..c37ea4c925 100644 --- a/akka-actor/src/main/scala/akka/event/EventStream.scala +++ b/akka-actor/src/main/scala/akka/event/EventStream.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event @@ -59,4 +59,4 @@ class EventStream(private val debug: Boolean = false) extends LoggingBus with Su if (debug) publish(Logging.Debug(simpleName(this), this.getClass, "unsubscribing " + subscriber + " from all channels")) } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/event/Logging.scala b/akka-actor/src/main/scala/akka/event/Logging.scala index 14ba99bcaa..f054d787d1 100644 --- a/akka-actor/src/main/scala/akka/event/Logging.scala +++ b/akka-actor/src/main/scala/akka/event/Logging.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event diff --git a/akka-actor/src/main/scala/akka/event/LoggingReceive.scala b/akka-actor/src/main/scala/akka/event/LoggingReceive.scala index 03739de894..07546e30cc 100644 --- a/akka-actor/src/main/scala/akka/event/LoggingReceive.scala +++ b/akka-actor/src/main/scala/akka/event/LoggingReceive.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.event @@ -44,4 +44,4 @@ class LoggingReceive(source: Option[AnyRef], r: Receive)(implicit context: Actor handled } def apply(o: Any): Unit = r(o) -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/japi/JavaAPI.scala b/akka-actor/src/main/scala/akka/japi/JavaAPI.scala index 87bb338b0f..b37cee26fe 100644 --- a/akka-actor/src/main/scala/akka/japi/JavaAPI.scala +++ b/akka-actor/src/main/scala/akka/japi/JavaAPI.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.japi diff --git a/akka-actor/src/main/scala/akka/pattern/AskSupport.scala b/akka-actor/src/main/scala/akka/pattern/AskSupport.scala index eef089a85c..18f88ba30e 100644 --- a/akka-actor/src/main/scala/akka/pattern/AskSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/AskSupport.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern @@ -255,4 +255,4 @@ private[akka] object PromiseActorRef { result.future onComplete { _ ⇒ try a.stop() finally f.cancel() } a } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala b/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala index 8a423c12b3..aa578baf38 100644 --- a/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala +++ b/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern diff --git a/akka-actor/src/main/scala/akka/pattern/FutureTimeoutSupport.scala b/akka-actor/src/main/scala/akka/pattern/FutureTimeoutSupport.scala index 6820cf4bfa..7408f18355 100644 --- a/akka-actor/src/main/scala/akka/pattern/FutureTimeoutSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/FutureTimeoutSupport.scala @@ -1,7 +1,7 @@ package akka.pattern /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ import scala.concurrent.duration.Duration @@ -23,4 +23,4 @@ trait FutureTimeoutSupport { using.scheduleOnce(duration) { p completeWith { try value catch { case NonFatal(t) ⇒ Future.failed(t) } } } p.future } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/pattern/GracefulStopSupport.scala b/akka-actor/src/main/scala/akka/pattern/GracefulStopSupport.scala index 9279707238..521175fe60 100644 --- a/akka-actor/src/main/scala/akka/pattern/GracefulStopSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/GracefulStopSupport.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern @@ -58,4 +58,4 @@ trait GracefulStopSupport { case s ⇒ throw new IllegalArgumentException("Unknown ActorSystem implementation: '" + s + "'") } } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/pattern/Patterns.scala b/akka-actor/src/main/scala/akka/pattern/Patterns.scala index 66e391c285..484181a71e 100644 --- a/akka-actor/src/main/scala/akka/pattern/Patterns.scala +++ b/akka-actor/src/main/scala/akka/pattern/Patterns.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern diff --git a/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala b/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala index c0c3780319..49a019f03f 100644 --- a/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.pattern @@ -41,4 +41,4 @@ trait PipeToSupport { * }}} */ implicit def pipe[T](future: Future[T])(implicit executionContext: ExecutionContext): PipeableFuture[T] = new PipeableFuture(future) -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/pattern/package.scala b/akka-actor/src/main/scala/akka/pattern/package.scala index b2f232de8f..f6dcbb9377 100644 --- a/akka-actor/src/main/scala/akka/pattern/package.scala +++ b/akka-actor/src/main/scala/akka/pattern/package.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka @@ -40,4 +40,4 @@ import akka.actor._ */ package object pattern extends PipeToSupport with AskSupport with GracefulStopSupport with FutureTimeoutSupport { -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/routing/ConsistentHash.scala b/akka-actor/src/main/scala/akka/routing/ConsistentHash.scala index 84100f0f21..c98fd7031c 100644 --- a/akka-actor/src/main/scala/akka/routing/ConsistentHash.scala +++ b/akka-actor/src/main/scala/akka/routing/ConsistentHash.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala b/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala index e88195f577..a7a5c43e2e 100644 --- a/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala +++ b/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing @@ -312,4 +312,4 @@ private[akka] case class ConsistentActorRef(actorRef: ActorRef, selfAddress: Add case a ⇒ actorRef.path.toString } } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/routing/Listeners.scala b/akka-actor/src/main/scala/akka/routing/Listeners.scala index 346f994a2f..dede8940fe 100644 --- a/akka-actor/src/main/scala/akka/routing/Listeners.scala +++ b/akka-actor/src/main/scala/akka/routing/Listeners.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/routing/Routing.scala b/akka-actor/src/main/scala/akka/routing/Routing.scala index 8c2c81bac2..ee98de0f10 100644 --- a/akka-actor/src/main/scala/akka/routing/Routing.scala +++ b/akka-actor/src/main/scala/akka/routing/Routing.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/routing/package.scala b/akka-actor/src/main/scala/akka/routing/package.scala index 76dc2f3104..22074f7f10 100644 --- a/akka-actor/src/main/scala/akka/routing/package.scala +++ b/akka-actor/src/main/scala/akka/routing/package.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka diff --git a/akka-actor/src/main/scala/akka/serialization/Serialization.scala b/akka-actor/src/main/scala/akka/serialization/Serialization.scala index e0e52e8189..ef21355502 100644 --- a/akka-actor/src/main/scala/akka/serialization/Serialization.scala +++ b/akka-actor/src/main/scala/akka/serialization/Serialization.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.serialization diff --git a/akka-actor/src/main/scala/akka/serialization/SerializationExtension.scala b/akka-actor/src/main/scala/akka/serialization/SerializationExtension.scala index f96aa26e0c..d2b3844750 100644 --- a/akka-actor/src/main/scala/akka/serialization/SerializationExtension.scala +++ b/akka-actor/src/main/scala/akka/serialization/SerializationExtension.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.serialization @@ -13,4 +13,4 @@ object SerializationExtension extends ExtensionId[Serialization] with ExtensionI override def get(system: ActorSystem): Serialization = super.get(system) override def lookup = SerializationExtension override def createExtension(system: ExtendedActorSystem): Serialization = new Serialization(system) -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/serialization/Serializer.scala b/akka-actor/src/main/scala/akka/serialization/Serializer.scala index bdf8adbf85..736a4a6175 100644 --- a/akka-actor/src/main/scala/akka/serialization/Serializer.scala +++ b/akka-actor/src/main/scala/akka/serialization/Serializer.scala @@ -1,7 +1,7 @@ package akka.serialization /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ import java.io.{ ObjectOutputStream, ByteArrayOutputStream, ObjectInputStream, ByteArrayInputStream } diff --git a/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala b/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala index 613599fa8e..fbcb1b315e 100644 --- a/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala +++ b/akka-actor/src/main/scala/akka/util/BoundedBlockingQueue.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/BoxedType.scala b/akka-actor/src/main/scala/akka/util/BoxedType.scala index f5f95096d9..29cbc79d01 100644 --- a/akka-actor/src/main/scala/akka/util/BoxedType.scala +++ b/akka-actor/src/main/scala/akka/util/BoxedType.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/ByteIterator.scala b/akka-actor/src/main/scala/akka/util/ByteIterator.scala index ef4c0c49bc..49292bb877 100644 --- a/akka-actor/src/main/scala/akka/util/ByteIterator.scala +++ b/akka-actor/src/main/scala/akka/util/ByteIterator.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/ByteString.scala b/akka-actor/src/main/scala/akka/util/ByteString.scala index 70f929c11a..b694528541 100644 --- a/akka-actor/src/main/scala/akka/util/ByteString.scala +++ b/akka-actor/src/main/scala/akka/util/ByteString.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/ClassLoaderObjectInputStream.scala b/akka-actor/src/main/scala/akka/util/ClassLoaderObjectInputStream.scala index ab2514861e..bc71e54006 100644 --- a/akka-actor/src/main/scala/akka/util/ClassLoaderObjectInputStream.scala +++ b/akka-actor/src/main/scala/akka/util/ClassLoaderObjectInputStream.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Collections.scala b/akka-actor/src/main/scala/akka/util/Collections.scala index 0ccbcd408c..f7a6368f45 100644 --- a/akka-actor/src/main/scala/akka/util/Collections.scala +++ b/akka-actor/src/main/scala/akka/util/Collections.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util @@ -51,4 +51,4 @@ private[akka] object Collections { override def foreach[C](f: To ⇒ C) = iterator foreach f } -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/util/Crypt.scala b/akka-actor/src/main/scala/akka/util/Crypt.scala index 280cd90768..86b98a2cfd 100644 --- a/akka-actor/src/main/scala/akka/util/Crypt.scala +++ b/akka-actor/src/main/scala/akka/util/Crypt.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/HashCode.scala b/akka-actor/src/main/scala/akka/util/HashCode.scala index 9e19c5e7c6..486434f577 100644 --- a/akka-actor/src/main/scala/akka/util/HashCode.scala +++ b/akka-actor/src/main/scala/akka/util/HashCode.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Helpers.scala b/akka-actor/src/main/scala/akka/util/Helpers.scala index 430d4582ae..d071829148 100644 --- a/akka-actor/src/main/scala/akka/util/Helpers.scala +++ b/akka-actor/src/main/scala/akka/util/Helpers.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Index.scala b/akka-actor/src/main/scala/akka/util/Index.scala index 83d8a40885..5022db9865 100644 --- a/akka-actor/src/main/scala/akka/util/Index.scala +++ b/akka-actor/src/main/scala/akka/util/Index.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/LockUtil.scala b/akka-actor/src/main/scala/akka/util/LockUtil.scala index 8279fcc7df..4647e2e9b2 100644 --- a/akka-actor/src/main/scala/akka/util/LockUtil.scala +++ b/akka-actor/src/main/scala/akka/util/LockUtil.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Reflect.scala b/akka-actor/src/main/scala/akka/util/Reflect.scala index f62ea5fb8c..5761fe5dd3 100644 --- a/akka-actor/src/main/scala/akka/util/Reflect.scala +++ b/akka-actor/src/main/scala/akka/util/Reflect.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util import scala.util.control.NonFatal @@ -50,4 +50,4 @@ private[akka] object Reflect { * @return a function which when applied will create a new instance from the default constructor of the given class */ private[akka] def instantiator[T](clazz: Class[T]): () ⇒ T = () ⇒ instantiate(clazz) -} \ No newline at end of file +} diff --git a/akka-actor/src/main/scala/akka/util/SubclassifiedIndex.scala b/akka-actor/src/main/scala/akka/util/SubclassifiedIndex.scala index 236f645864..206082c464 100644 --- a/akka-actor/src/main/scala/akka/util/SubclassifiedIndex.scala +++ b/akka-actor/src/main/scala/akka/util/SubclassifiedIndex.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Timeout.scala b/akka-actor/src/main/scala/akka/util/Timeout.scala index 7062eabd35..4e758a6373 100644 --- a/akka-actor/src/main/scala/akka/util/Timeout.scala +++ b/akka-actor/src/main/scala/akka/util/Timeout.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Unsafe.java b/akka-actor/src/main/scala/akka/util/Unsafe.java index 005d1b3441..b43e1704ca 100644 --- a/akka-actor/src/main/scala/akka/util/Unsafe.java +++ b/akka-actor/src/main/scala/akka/util/Unsafe.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ diff --git a/akka-actor/src/main/scala/akka/util/WildcardTree.scala b/akka-actor/src/main/scala/akka/util/WildcardTree.scala index 519e1a73e5..76c5b2124c 100644 --- a/akka-actor/src/main/scala/akka/util/WildcardTree.scala +++ b/akka-actor/src/main/scala/akka/util/WildcardTree.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.util diff --git a/akka-agent/src/main/scala/akka/agent/Agent.scala b/akka-agent/src/main/scala/akka/agent/Agent.scala index 215de37c28..a19d01c338 100644 --- a/akka-agent/src/main/scala/akka/agent/Agent.scala +++ b/akka-agent/src/main/scala/akka/agent/Agent.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.agent diff --git a/akka-camel/src/main/scala/akka/camel/Activation.scala b/akka-camel/src/main/scala/akka/camel/Activation.scala index b035cbd267..983dba0b2d 100644 --- a/akka-camel/src/main/scala/akka/camel/Activation.scala +++ b/akka-camel/src/main/scala/akka/camel/Activation.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/main/scala/akka/camel/ActorRouteDefinition.scala b/akka-camel/src/main/scala/akka/camel/ActorRouteDefinition.scala index e8b1be8550..c75d45933a 100644 --- a/akka-camel/src/main/scala/akka/camel/ActorRouteDefinition.scala +++ b/akka-camel/src/main/scala/akka/camel/ActorRouteDefinition.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/main/scala/akka/camel/Camel.scala b/akka-camel/src/main/scala/akka/camel/Camel.scala index c72193becb..1273f525f1 100644 --- a/akka-camel/src/main/scala/akka/camel/Camel.scala +++ b/akka-camel/src/main/scala/akka/camel/Camel.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/main/scala/akka/camel/CamelMessage.scala b/akka-camel/src/main/scala/akka/camel/CamelMessage.scala index c9dc32e597..f6b5073534 100644 --- a/akka-camel/src/main/scala/akka/camel/CamelMessage.scala +++ b/akka-camel/src/main/scala/akka/camel/CamelMessage.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/main/scala/akka/camel/Consumer.scala b/akka-camel/src/main/scala/akka/camel/Consumer.scala index 19ddc85b59..dfbe3ac840 100644 --- a/akka-camel/src/main/scala/akka/camel/Consumer.scala +++ b/akka-camel/src/main/scala/akka/camel/Consumer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index ca05f7a45d..64ab0f61f8 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/main/scala/akka/camel/internal/ActivationMessage.scala b/akka-camel/src/main/scala/akka/camel/internal/ActivationMessage.scala index 7b27dbc789..2208cad046 100644 --- a/akka-camel/src/main/scala/akka/camel/internal/ActivationMessage.scala +++ b/akka-camel/src/main/scala/akka/camel/internal/ActivationMessage.scala @@ -1,7 +1,7 @@ package akka.camel.internal /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ import akka.actor.ActorRef @@ -66,4 +66,4 @@ private[camel] object ActivationProtocol { */ @SerialVersionUID(1L) final case class EndpointFailedToDeActivate(actorRef: ActorRef, cause: Throwable) extends ActivationMessage(actorRef) -} \ No newline at end of file +} diff --git a/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala b/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala index 9beb6a8894..17ee254bd5 100644 --- a/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala +++ b/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.internal diff --git a/akka-camel/src/main/scala/akka/camel/internal/ConsumerActorRouteBuilder.scala b/akka-camel/src/main/scala/akka/camel/internal/ConsumerActorRouteBuilder.scala index a27c23ec2f..27f25af1ab 100644 --- a/akka-camel/src/main/scala/akka/camel/internal/ConsumerActorRouteBuilder.scala +++ b/akka-camel/src/main/scala/akka/camel/internal/ConsumerActorRouteBuilder.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.internal diff --git a/akka-camel/src/main/scala/akka/camel/internal/component/ActorComponent.scala b/akka-camel/src/main/scala/akka/camel/internal/component/ActorComponent.scala index 2585b970c9..a42ef51abc 100644 --- a/akka-camel/src/main/scala/akka/camel/internal/component/ActorComponent.scala +++ b/akka-camel/src/main/scala/akka/camel/internal/component/ActorComponent.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.internal.component diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedConsumerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedConsumerActor.scala index 77526dab08..7bfa26ce20 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedConsumerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedConsumerActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.javaapi diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index 7688df5130..aa7e7cb8df 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.javaapi diff --git a/akka-camel/src/main/scala/akka/package.scala b/akka-camel/src/main/scala/akka/package.scala index 9347580e76..c36d83322f 100644 --- a/akka-camel/src/main/scala/akka/package.scala +++ b/akka-camel/src/main/scala/akka/package.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka diff --git a/akka-camel/src/test/java/akka/camel/ConsumerJavaTestBase.java b/akka-camel/src/test/java/akka/camel/ConsumerJavaTestBase.java index d8aec8a761..0ed6f85520 100644 --- a/akka-camel/src/test/java/akka/camel/ConsumerJavaTestBase.java +++ b/akka-camel/src/test/java/akka/camel/ConsumerJavaTestBase.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel; diff --git a/akka-camel/src/test/java/akka/camel/MessageJavaTestBase.java b/akka-camel/src/test/java/akka/camel/MessageJavaTestBase.java index d805a8b2c1..3eeb8c4186 100644 --- a/akka-camel/src/test/java/akka/camel/MessageJavaTestBase.java +++ b/akka-camel/src/test/java/akka/camel/MessageJavaTestBase.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel; diff --git a/akka-camel/src/test/java/akka/camel/SampleErrorHandlingConsumer.java b/akka-camel/src/test/java/akka/camel/SampleErrorHandlingConsumer.java index 92fb124a11..4e6efdde5b 100644 --- a/akka-camel/src/test/java/akka/camel/SampleErrorHandlingConsumer.java +++ b/akka-camel/src/test/java/akka/camel/SampleErrorHandlingConsumer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel; diff --git a/akka-camel/src/test/java/akka/camel/SampleUntypedConsumer.java b/akka-camel/src/test/java/akka/camel/SampleUntypedConsumer.java index 030c951cc9..39e7759508 100644 --- a/akka-camel/src/test/java/akka/camel/SampleUntypedConsumer.java +++ b/akka-camel/src/test/java/akka/camel/SampleUntypedConsumer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel; diff --git a/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java b/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java index b99a7ecc31..83bf56affc 100644 --- a/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java +++ b/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel; diff --git a/akka-camel/src/test/java/akka/camel/SampleUntypedReplyingProducer.java b/akka-camel/src/test/java/akka/camel/SampleUntypedReplyingProducer.java index c47187d1da..adfabe3097 100644 --- a/akka-camel/src/test/java/akka/camel/SampleUntypedReplyingProducer.java +++ b/akka-camel/src/test/java/akka/camel/SampleUntypedReplyingProducer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel; diff --git a/akka-camel/src/test/scala/akka/camel/ActivationIntegrationTest.scala b/akka-camel/src/test/scala/akka/camel/ActivationIntegrationTest.scala index a945e3a63e..a8edab40ce 100644 --- a/akka-camel/src/test/scala/akka/camel/ActivationIntegrationTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ActivationIntegrationTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel @@ -79,4 +79,4 @@ class ActivationIntegrationTest extends WordSpec with MustMatchers with SharedCa } } -} \ No newline at end of file +} diff --git a/akka-camel/src/test/scala/akka/camel/CamelConfigSpec.scala b/akka-camel/src/test/scala/akka/camel/CamelConfigSpec.scala index ca7b4ba3cc..7de26bb1cd 100644 --- a/akka-camel/src/test/scala/akka/camel/CamelConfigSpec.scala +++ b/akka-camel/src/test/scala/akka/camel/CamelConfigSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/CamelExchangeAdapterTest.scala b/akka-camel/src/test/scala/akka/camel/CamelExchangeAdapterTest.scala index 29863b146a..0fc1cd7f38 100644 --- a/akka-camel/src/test/scala/akka/camel/CamelExchangeAdapterTest.scala +++ b/akka-camel/src/test/scala/akka/camel/CamelExchangeAdapterTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/CamelMessageTest.scala b/akka-camel/src/test/scala/akka/camel/CamelMessageTest.scala index 0fd0a73fb6..d2ac74324e 100644 --- a/akka-camel/src/test/scala/akka/camel/CamelMessageTest.scala +++ b/akka-camel/src/test/scala/akka/camel/CamelMessageTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala b/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala index ff5524ad6c..9e51164819 100644 --- a/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/ConsumerIntegrationTest.scala b/akka-camel/src/test/scala/akka/camel/ConsumerIntegrationTest.scala index 6462e0b191..e903d2ce19 100644 --- a/akka-camel/src/test/scala/akka/camel/ConsumerIntegrationTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ConsumerIntegrationTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/ConsumerJavaTest.scala b/akka-camel/src/test/scala/akka/camel/ConsumerJavaTest.scala index 5685db2cea..e0685bdf06 100644 --- a/akka-camel/src/test/scala/akka/camel/ConsumerJavaTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ConsumerJavaTest.scala @@ -1,9 +1,9 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel import org.scalatest.junit.JUnitSuite -class ConsumerJavaTest extends ConsumerJavaTestBase with JUnitSuite \ No newline at end of file +class ConsumerJavaTest extends ConsumerJavaTestBase with JUnitSuite diff --git a/akka-camel/src/test/scala/akka/camel/MessageJavaTest.scala b/akka-camel/src/test/scala/akka/camel/MessageJavaTest.scala index 9d56642b9f..eb8ba6e194 100644 --- a/akka-camel/src/test/scala/akka/camel/MessageJavaTest.scala +++ b/akka-camel/src/test/scala/akka/camel/MessageJavaTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/MessageScalaTest.scala b/akka-camel/src/test/scala/akka/camel/MessageScalaTest.scala index cbf0190e91..9e2a901ec5 100644 --- a/akka-camel/src/test/scala/akka/camel/MessageScalaTest.scala +++ b/akka-camel/src/test/scala/akka/camel/MessageScalaTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala index 58cd0713d6..8463c185ae 100644 --- a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/TestSupport.scala b/akka-camel/src/test/scala/akka/camel/TestSupport.scala index 4ff7155666..0102d06f9f 100644 --- a/akka-camel/src/test/scala/akka/camel/TestSupport.scala +++ b/akka-camel/src/test/scala/akka/camel/TestSupport.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/UntypedProducerTest.scala b/akka-camel/src/test/scala/akka/camel/UntypedProducerTest.scala index e89a568b42..7964d78b71 100644 --- a/akka-camel/src/test/scala/akka/camel/UntypedProducerTest.scala +++ b/akka-camel/src/test/scala/akka/camel/UntypedProducerTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel diff --git a/akka-camel/src/test/scala/akka/camel/internal/component/ActorComponentConfigurationTest.scala b/akka-camel/src/test/scala/akka/camel/internal/component/ActorComponentConfigurationTest.scala index 1be5295225..3f5a8f33cf 100644 --- a/akka-camel/src/test/scala/akka/camel/internal/component/ActorComponentConfigurationTest.scala +++ b/akka-camel/src/test/scala/akka/camel/internal/component/ActorComponentConfigurationTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.internal.component @@ -26,4 +26,4 @@ class ActorComponentConfigurationTest extends WordSpec with MustMatchers with Sh 'replyTimeout(987000000 nanos)) } -} \ No newline at end of file +} diff --git a/akka-camel/src/test/scala/akka/camel/internal/component/ActorProducerTest.scala b/akka-camel/src/test/scala/akka/camel/internal/component/ActorProducerTest.scala index 57d4ee02c6..35dfb53b18 100644 --- a/akka-camel/src/test/scala/akka/camel/internal/component/ActorProducerTest.scala +++ b/akka-camel/src/test/scala/akka/camel/internal/component/ActorProducerTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.internal.component diff --git a/akka-camel/src/test/scala/akka/camel/internal/component/DurationConverterTest.scala b/akka-camel/src/test/scala/akka/camel/internal/component/DurationConverterTest.scala index 06c5d5aa5e..83bf137af3 100644 --- a/akka-camel/src/test/scala/akka/camel/internal/component/DurationConverterTest.scala +++ b/akka-camel/src/test/scala/akka/camel/internal/component/DurationConverterTest.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.camel.internal.component diff --git a/akka-cluster/src/main/scala/akka/cluster/AccrualFailureDetector.scala b/akka-cluster/src/main/scala/akka/cluster/AccrualFailureDetector.scala index feb950a9a8..6e812ab6cc 100644 --- a/akka-cluster/src/main/scala/akka/cluster/AccrualFailureDetector.scala +++ b/akka-cluster/src/main/scala/akka/cluster/AccrualFailureDetector.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala index 54d3e6bfa3..6da8af20e5 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala index 5adb57615a..f2e3b9e3be 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala index 50644e431c..e6ed4922b7 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala index 7d1997649d..f7d07cebfa 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala index 94e4e9b9f9..a5d230019f 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala index ec0c38a944..2e735b89d1 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterJmx.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala index 2a7951a667..8f08180b1c 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterReadView.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterReadView.scala index 831d72f9c8..ce57413287 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterReadView.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterReadView.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala index 5b5c26ae33..0477bbd002 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/FailureDetector.scala b/akka-cluster/src/main/scala/akka/cluster/FailureDetector.scala index 1aa926c5e5..9ef77c6834 100644 --- a/akka-cluster/src/main/scala/akka/cluster/FailureDetector.scala +++ b/akka-cluster/src/main/scala/akka/cluster/FailureDetector.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/Gossip.scala b/akka-cluster/src/main/scala/akka/cluster/Gossip.scala index 1f96434995..0a48dba08d 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Gossip.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Gossip.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/Member.scala b/akka-cluster/src/main/scala/akka/cluster/Member.scala index 1ee4aae804..1b4cf54dfc 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Member.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Member.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster @@ -126,4 +126,4 @@ object MemberStatus { * JAVA API */ def removed: MemberStatus = Removed -} \ No newline at end of file +} diff --git a/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala b/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala index baef66f26c..45fa26aa5c 100644 --- a/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala +++ b/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancingRouter.scala b/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancingRouter.scala index 60a9c5b6a7..ab86177275 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancingRouter.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancingRouter.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing @@ -431,4 +431,4 @@ private[cluster] class WeightedRoutees(refs: immutable.IndexedSeq[ActorRef], sel else j } } -} \ No newline at end of file +} diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala index 59c88c9fee..4b6c3b5c30 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala index a10e941c3f..79f5a72c4b 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala index a8c8bdb736..92622dd13a 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterAccrualFailureDetectorSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterAccrualFailureDetectorSpec.scala index 552f90bd49..3ef3beddcc 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterAccrualFailureDetectorSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterAccrualFailureDetectorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterDeathWatchSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterDeathWatchSpec.scala index d711aec55f..aca2ea196d 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterDeathWatchSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterDeathWatchSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsDisabledSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsDisabledSpec.scala index 0352a2c084..0bfc0a5975 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsDisabledSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsDisabledSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsSpec.scala index 6712502312..dc16f8dfe7 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClusterMetricsSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster @@ -55,4 +55,4 @@ abstract class ClusterMetricsSpec extends MultiNodeSpec(ClusterMetricsMultiJvmSp enterBarrier("finished") } } -} \ No newline at end of file +} diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala index ae5dea869e..763d2623c2 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinInProgressSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinInProgressSpec.scala index f59db3f21e..ed0a667a8b 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinInProgressSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinInProgressSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinSeedNodeSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinSeedNodeSpec.scala index 464b627944..577ea213ec 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinSeedNodeSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinSeedNodeSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinTwoClustersSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinTwoClustersSpec.scala index efa9e3f25d..46ec2780b8 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinTwoClustersSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/JoinTwoClustersSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala index 6a917be56e..1203ac2740 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala index dfe1553369..655f86ab3b 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala index acaf909d57..bcd8b48c61 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala index 5d55afb00f..15bd8d75e4 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MBeanSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala index b36ffccf7c..6b3bac9341 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerJoinSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerJoinSpec.scala index effff75438..381780c810 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerJoinSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerJoinSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala index 835c3d722e..281ef451c1 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerUpSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerUpSpec.scala index f4faf4234b..2fbdc298df 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerUpSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerUpSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MinMembersBeforeUpSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MinMembersBeforeUpSpec.scala index 46891bbc49..4cad603747 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MinMembersBeforeUpSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MinMembersBeforeUpSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala index 9d7447e6c9..08f6d96937 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingAndBeingRemovedSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingAndBeingRemovedSpec.scala index 2dfddc330f..f6d132df42 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingAndBeingRemovedSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingAndBeingRemovedSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala index e1051e4161..d38cc06e1f 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeMembershipSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeMembershipSpec.scala index 336acc2769..da11b5b7d0 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeMembershipSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeMembershipSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeUpSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeUpSpec.scala index 0a82b74563..43ca4fae3e 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeUpSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeUpSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala index d1e7098f9b..5910f48ac3 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala index 0633969319..a8ca35684d 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala index 707e96610f..bceb723031 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SunnyWeatherSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SunnyWeatherSpec.scala index 581eca3978..2f0325c51a 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SunnyWeatherSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SunnyWeatherSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/TransitionSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/TransitionSpec.scala index 4c9054d3d1..c7c6bf685e 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/TransitionSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/TransitionSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala index a33ca8146e..afe20e1614 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/UnreachableNodeRejoinsClusterSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala index 723ef6b8ec..c98413c21a 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingRouterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingRouterSpec.scala index daf4e81038..7f6cdba39a 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingRouterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingRouterSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala index 8a6ac1935f..0caf029de2 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinRoutedActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing diff --git a/akka-cluster/src/test/scala/akka/cluster/AccrualFailureDetectorSpec.scala b/akka-cluster/src/test/scala/akka/cluster/AccrualFailureDetectorSpec.scala index 9af8eacc7e..ee140dec1a 100644 --- a/akka-cluster/src/test/scala/akka/cluster/AccrualFailureDetectorSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/AccrualFailureDetectorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala index ce7f7a4a70..ec2b113a85 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterDeployerSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterDeployerSpec.scala index 6432b991ab..0bd481ac31 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterDeployerSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterDeployerSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster @@ -73,4 +73,4 @@ class ClusterDeployerSpec extends AkkaSpec(ClusterDeployerSpec.deployerConf) { } -} \ No newline at end of file +} diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala index 6c13c79f23..23e11b0b03 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventPublisherSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventSpec.scala index 284f6676f0..590f0b7a76 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterDomainEventSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterHeartbeatSenderStateSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterHeartbeatSenderStateSpec.scala index b9e6df49dc..82ad7c2cf2 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterHeartbeatSenderStateSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterHeartbeatSenderStateSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala index 008c98d4b7..7d766bf17e 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/EWMASpec.scala b/akka-cluster/src/test/scala/akka/cluster/EWMASpec.scala index ed954b7bb6..519c07bc20 100644 --- a/akka-cluster/src/test/scala/akka/cluster/EWMASpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/EWMASpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/FailureDetectorPuppet.scala b/akka-cluster/src/test/scala/akka/cluster/FailureDetectorPuppet.scala index 869df97f84..58fbd220fc 100644 --- a/akka-cluster/src/test/scala/akka/cluster/FailureDetectorPuppet.scala +++ b/akka-cluster/src/test/scala/akka/cluster/FailureDetectorPuppet.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala b/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala index 704b12dac0..9c0007c984 100644 --- a/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/MemberOrderingSpec.scala b/akka-cluster/src/test/scala/akka/cluster/MemberOrderingSpec.scala index 6f93f9827a..a9ae44e160 100644 --- a/akka-cluster/src/test/scala/akka/cluster/MemberOrderingSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/MemberOrderingSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/MetricNumericConverterSpec.scala b/akka-cluster/src/test/scala/akka/cluster/MetricNumericConverterSpec.scala index f572b13233..20ad0e62bd 100644 --- a/akka-cluster/src/test/scala/akka/cluster/MetricNumericConverterSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/MetricNumericConverterSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster @@ -46,4 +46,4 @@ class MetricNumericConverterSpec extends WordSpec with MustMatchers with MetricN defined(Double.NaN) must be(false) } } -} \ No newline at end of file +} diff --git a/akka-cluster/src/test/scala/akka/cluster/MetricValuesSpec.scala b/akka-cluster/src/test/scala/akka/cluster/MetricValuesSpec.scala index 2b3b23e8c5..1fdf0ff60b 100644 --- a/akka-cluster/src/test/scala/akka/cluster/MetricValuesSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/MetricValuesSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster @@ -63,4 +63,4 @@ class MetricValuesSpec extends AkkaSpec(MetricsEnabledSpec.config) with MetricsC } } -} \ No newline at end of file +} diff --git a/akka-cluster/src/test/scala/akka/cluster/MetricsCollectorSpec.scala b/akka-cluster/src/test/scala/akka/cluster/MetricsCollectorSpec.scala index 2ce3892645..b92ec1eb71 100644 --- a/akka-cluster/src/test/scala/akka/cluster/MetricsCollectorSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/MetricsCollectorSpec.scala @@ -1,6 +1,6 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/MetricsGossipSpec.scala b/akka-cluster/src/test/scala/akka/cluster/MetricsGossipSpec.scala index c6b8d64eb1..9c54703409 100644 --- a/akka-cluster/src/test/scala/akka/cluster/MetricsGossipSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/MetricsGossipSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/NodeMetricsSpec.scala b/akka-cluster/src/test/scala/akka/cluster/NodeMetricsSpec.scala index 8ddd0af7ce..8ab39e78aa 100644 --- a/akka-cluster/src/test/scala/akka/cluster/NodeMetricsSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/NodeMetricsSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/VectorClockSpec.scala b/akka-cluster/src/test/scala/akka/cluster/VectorClockSpec.scala index 19ad9410c4..fad1665e5f 100644 --- a/akka-cluster/src/test/scala/akka/cluster/VectorClockSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/VectorClockSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster diff --git a/akka-cluster/src/test/scala/akka/cluster/routing/MetricsSelectorSpec.scala b/akka-cluster/src/test/scala/akka/cluster/routing/MetricsSelectorSpec.scala index 659f1a7cf6..605cf0253b 100644 --- a/akka-cluster/src/test/scala/akka/cluster/routing/MetricsSelectorSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/routing/MetricsSelectorSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing diff --git a/akka-cluster/src/test/scala/akka/cluster/routing/WeightedRouteesSpec.scala b/akka-cluster/src/test/scala/akka/cluster/routing/WeightedRouteesSpec.scala index 76a00fa6ae..95e5bd0d54 100644 --- a/akka-cluster/src/test/scala/akka/cluster/routing/WeightedRouteesSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/routing/WeightedRouteesSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.cluster.routing diff --git a/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala b/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala index 9d4b9ecd7b..b3e24e2361 100644 --- a/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala +++ b/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.pattern diff --git a/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala b/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala index de614619f7..0841130f34 100644 --- a/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala +++ b/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.throttle @@ -293,4 +293,4 @@ class TimerBasedThrottler(var rate: Rate) extends Actor with Throttler with FSM[ data.copy(queue = queue.drop(nrOfMsgToSend), callsLeftInThisPeriod = data.callsLeftInThisPeriod - nrOfMsgToSend) } -} \ No newline at end of file +} diff --git a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala index cd2d2b6157..934d437ed7 100644 --- a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala +++ b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.pattern diff --git a/akka-contrib/src/test/java/akka/contrib/pattern/ReliableProxyTest.java b/akka-contrib/src/test/java/akka/contrib/pattern/ReliableProxyTest.java index 4ae2c20b1f..8a293bc201 100644 --- a/akka-contrib/src/test/java/akka/contrib/pattern/ReliableProxyTest.java +++ b/akka-contrib/src/test/java/akka/contrib/pattern/ReliableProxyTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.pattern; diff --git a/akka-contrib/src/test/scala/akka/contrib/pattern/ReliableProxyDocSpec.scala b/akka-contrib/src/test/scala/akka/contrib/pattern/ReliableProxyDocSpec.scala index 07c2d7af74..7e3809123b 100644 --- a/akka-contrib/src/test/scala/akka/contrib/pattern/ReliableProxyDocSpec.scala +++ b/akka-contrib/src/test/scala/akka/contrib/pattern/ReliableProxyDocSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.pattern diff --git a/akka-contrib/src/test/scala/akka/contrib/throttle/TimerBasedThrottlerSpec.scala b/akka-contrib/src/test/scala/akka/contrib/throttle/TimerBasedThrottlerSpec.scala index 7304df1448..b6963ff093 100644 --- a/akka-contrib/src/test/scala/akka/contrib/throttle/TimerBasedThrottlerSpec.scala +++ b/akka-contrib/src/test/scala/akka/contrib/throttle/TimerBasedThrottlerSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.throttle @@ -203,4 +203,4 @@ class TimerBasedThrottlerSpec extends TestKit(ActorSystem("TimerBasedThrottlerSp } } } -} \ No newline at end of file +} diff --git a/akka-dataflow/src/main/scala/akka/dataflow/package.scala b/akka-dataflow/src/main/scala/akka/dataflow/package.scala index 31248958d1..4537668f6b 100644 --- a/akka-dataflow/src/main/scala/akka/dataflow/package.scala +++ b/akka-dataflow/src/main/scala/akka/dataflow/package.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka @@ -99,4 +99,4 @@ package object dataflow { */ final def apply()(implicit ec: ExecutionContext): T @cps[Future[Any]] = shift(future flatMap (_: T ⇒ Future[Any])) } -} \ No newline at end of file +} diff --git a/akka-dataflow/src/test/scala/akka/dataflow/DataflowSpec.scala b/akka-dataflow/src/test/scala/akka/dataflow/DataflowSpec.scala index 0543b557c3..a9999b7083 100644 --- a/akka-dataflow/src/test/scala/akka/dataflow/DataflowSpec.scala +++ b/akka-dataflow/src/test/scala/akka/dataflow/DataflowSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2012 Typesafe Inc. + * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.dataflow diff --git a/akka-docs/_sphinx/themes/akka/layout.html b/akka-docs/_sphinx/themes/akka/layout.html index 1e0f13bdc2..d60fe7d599 100644 --- a/akka-docs/_sphinx/themes/akka/layout.html +++ b/akka-docs/_sphinx/themes/akka/layout.html @@ -141,7 +141,7 @@