From 9d2aaebe0b1d6270e26585ff5e542f7c26196494 Mon Sep 17 00:00:00 2001 From: Jonas Boner Date: Tue, 11 Aug 2009 12:16:50 +0200 Subject: [PATCH] implemented statistics recording with JMX and REST APIs (based on scala-stats) --- bin/start-akka-server.sh | 6 +- config/akka-reference.conf | 13 +- .../ActiveObjectGuiceConfiguratorTest.java | 2 +- kernel/pom.xml | 5 - kernel/src/main/scala/Kernel.scala | 26 +++- kernel/src/main/scala/actor/Actor.scala | 30 ++-- .../ActorComponentProviderFactory.scala | 5 +- kernel/src/main/scala/management/JMX.scala | 143 ++++++++++++++++++ .../main/scala/management/RestfulJMX.scala | 71 +++++++++ kernel/src/main/scala/nio/RemoteClient.scala | 32 +++- kernel/src/main/scala/nio/RemoteServer.scala | 90 ++++++++--- .../src/main/scala/reactor/Dispatchers.scala | 8 +- .../EventBasedSingleThreadDispatcher.scala | 17 ++- .../EventBasedThreadPoolDispatcher.scala | 36 +++-- .../scala/reactor/MessageDispatcherBase.scala | 29 +++- .../scala/reactor/ThreadBasedDispatcher.scala | 23 ++- ...EventBasedSingleThreadDispatcherTest.scala | 6 +- .../EventBasedThreadPoolDispatcherTest.scala | 6 +- kernel/src/test/scala/RemoteActorSpec.scala | 1 - .../scala/ThreadBasedDispatcherTest.scala | 4 +- lib/atmosphere-core-0.3.jar~HEAD | Bin 25729 -> 0 bytes lib/atmosphere-portable-runtime-0.3.jar~HEAD | Bin 87708 -> 0 bytes lib/cassidy-0.1.jar | Bin lib/jersey-client-1.1.1-ea.jar | Bin lib/jersey-core-1.1.1-ea.jar | Bin lib/jersey-server-1.1.1-ea.jar | Bin lib/scala-stats-1.0.jar | Bin 0 -> 48694 bytes .../src/main/scala/SimpleService.scala | 2 +- 28 files changed, 446 insertions(+), 109 deletions(-) create mode 100755 kernel/src/main/scala/management/JMX.scala create mode 100755 kernel/src/main/scala/management/RestfulJMX.scala delete mode 100644 lib/atmosphere-core-0.3.jar~HEAD delete mode 100644 lib/atmosphere-portable-runtime-0.3.jar~HEAD mode change 100755 => 100644 lib/cassidy-0.1.jar mode change 100755 => 100644 lib/jersey-client-1.1.1-ea.jar mode change 100755 => 100644 lib/jersey-core-1.1.1-ea.jar mode change 100755 => 100644 lib/jersey-server-1.1.1-ea.jar create mode 100644 lib/scala-stats-1.0.jar diff --git a/bin/start-akka-server.sh b/bin/start-akka-server.sh index 04814b7b11..6127220fe8 100755 --- a/bin/start-akka-server.sh +++ b/bin/start-akka-server.sh @@ -3,7 +3,6 @@ VERSION=0.5 BASE_DIR=$(dirname $0)/.. - echo 'Starting Akka Kernel from directory' $BASE_DIR echo 'Resetting persistent storage in' $BASE_DIR/storage @@ -20,7 +19,6 @@ LIB_DIR=$BASE_DIR/lib CLASSPATH=$BASE_DIR/config CLASSPATH=$CLASSPATH:$LIB_DIR/akka-kernel-0.5.jar CLASSPATH=$CLASSPATH:$LIB_DIR/akka-util-java-0.5.jar - CLASSPATH=$CLASSPATH:$LIB_DIR/antlr-3.1.3.jar CLASSPATH=$CLASSPATH:$LIB_DIR/aopalliance-1.0.jar CLASSPATH=$CLASSPATH:$LIB_DIR/asm-3.1.jar @@ -63,6 +61,7 @@ CLASSPATH=$CLASSPATH:$LIB_DIR/netty-3.1.0.CR1.jar CLASSPATH=$CLASSPATH:$LIB_DIR/providerutil.jar CLASSPATH=$CLASSPATH:$LIB_DIR/protobuf-java-2.1.0.jar CLASSPATH=$CLASSPATH:$LIB_DIR/scala-library-2.7.5.jar +CLASSPATH=$CLASSPATH:$LIB_DIR/scala-stats-1.0.jar CLASSPATH=$CLASSPATH:$LIB_DIR/servlet-api-2.5.jar CLASSPATH=$CLASSPATH:$LIB_DIR/slf4j-api-1.4.3.jar CLASSPATH=$CLASSPATH:$LIB_DIR/slf4j-log4j12-1.4.3.jar @@ -74,7 +73,7 @@ CLASSPATH=$CLASSPATH:$LIB_DIR/zookeeper-3.1.0.jar JVM_OPTS=" \ -server \ -Xms128M \ - -Xmx2G \ + -Xmx1G \ -XX:SurvivorRatio=8 \ -XX:TargetSurvivorRatio=90 \ -XX:+AggressiveOpts \ @@ -91,4 +90,5 @@ JVM_OPTS=" \ #$JAVA_HOME/bin/java $JVM_OPTS -cp $CLASSPATH se.scalablesolutions.akka.Boot se.scalablesolutions.akka.kernel.Kernel ${1} +echo $JAVA_HOME/bin/java $JVM_OPTS -cp $CLASSPATH se.scalablesolutions.akka.kernel.Kernel ${1} $JAVA_HOME/bin/java $JVM_OPTS -cp $CLASSPATH se.scalablesolutions.akka.kernel.Kernel ${1} diff --git a/config/akka-reference.conf b/config/akka-reference.conf index 3f672d1803..1cbd12cee6 100644 --- a/config/akka-reference.conf +++ b/config/akka-reference.conf @@ -1,6 +1,6 @@ -################################# -# Akka Actor Kernel Config File # -################################# +##################### +# Akka Config File # +################### # This file has all the default settings, so all these could be remove with no visible effect. # Modify as needed. @@ -19,11 +19,16 @@ boot = ["sample.java.Boot", "sample.scala.Boot"] # FQN to the class doing initial active object/actor # supervisor bootstrap, should be defined in default constructor + + service = on + record-stats = on + + timeout = 5000 # default timeout for future based invocations concurrent-mode = off # if turned on, then the same actor instance is allowed to execute concurrently - # e.g. departing from the actor model for better performance - serialize-messages = on # does a deep clone of (non-primitive) messages to ensure immutability + serialize-messages = on # does a deep clone of (non-primitive) messages to ensure immutability diff --git a/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java b/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java index d2cc9b7d0a..fdc2a48c98 100644 --- a/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java +++ b/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java @@ -21,7 +21,7 @@ public class ActiveObjectGuiceConfiguratorTest extends TestCase { protected void setUp() { se.scalablesolutions.akka.kernel.Kernel$.MODULE$.config(); - EventBasedThreadPoolDispatcher dispatcher = new EventBasedThreadPoolDispatcher(); + EventBasedThreadPoolDispatcher dispatcher = new EventBasedThreadPoolDispatcher("name"); dispatcher .withNewThreadPoolWithBoundedBlockingQueue(100) .setCorePoolSize(16) diff --git a/kernel/pom.xml b/kernel/pom.xml index dcc5bc9b67..5faf1864e4 100644 --- a/kernel/pom.xml +++ b/kernel/pom.xml @@ -125,11 +125,6 @@ commons-lang 2.4 - - se.foldleft - cassidy - 0.1 - diff --git a/kernel/src/main/scala/Kernel.scala b/kernel/src/main/scala/Kernel.scala index 6e3641208e..57bb697079 100644 --- a/kernel/src/main/scala/Kernel.scala +++ b/kernel/src/main/scala/Kernel.scala @@ -12,12 +12,13 @@ import javax.ws.rs.core.UriBuilder import java.io.File import java.net.URLClassLoader -import net.lag.configgy.{Config, Configgy, RuntimeEnvironment} +import net.lag.configgy.{Config, Configgy, RuntimeEnvironment, ParseException} import kernel.jersey.AkkaCometServlet import kernel.nio.RemoteServer import kernel.state.CassandraStorage import kernel.util.Logging +import kernel.management.Management /** * @author Jonas Bonér @@ -32,6 +33,7 @@ object Kernel extends Logging { val BOOT_CLASSES = config.getList("akka.boot") val RUN_REMOTE_SERVICE = config.getBool("akka.remote.service", true) + val RUN_MANAGEMENT_SERVICE = config.getBool("akka.management.service", true) val STORAGE_SYSTEM = config.getString("akka.storage.system", "cassandra") val RUN_REST_SERVICE = config.getBool("akka.rest.service", true) @@ -43,6 +45,7 @@ object Kernel extends Logging { private var remoteServer: RemoteServer = _ private var jerseySelectorThread: SelectorThread = _ private val startTime = System.currentTimeMillis + private var applicationLoader: Option[ClassLoader] = None def main(args: Array[String]) = boot @@ -51,11 +54,15 @@ object Kernel extends Logging { printBanner log.info("Starting Akka kernel...") + runApplicationBootClasses + if (RUN_REMOTE_SERVICE) startRemoteService + if (RUN_MANAGEMENT_SERVICE) startManagementService STORAGE_SYSTEM match { case "cassandra" => startCassandra case "terracotta" => throw new UnsupportedOperationException("terracotta storage backend is not yet supported") + case "mongodb" => throw new UnsupportedOperationException("mongodb storage backend is not yet supported") case "redis" => throw new UnsupportedOperationException("redis storage backend is not yet supported") case "voldemort" => throw new UnsupportedOperationException("voldemort storage backend is not yet supported") case "tokyo-cabinet" => throw new UnsupportedOperationException("tokyo-cabinet storage backend is not yet supported") @@ -64,8 +71,6 @@ object Kernel extends Logging { if (RUN_REST_SERVICE) startJersey - runApplicationBootClasses - log.info("Akka kernel started successfully") hasBooted = true } @@ -79,17 +84,18 @@ object Kernel extends Logging { val runtime = new RuntimeEnvironment(getClass) //runtime.load(args) val config = Configgy.config - config.registerWithJmx("com.scalablesolutions.akka.config") + config.registerWithJmx("se.scalablesolutions.akka") // FIXME fix Configgy JMX subscription to allow management // config.subscribe { c => configure(c.getOrElse(new Config)) } config } catch { - case e: net.lag.configgy.ParseException => throw new Error("Could not retreive the akka.conf config file. Make sure you have set the AKKA_HOME environment variable to the root of the distribution.") + case e: ParseException => throw new Error("Could not retreive the akka.conf config file. Make sure you have set the AKKA_HOME environment variable to the root of the distribution.") } } private[akka] def runApplicationBootClasses = { + new management.RestfulJMXBoot // add the REST/JMX service val HOME = try { System.getenv("AKKA_HOME") } catch { case e: NullPointerException => throw new IllegalStateException("AKKA_HOME system variable needs to be set. Should point to the root of the Akka distribution.") } //val CLASSES = HOME + "/kernel/target/classes" // FIXME remove for dist //val LIB = HOME + "/lib" @@ -105,16 +111,22 @@ object Kernel extends Logging { log.info("Booting with boot class [%s]", clazz) loader.loadClass(clazz).newInstance } + applicationLoader = Some(loader) } private[akka] def startRemoteService = { // FIXME manage remote serve thread for graceful shutdown val remoteServerThread = new Thread(new Runnable() { - def run = RemoteServer.start - }, "akka remote service") + def run = RemoteServer.start(applicationLoader) + }, "Akka Remote Service") remoteServerThread.start } + private[akka] def startManagementService = { + Management.startJMX("se.scalablesolutions.akka") + log.info("Management service started successfully.") + } + private[akka] def startCassandra = if (config.getBool("akka.storage.cassandra.service", true)) { System.setProperty("cassandra", "") System.setProperty("storage-config", akka.Boot.CONFIG + "/") diff --git a/kernel/src/main/scala/actor/Actor.scala b/kernel/src/main/scala/actor/Actor.scala index ea4145a4f3..fab6adf40d 100644 --- a/kernel/src/main/scala/actor/Actor.scala +++ b/kernel/src/main/scala/actor/Actor.scala @@ -8,14 +8,17 @@ import com.google.protobuf.ByteString import java.net.InetSocketAddress import java.util.concurrent.CopyOnWriteArraySet -import kernel.reactor._ -import kernel.config.ScalaConfig._ -import kernel.stm.TransactionManagement -import kernel.util.Helpers.ReadWriteLock -import kernel.nio.protobuf.RemoteProtocol.RemoteRequest -import kernel.util.Logging +import reactor._ +import config.ScalaConfig._ +import stm.TransactionManagement +import util.Helpers.ReadWriteLock +import nio.protobuf.RemoteProtocol.RemoteRequest +import util.Logging import serialization.{Serializer, Serializable, SerializationProtocol} import nio.{RemoteProtocolBuilder, RemoteClient, RemoteServer, RemoteRequestIdFactory} +import management.Management + +import com.twitter.service.Stats sealed abstract class LifecycleMessage case class Init(config: AnyRef) extends LifecycleMessage @@ -42,14 +45,16 @@ class ActorMessageInvoker(val actor: Actor) extends MessageInvoker { * @author Jonas Bonér */ object Actor { - val TIMEOUT = kernel.Kernel.config.getInt("akka.actor.timeout", 5000) - val SERIALIZE_MESSAGES = kernel.Kernel.config.getBool("akka.actor.serialize-messages", false) + val TIMEOUT = Kernel.config.getInt("akka.actor.timeout", 5000) + val SERIALIZE_MESSAGES = Kernel.config.getBool("akka.actor.serialize-messages", false) } /** * @author Jonas Bonér */ -@serializable trait Actor extends Logging with TransactionManagement { +trait Actor extends Logging with TransactionManagement { + Stats.getCounter("NrOfActors").incr + @volatile private[this] var isRunning: Boolean = false private[this] val remoteFlagLock = new ReadWriteLock private[this] val transactionalFlagLock = new ReadWriteLock @@ -64,6 +69,8 @@ object Actor { protected[this] val linkedActors = new CopyOnWriteArraySet[Actor] protected[actor] var lifeCycleConfig: Option[LifeCycle] = None + val name = this.getClass.getName + // ==================================== // ==== USER CALLBACKS TO OVERRIDE ==== // ==================================== @@ -96,7 +103,7 @@ object Actor { * */ protected[kernel] var dispatcher: MessageDispatcher = { - val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher + val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher(getClass.getName) mailbox = dispatcher.messageQueue dispatcher.registerHandler(this, new ActorMessageInvoker(this)) dispatcher @@ -529,6 +536,8 @@ object Actor { } private[this] def handleTrapExit(dead: Actor, reason: Throwable): Unit = { + if (Management.RECORD_STATS) Stats.getCounter("NrOfFailures_" + dead.name).incr + if (trapExit) { if (faultHandler.isDefined) { faultHandler.get match { @@ -546,6 +555,7 @@ object Actor { linkedActors.toArray.toList.asInstanceOf[List[Actor]].foreach(_.restart(reason)) private[Actor] def restart(reason: AnyRef) = synchronized { + if (Management.RECORD_STATS) Stats.getCounter("NrOfRestarts_" + name).incr lifeCycleConfig match { case None => throw new IllegalStateException("Server [" + id + "] does not have a life-cycle defined.") diff --git a/kernel/src/main/scala/jersey/ActorComponentProviderFactory.scala b/kernel/src/main/scala/jersey/ActorComponentProviderFactory.scala index 82d0f1e76b..8f9ca19bd2 100644 --- a/kernel/src/main/scala/jersey/ActorComponentProviderFactory.scala +++ b/kernel/src/main/scala/jersey/ActorComponentProviderFactory.scala @@ -19,7 +19,6 @@ extends IoCComponentProviderFactory with Logging { override def getComponentProvider(clazz: Class[_]): IoCComponentProvider = getComponentProvider(null, clazz) override def getComponentProvider(context: ComponentContext, clazz: Class[_]): IoCComponentProvider = { - //log.info("ProviderFactory: resolve => " + clazz.getName) - configurators.find(_.isDefined(clazz)).map(_ => new ActorComponentProvider(clazz, configurators)).getOrElse(null) + configurators.find(_.isDefined(clazz)).map(_ => new ActorComponentProvider(clazz, configurators)).getOrElse(null) } -} \ No newline at end of file +} diff --git a/kernel/src/main/scala/management/JMX.scala b/kernel/src/main/scala/management/JMX.scala new file mode 100755 index 0000000000..988a123668 --- /dev/null +++ b/kernel/src/main/scala/management/JMX.scala @@ -0,0 +1,143 @@ +/** + * Copyright (C) 2009 Scalable Solutions. + */ + +package se.scalablesolutions.akka.kernel.management + +import com.twitter.service.Stats + +import scala.collection.jcl + +import java.lang.management.ManagementFactory +import javax.{management => jmx} +import javax.management.remote.{JMXConnectorServerFactory, JMXServiceURL} + +import kernel.Kernel.config +import kernel.util.Logging + +/** + * @author Jonas Bonér + */ +object Management { + val RECORD_STATS = config.getBool("akka.management.record-stats", true) + + def startJMX(packageName: String): Unit = + startJMX(packageName, ManagementFactory.getPlatformMBeanServer) + + def startJMX(packageName: String, mbeanServer: jmx.MBeanServer): Unit = { + mbeanServer.registerMBean(new StatisticsMBean, new jmx.ObjectName(packageName + ":type=Stats")) + mbeanServer.registerMBean(new ManagementMBean, new jmx.ObjectName(packageName + ":type=Management")) + java.rmi.registry.LocateRegistry.createRegistry(1099) + JMXConnectorServerFactory.newJMXConnectorServer( + new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"), + null, + mbeanServer).start + } +} + +/** + * @author Jonas Bonér + */ +class StatisticsMBean extends jmx.DynamicMBean with Logging { + def getMBeanInfo = new jmx.MBeanInfo( + "se.scalablesolutions.akka.management.Stats", + "runtime statistics", + getAttributeInfo, + null, null, null, + new jmx.ImmutableDescriptor("immutableInfo=false")) + + def getAttribute(name: String): AnyRef = { + val segments = name.split("_", 2) + segments(0) match { + case "counter" => + Stats.getCounterStats()(segments(1)).asInstanceOf[java.lang.Long] + case "timing" => + val prefix = segments(1).split("_", 2) + val timing = Stats.getTimingStats(false)(prefix(1)) + val x = prefix(0) match { + case "min" => timing.minimum + case "max" => timing.maximum + case "count" => timing.count + case "average" => timing.average + } + x.asInstanceOf[java.lang.Integer] + case "gauge" => + Stats.getGaugeStats(false)(segments(1)).asInstanceOf[java.lang.Double] + } + } + + def getAttributes(names: Array[String]): jmx.AttributeList = { + val rv = new jmx.AttributeList + for (name <- names) rv.add(new jmx.Attribute(name, getAttribute(name))) + rv + } + + def invoke(actionName: String, params: Array[Object], signature: Array[String]): AnyRef = throw new UnsupportedOperationException + def setAttribute(attr: jmx.Attribute): Unit = throw new UnsupportedOperationException + def setAttributes(attrs: jmx.AttributeList): jmx.AttributeList = throw new UnsupportedOperationException + + private def getAttributeInfo: Array[jmx.MBeanAttributeInfo] = { + (Stats.getCounterStats.keys.map { name => + List(new jmx.MBeanAttributeInfo("counter_" + name, "java.lang.Long", "counter", true, false, false)) + } ++ Stats.getTimingStats(false).keys.map { name => + List("min", "max", "average", "count") map { prefix => + new jmx.MBeanAttributeInfo("timing_" + prefix + "_" + name, "java.lang.Integer", "timing", true, false, false) + } + } ++ Stats.getGaugeStats(false).keys.map { name => + List(new jmx.MBeanAttributeInfo("gauge_" + name, "java.lang.Long", "gauge", true, false, false)) + }).toList.flatten[jmx.MBeanAttributeInfo].toArray + } +} + +/** + * @author Jonas Bonér + */ +class ManagementMBean extends jmx.DynamicMBean with Logging { + val operations: Array[jmx.MBeanOperationInfo] = Array( + new jmx.MBeanOperationInfo("dosomething", "TODO", + Array( + new jmx.MBeanParameterInfo("key", "java.lang.String", "TODO"), + new jmx.MBeanParameterInfo("value", "java.lang.String", "TODO") + ), "void", jmx.MBeanOperationInfo.ACTION) + ) + + def getMBeanInfo = new jmx.MBeanInfo( + "se.scalablesolutions.akka.management.Management", + "runtime management", + Array[jmx.MBeanAttributeInfo](), + null, operations, null, + new jmx.ImmutableDescriptor("immutableInfo=false")) + + def getAttribute(name: String): AnyRef = throw new UnsupportedOperationException + + def getAttributes(names: Array[String]): jmx.AttributeList = throw new UnsupportedOperationException + + def invoke(actionName: String, params: Array[Object], signature: Array[String]): AnyRef = { + actionName match { + case "dosomething" => + params match { + case Array(name: String, value: String) => + try { + {} + } catch { + case e: Exception => + log.warning("Exception: %s", e.getMessage) + throw e + } + case _ => throw new jmx.MBeanException(new Exception("Bad signature " + params.toList.toString)) + } + case _ => throw new jmx.MBeanException(new Exception("No such method")) + } + null + } + + def setAttribute(attr: jmx.Attribute): Unit = attr.getValue match { + case s: String => println("Setting: " + s) + case _ => throw new jmx.InvalidAttributeValueException() + } + + def setAttributes(attrs: jmx.AttributeList): jmx.AttributeList = { + for (attr <- jcl.Buffer(attrs.asList)) setAttribute(attr) + attrs + } +} diff --git a/kernel/src/main/scala/management/RestfulJMX.scala b/kernel/src/main/scala/management/RestfulJMX.scala new file mode 100755 index 0000000000..5726e57764 --- /dev/null +++ b/kernel/src/main/scala/management/RestfulJMX.scala @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2009 Scalable Solutions. + */ + +package se.scalablesolutions.akka.kernel.management + +import se.scalablesolutions.akka.kernel.actor.{SupervisorFactory, Actor} +import se.scalablesolutions.akka.kernel.config.ScalaConfig._ +import se.scalablesolutions.akka.kernel.util.Logging + +import javax.ws.rs.core.MultivaluedMap +import javax.ws.rs.{GET, POST, Path, QueryParam, Produces, WebApplicationException, Consumes} +import javax.management._ +import javax.management.remote.{JMXConnector, JMXConnectorFactory, JMXServiceURL} +import javax.servlet.http.{HttpServletRequest, HttpServletResponse} +import java.util.concurrent.ConcurrentHashMap + +/** + * REST interface to Akka's JMX service. + *

+ * Here is an example that retreives the current number of Actors. + *

+ * http://localhost:9998/management
+ *   ?service=service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
+ *   &component=se.scalablesolutions.akka:type=Stats
+ *   &attribute=counter_NrOfActors
+ * 
+ */ +@Path("/management") +class RestfulJMX extends Actor with Logging { + private case class Request(service: String, component: String, attribute: String) + private val connectors = new ConcurrentHashMap[String, JMXConnector] + + @GET + @Produces(Array("text/html")) + def queryJMX( + @QueryParam("service") service: String, + @QueryParam("component") component: String, + @QueryParam("attribute") attribute: String) = + (this !! Request(service, component, attribute)).getOrElse(Error in REST JMX management service) + + override def receive: PartialFunction[Any, Unit] = { + case Request(service, component, attribute) => reply(retrieveAttribute(service, component, attribute)) + } + + private def retrieveAttribute(service: String, component: String, attribute: String): scala.xml.Elem = { + try { + var connector = connectors.putIfAbsent(service, JMXConnectorFactory.connect(new JMXServiceURL(service))) +
{connector.getMBeanServerConnection.getAttribute(new ObjectName(component), attribute).toString}
+ } catch { + case e: Exception => + if (connectors.contains(service)) connectors.remove(service) + throw e + } + } +} + +class RestfulJMXBoot extends Logging { + log.info("Booting Restful JMX servivce") + object factory extends SupervisorFactory { + override def getSupervisorConfig: SupervisorConfig = { + SupervisorConfig( + RestartStrategy(OneForOne, 3, 100), + Supervise( + new RestfulJMX, + LifeCycle(Permanent, 100)) + :: Nil) + } + } + factory.newSupervisor.startSupervisor +} diff --git a/kernel/src/main/scala/nio/RemoteClient.scala b/kernel/src/main/scala/nio/RemoteClient.scala index 2e62d4dbcf..e91173c4f7 100644 --- a/kernel/src/main/scala/nio/RemoteClient.scala +++ b/kernel/src/main/scala/nio/RemoteClient.scala @@ -12,6 +12,7 @@ import kernel.actor.{Exit, Actor} import kernel.reactor.{DefaultCompletableFutureResult, CompletableFutureResult} import serialization.{Serializer, Serializable, SerializationProtocol} import kernel.util.Logging +import kernel.management.Management import org.jboss.netty.bootstrap.ClientBootstrap import org.jboss.netty.channel._ @@ -21,6 +22,8 @@ import org.jboss.netty.handler.codec.protobuf.{ProtobufDecoder, ProtobufEncoder} import scala.collection.mutable.HashMap +import com.twitter.service.Stats + /** * @author Jonas Bonér */ @@ -44,6 +47,10 @@ object RemoteClient extends Logging { * @author Jonas Bonér */ class RemoteClient(hostname: String, port: Int) extends Logging { + val name = "RemoteClient@" + hostname + val NR_OF_BYTES_SENT = Stats.getCounter("NrOfBytesSent_" + name) + val NR_OF_MESSAGES_SENT = Stats.getCounter("NrOfMessagesSent_" + name) + @volatile private var isRunning = false private val futures = new ConcurrentHashMap[Long, CompletableFutureResult] private val supervisors = new ConcurrentHashMap[String, Actor] @@ -55,7 +62,7 @@ class RemoteClient(hostname: String, port: Int) extends Logging { private val bootstrap = new ClientBootstrap(channelFactory) - bootstrap.setPipelineFactory(new RemoteClientPipelineFactory(futures, supervisors)) + bootstrap.setPipelineFactory(new RemoteClientPipelineFactory(name, futures, supervisors)) bootstrap.setOption("tcpNoDelay", true) bootstrap.setOption("keepAlive", true) @@ -84,6 +91,10 @@ class RemoteClient(hostname: String, port: Int) extends Logging { } def send(request: RemoteRequest): Option[CompletableFutureResult] = if (isRunning) { + if (Management.RECORD_STATS) { + NR_OF_BYTES_SENT.incr(request.getSerializedSize) + NR_OF_MESSAGES_SENT.incr + } if (request.getIsOneWay) { connection.getChannel.write(request) None @@ -111,15 +122,16 @@ class RemoteClient(hostname: String, port: Int) extends Logging { /** * @author Jonas Bonér */ -class RemoteClientPipelineFactory(futures: ConcurrentMap[Long, CompletableFutureResult], - supervisors: ConcurrentMap[String, Actor]) extends ChannelPipelineFactory { +class RemoteClientPipelineFactory(name: String, + futures: ConcurrentMap[Long, CompletableFutureResult], + supervisors: ConcurrentMap[String, Actor]) extends ChannelPipelineFactory { def getPipeline: ChannelPipeline = { val p = Channels.pipeline() p.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4)); p.addLast("protobufDecoder", new ProtobufDecoder(RemoteReply.getDefaultInstance)); p.addLast("frameEncoder", new LengthFieldPrepender(4)); p.addLast("protobufEncoder", new ProtobufEncoder()); - p.addLast("handler", new RemoteClientHandler(futures, supervisors)) + p.addLast("handler", new RemoteClientHandler(name, futures, supervisors)) p } } @@ -128,10 +140,14 @@ class RemoteClientPipelineFactory(futures: ConcurrentMap[Long, CompletableFuture * @author Jonas Bonér */ @ChannelPipelineCoverage { val value = "all" } -class RemoteClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResult], +class RemoteClientHandler(val name: String, + val futures: ConcurrentMap[Long, CompletableFutureResult], val supervisors: ConcurrentMap[String, Actor]) extends SimpleChannelUpstreamHandler with Logging { + val NR_OF_BYTES_RECEIVED = Stats.getCounter("NrOfBytesReceived_" + name) + val NR_OF_MESSAGES_RECEIVED = Stats.getCounter("NrOfMessagesReceived_" + name) + override def handleUpstream(ctx: ChannelHandlerContext, event: ChannelEvent) = { if (event.isInstanceOf[ChannelStateEvent] && event.asInstanceOf[ChannelStateEvent].getState != ChannelState.INTEREST_OPS) { log.debug(event.toString) @@ -144,6 +160,10 @@ class RemoteClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResu val result = event.getMessage if (result.isInstanceOf[RemoteReply]) { val reply = result.asInstanceOf[RemoteReply] + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_RECEIVED.incr + NR_OF_BYTES_RECEIVED.incr(reply.getSerializedSize) + } log.debug("Received RemoteReply[\n%s]", reply.toString) val future = futures.get(reply.getId) if (reply.getIsSuccessful) { @@ -159,7 +179,7 @@ class RemoteClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResu } future.completeWithException(null, parseException(reply)) } - futures.remove(reply.getId) + futures.remove(reply.getId) } else throw new IllegalArgumentException("Unknown message received in remote client handler: " + result) } catch { case e: Exception => diff --git a/kernel/src/main/scala/nio/RemoteServer.scala b/kernel/src/main/scala/nio/RemoteServer.scala index b2f1931879..bbc223247e 100644 --- a/kernel/src/main/scala/nio/RemoteServer.scala +++ b/kernel/src/main/scala/nio/RemoteServer.scala @@ -13,6 +13,7 @@ import kernel.util._ import protobuf.RemoteProtocol import protobuf.RemoteProtocol.{RemoteReply, RemoteRequest} import serialization.{Serializer, Serializable, SerializationProtocol} +import kernel.management.Management import org.jboss.netty.bootstrap.ServerBootstrap import org.jboss.netty.channel._ @@ -20,22 +21,28 @@ import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory import org.jboss.netty.handler.codec.frame.{LengthFieldBasedFrameDecoder, LengthFieldPrepender} import org.jboss.netty.handler.codec.protobuf.{ProtobufDecoder, ProtobufEncoder} +import com.twitter.service.Stats + /** * @author Jonas Bonér */ class RemoteServer extends Logging { - def start = RemoteServer.start + def start = RemoteServer.start(None) } /** * @author Jonas Bonér */ object RemoteServer extends Logging { - val HOSTNAME = kernel.Kernel.config.getString("akka.remote.hostname", "localhost") - val PORT = kernel.Kernel.config.getInt("akka.remote.port", 9999) - val CONNECTION_TIMEOUT_MILLIS = kernel.Kernel.config.getInt("akka.remote.connection-timeout", 1000) + import kernel.Kernel.config + val HOSTNAME = config.getString("akka.remote.hostname", "localhost") + val PORT = config.getInt("akka.remote.port", 9999) + val CONNECTION_TIMEOUT_MILLIS = config.getInt("akka.remote.connection-timeout", 1000) + + val name = "RemoteServer@" + HOSTNAME @volatile private var isRunning = false + @volatile private var isConfigured = false private val factory = new NioServerSocketChannelFactory( Executors.newCachedThreadPool, @@ -44,18 +51,15 @@ object RemoteServer extends Logging { private val activeObjectFactory = new ActiveObjectFactory private val bootstrap = new ServerBootstrap(factory) - // FIXME provide different codecs (Thrift, Avro, Protobuf, JSON) - private val handler = new RemoteServerHandler - bootstrap.setPipelineFactory(new RemoteServerPipelineFactory) - bootstrap.setOption("child.tcpNoDelay", true) - bootstrap.setOption("child.keepAlive", true) - bootstrap.setOption("child.reuseAddress", true) - bootstrap.setOption("child.connectTimeoutMillis", CONNECTION_TIMEOUT_MILLIS) - - def start = synchronized { + def start(loader: Option[ClassLoader]) = synchronized { if (!isRunning) { log.info("Starting remote server at [%s:%s]", HOSTNAME, PORT) + bootstrap.setPipelineFactory(new RemoteServerPipelineFactory(name, loader)) + bootstrap.setOption("child.tcpNoDelay", true) + bootstrap.setOption("child.keepAlive", true) + bootstrap.setOption("child.reuseAddress", true) + bootstrap.setOption("child.connectTimeoutMillis", CONNECTION_TIMEOUT_MILLIS) bootstrap.bind(new InetSocketAddress(HOSTNAME, PORT)) isRunning = true } @@ -65,14 +69,14 @@ object RemoteServer extends Logging { /** * @author Jonas Bonér */ -class RemoteServerPipelineFactory extends ChannelPipelineFactory { +class RemoteServerPipelineFactory(name: String, loader: Option[ClassLoader]) extends ChannelPipelineFactory { def getPipeline: ChannelPipeline = { val p = Channels.pipeline() p.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4)) p.addLast("protobufDecoder", new ProtobufDecoder(RemoteProtocol.RemoteRequest.getDefaultInstance)) p.addLast("frameEncoder", new LengthFieldPrepender(4)) p.addLast("protobufEncoder", new ProtobufEncoder) - p.addLast("handler", new RemoteServerHandler) + p.addLast("handler", new RemoteServerHandler(name, loader)) p } } @@ -81,7 +85,12 @@ class RemoteServerPipelineFactory extends ChannelPipelineFactory { * @author Jonas Bonér */ @ChannelPipelineCoverage { val value = "all" } -class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { +class RemoteServerHandler(val name: String, val applicationLoader: Option[ClassLoader]) extends SimpleChannelUpstreamHandler with Logging { + val NR_OF_BYTES_SENT = Stats.getCounter("NrOfBytesSent_" + name) + val NR_OF_BYTES_RECEIVED = Stats.getCounter("NrOfBytesReceived_" + name) + val NR_OF_MESSAGES_SENT = Stats.getCounter("NrOfMessagesSent_" + name) + val NR_OF_MESSAGES_RECEIVED = Stats.getCounter("NrOfMessagesReceived_" + name) + private val activeObjectFactory = new ActiveObjectFactory private val activeObjects = new ConcurrentHashMap[String, AnyRef] private val actors = new ConcurrentHashMap[String, Actor] @@ -106,6 +115,10 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { } private def handleRemoteRequest(request: RemoteRequest, channel: Channel) = { + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_RECEIVED.incr + NR_OF_BYTES_RECEIVED.incr(request.getSerializedSize) + } log.debug("Received RemoteRequest[\n%s]", request.toString) if (request.getIsActor) dispatchToActor(request, channel) else dispatchToActiveObject(request, channel) @@ -128,7 +141,12 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { .setIsActor(true) RemoteProtocolBuilder.setMessage(result, replyBuilder) if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) - channel.write(replyBuilder.build) + val replyMessage = replyBuilder.build + channel.write(replyMessage) + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_SENT.incr + NR_OF_BYTES_SENT.incr(replyMessage.getSerializedSize) + } } catch { case e: Throwable => log.error("Could not invoke remote actor [%s] due to: %s", request.getTarget, e) @@ -139,7 +157,12 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { .setIsSuccessful(false) .setIsActor(true) if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) - channel.write(replyBuilder.build) + val replyMessage = replyBuilder.build + channel.write(replyMessage) + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_SENT.incr + NR_OF_BYTES_SENT.incr(replyMessage.getSerializedSize) + } } } } @@ -165,7 +188,12 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { .setIsActor(false) RemoteProtocolBuilder.setMessage(result, replyBuilder) if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) - channel.write(replyBuilder.build) + val replyMessage = replyBuilder.build + channel.write(replyMessage) + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_SENT.incr + NR_OF_BYTES_SENT.incr(replyMessage.getSerializedSize) + } } } catch { case e: InvocationTargetException => @@ -176,8 +204,13 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { .setException(e.getCause.getClass.getName + "$" + e.getCause.getMessage) .setIsSuccessful(false) .setIsActor(false) - if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) - channel.write(replyBuilder.build) + if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) + val replyMessage = replyBuilder.build + channel.write(replyMessage) + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_SENT.incr + NR_OF_BYTES_SENT.incr(replyMessage.getSerializedSize) + } case e: Throwable => log.error("Could not invoke remote active object [%s :: %s] due to: %s", request.getMethod, request.getTarget, e) e.printStackTrace @@ -186,8 +219,13 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { .setException(e.getClass.getName + "$" + e.getMessage) .setIsSuccessful(false) .setIsActor(false) - if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) - channel.write(replyBuilder.build) + if (request.hasSupervisorUuid) replyBuilder.setSupervisorUuid(request.getSupervisorUuid) + val replyMessage = replyBuilder.build + channel.write(replyMessage) + if (Management.RECORD_STATS) { + NR_OF_MESSAGES_SENT.incr + NR_OF_BYTES_SENT.incr(replyMessage.getSerializedSize) + } } } @@ -223,8 +261,9 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { private def createActiveObject(name: String, timeout: Long): AnyRef = { val activeObjectOrNull = activeObjects.get(name) if (activeObjectOrNull == null) { - val clazz = Class.forName(name) try { + val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name) + else Class.forName(name) val newInstance = activeObjectFactory.newInstance(clazz, timeout).asInstanceOf[AnyRef] activeObjects.put(name, newInstance) newInstance @@ -240,8 +279,9 @@ class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { private def createActor(name: String, timeout: Long): Actor = { val actorOrNull = actors.get(name) if (actorOrNull == null) { - val clazz = Class.forName(name) try { + val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name) + else Class.forName(name) val newInstance = clazz.newInstance.asInstanceOf[Actor] newInstance.timeout = timeout actors.put(name, newInstance) diff --git a/kernel/src/main/scala/reactor/Dispatchers.scala b/kernel/src/main/scala/reactor/Dispatchers.scala index d7697e965c..5c4935bbd5 100644 --- a/kernel/src/main/scala/reactor/Dispatchers.scala +++ b/kernel/src/main/scala/reactor/Dispatchers.scala @@ -49,17 +49,17 @@ class DispatcherFactory { * Creates an event based dispatcher serving multiple (millions) of actors through a thread pool. * Has a fluent builder interface for configuring its semantics. */ - def newEventBasedThreadPoolDispatcher = new EventBasedThreadPoolDispatcher - def newConcurrentEventBasedThreadPoolDispatcher = new EventBasedThreadPoolDispatcher(true) + def newEventBasedThreadPoolDispatcher(name: String) = new EventBasedThreadPoolDispatcher(name) + def newConcurrentEventBasedThreadPoolDispatcher(name: String) = new EventBasedThreadPoolDispatcher(name, true) /** * Creates an event based dispatcher serving multiple (millions) of actors through a single thread. */ - def newEventBasedSingleThreadDispatcher = new EventBasedSingleThreadDispatcher + def newEventBasedSingleThreadDispatcher(name: String) = new EventBasedSingleThreadDispatcher(name) /** * Creates an thread based dispatcher serving a single actor through the same single thread. * E.g. each actor consumes its own thread. */ def newThreadBasedDispatcher(actor: Actor) = new ThreadBasedDispatcher(actor) -} \ No newline at end of file +} diff --git a/kernel/src/main/scala/reactor/EventBasedSingleThreadDispatcher.scala b/kernel/src/main/scala/reactor/EventBasedSingleThreadDispatcher.scala index c3d52e777e..a4c7a0fc80 100644 --- a/kernel/src/main/scala/reactor/EventBasedSingleThreadDispatcher.scala +++ b/kernel/src/main/scala/reactor/EventBasedSingleThreadDispatcher.scala @@ -10,9 +10,14 @@ */ package se.scalablesolutions.akka.kernel.reactor +import kernel.management.Management + import java.util.{LinkedList, Queue, List} -class EventBasedSingleThreadDispatcher extends MessageDispatcherBase { +import com.twitter.service.Stats + +class EventBasedSingleThreadDispatcher(name: String) extends MessageDispatcherBase(name) { + val NR_OF_PROCESSED_MESSAGES = Stats.getCounter("NrOfProcessedMessage_" + name) def start = if (!active) { active = true val messageDemultiplexer = new EventBasedSingleThreadDemultiplexer(queue) @@ -22,12 +27,14 @@ class EventBasedSingleThreadDispatcher extends MessageDispatcherBase { try { messageDemultiplexer.select } catch { case e: InterruptedException => active = false } - val selectedInvocations = messageDemultiplexer.acquireSelectedInvocations.iterator - while (selectedInvocations.hasNext) { - val invocation = selectedInvocations.next + val selectedInvocations = messageDemultiplexer.acquireSelectedInvocations + if (Management.RECORD_STATS) NR_OF_PROCESSED_MESSAGES.incr(selectedInvocations.size) + val iter = selectedInvocations.iterator + while (iter.hasNext) { + val invocation = iter.next val invoker = messageHandlers.get(invocation.sender) if (invoker != null) invoker.invoke(invocation) - selectedInvocations.remove + iter.remove } } } diff --git a/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala b/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala index a3b9b4dbe4..939fe8ccbe 100644 --- a/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala +++ b/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala @@ -4,12 +4,16 @@ package se.scalablesolutions.akka.kernel.reactor +import kernel.management.Management + import java.util.concurrent._ import locks.ReentrantLock import atomic.{AtomicLong, AtomicInteger} import ThreadPoolExecutor.CallerRunsPolicy import java.util.{Collection, HashSet, HashMap, LinkedList, List} +import com.twitter.service.Stats + /** * Implements the Reactor pattern as defined in: [http://www.cs.wustl.edu/~schmidt/PDF/reactor-siemens.pdf].
* See also this article: [http://today.java.net/cs/user/print/a/350]. @@ -56,16 +60,17 @@ import java.util.{Collection, HashSet, HashMap, LinkedList, List} * * @author Jonas Bonér */ -class EventBasedThreadPoolDispatcher(private val concurrentMode: Boolean) extends MessageDispatcherBase { - def this() = this(false) +class EventBasedThreadPoolDispatcher(name: String, private val concurrentMode: Boolean) extends MessageDispatcherBase(name) { + def this(name: String) = this(name, false) + val NR_OF_PROCESSED_MESSAGES = Stats.getCounter("NrOfProcessedMessages_" + name) private val NR_START_THREADS = 16 private val NR_MAX_THREADS = 128 private val KEEP_ALIVE_TIME = 60000L // default is one minute private var inProcessOfBuilding = false private var executor: ExecutorService = _ private var threadPoolBuilder: ThreadPoolExecutor = _ - private val threadFactory = new MonitorableThreadFactory("akka") + private val threadFactory = new MonitorableThreadFactory("akka:" + name) private var boundedExecutorBound = -1 private val busyInvokers = new HashSet[AnyRef] @@ -89,6 +94,7 @@ class EventBasedThreadPoolDispatcher(private val concurrentMode: Boolean) extend } catch { case e: InterruptedException => active = false } val selectedInvocations = messageDemultiplexer.acquireSelectedInvocations val reservedInvocations = reserve(selectedInvocations) + if (Management.RECORD_STATS) NR_OF_PROCESSED_MESSAGES.incr(reservedInvocations.size) val it = reservedInvocations.entrySet.iterator while (it.hasNext) { val entry = it.next @@ -157,6 +163,7 @@ class EventBasedThreadPoolDispatcher(private val concurrentMode: Boolean) extend ensureNotActive verifyNotInConstructionPhase inProcessOfBuilding = false + blockingQueue = queue threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, queue) this } @@ -169,7 +176,8 @@ class EventBasedThreadPoolDispatcher(private val concurrentMode: Boolean) extend def withNewThreadPoolWithBoundedBlockingQueue(bound: Int): EventBasedThreadPoolDispatcher = synchronized { ensureNotActive verifyNotInConstructionPhase - threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, new LinkedBlockingQueue[Runnable], threadFactory) + blockingQueue = new LinkedBlockingQueue[Runnable] + threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, blockingQueue, threadFactory) boundedExecutorBound = bound this } @@ -177,28 +185,32 @@ class EventBasedThreadPoolDispatcher(private val concurrentMode: Boolean) extend def withNewThreadPoolWithLinkedBlockingQueueWithCapacity(capacity: Int): EventBasedThreadPoolDispatcher = synchronized { ensureNotActive verifyNotInConstructionPhase - threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, new LinkedBlockingQueue[Runnable](capacity), threadFactory, new CallerRunsPolicy) + blockingQueue = new LinkedBlockingQueue[Runnable](capacity) + threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, blockingQueue, threadFactory, new CallerRunsPolicy) this } def withNewThreadPoolWithLinkedBlockingQueueWithUnboundedCapacity: EventBasedThreadPoolDispatcher = synchronized { ensureNotActive verifyNotInConstructionPhase - threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, new LinkedBlockingQueue[Runnable], threadFactory, new CallerRunsPolicy) + blockingQueue = new LinkedBlockingQueue[Runnable] + threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, blockingQueue, threadFactory, new CallerRunsPolicy) this } def withNewThreadPoolWithSynchronousQueueWithFairness(fair: Boolean): EventBasedThreadPoolDispatcher = synchronized { ensureNotActive verifyNotInConstructionPhase - threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, new SynchronousQueue[Runnable](fair), threadFactory, new CallerRunsPolicy) + blockingQueue = new SynchronousQueue[Runnable](fair) + threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, blockingQueue, threadFactory, new CallerRunsPolicy) this } def withNewThreadPoolWithArrayBlockingQueueWithCapacityAndFairness(capacity: Int, fair: Boolean): EventBasedThreadPoolDispatcher = synchronized { ensureNotActive verifyNotInConstructionPhase - threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, new ArrayBlockingQueue[Runnable](capacity, fair), threadFactory, new CallerRunsPolicy) + blockingQueue = new ArrayBlockingQueue[Runnable](capacity, fair) + threadPoolBuilder = new ThreadPoolExecutor(NR_START_THREADS, NR_MAX_THREADS, KEEP_ALIVE_TIME, MILLISECONDS, blockingQueue, threadFactory, new CallerRunsPolicy) this } @@ -311,13 +323,7 @@ class BoundedExecutorDecorator(val executor: ExecutorService, bound: Int) extend def invokeAll[T](callables: Collection[_ <: Callable[T]]) = executor.invokeAll(callables) def invokeAll[T](callables: Collection[_ <: Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAll(callables, l, timeUnit) def invokeAny[T](callables: Collection[_ <: Callable[T]]) = executor.invokeAny(callables) - def invokeAny[T](callables: Collection[_ <: Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAny(callables, l, timeUnit) -/* - def invokeAll[T](callables: Collection[Callable[T]]) = executor.invokeAll(callables) - def invokeAll[T](callables: Collection[Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAll(callables, l, timeUnit) - def invokeAny[T](callables: Collection[Callable[T]]) = executor.invokeAny(callables) - def invokeAny[T](callables: Collection[Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAny(callables, l, timeUnit) - */ + def invokeAny[T](callables: Collection[_ <: Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAny(callables, l, timeUnit) } /** diff --git a/kernel/src/main/scala/reactor/MessageDispatcherBase.scala b/kernel/src/main/scala/reactor/MessageDispatcherBase.scala index 9dd21f2f42..d47db197a5 100644 --- a/kernel/src/main/scala/reactor/MessageDispatcherBase.scala +++ b/kernel/src/main/scala/reactor/MessageDispatcherBase.scala @@ -4,20 +4,31 @@ package se.scalablesolutions.akka.kernel.reactor +import kernel.management.Management + import java.util.{LinkedList, Queue, List} -import java.util.concurrent.TimeUnit +import java.util.concurrent.{TimeUnit, BlockingQueue} import java.util.HashMap -trait MessageDispatcherBase extends MessageDispatcher { +import com.twitter.service.Stats + +abstract class MessageDispatcherBase(val name: String) extends MessageDispatcher { + //val CONCURRENT_MODE = kernel.Kernel.config.getBool("akka.actor.concurrent-mode", false) val MILLISECONDS = TimeUnit.MILLISECONDS - val queue = new ReactiveMessageQueue - + val queue = new ReactiveMessageQueue(name) + var blockingQueue: BlockingQueue[Runnable] = _ @volatile protected var active: Boolean = false protected val messageHandlers = new HashMap[AnyRef, MessageInvoker] protected var selectorThread: Thread = _ protected val guard = new Object + if (Management.RECORD_STATS) { + Stats.makeGauge("SizeOfBlockingQueue_" + name) { + guard.synchronized { blockingQueue.size.toDouble } + } + } + def messageQueue = queue def registerHandler(key: AnyRef, handler: MessageInvoker) = guard.synchronized { @@ -40,10 +51,16 @@ trait MessageDispatcherBase extends MessageDispatcher { protected def doShutdown = {} } -class ReactiveMessageQueue extends MessageQueue { +class ReactiveMessageQueue(name: String) extends MessageQueue { private[kernel] val queue: Queue[MessageInvocation] = new LinkedList[MessageInvocation] @volatile private var interrupted = false + if (Management.RECORD_STATS) { + Stats.makeGauge("SizeOfReactiveQueue_" + name) { + queue.synchronized { queue.size.toDouble } + } + } + def append(handle: MessageInvocation) = queue.synchronized { queue.offer(handle) queue.notifyAll @@ -64,4 +81,4 @@ class ReactiveMessageQueue extends MessageQueue { interrupted = true queue.notifyAll } -} \ No newline at end of file +} diff --git a/kernel/src/main/scala/reactor/ThreadBasedDispatcher.scala b/kernel/src/main/scala/reactor/ThreadBasedDispatcher.scala index b01f373dc9..fbae2d8c99 100644 --- a/kernel/src/main/scala/reactor/ThreadBasedDispatcher.scala +++ b/kernel/src/main/scala/reactor/ThreadBasedDispatcher.scala @@ -4,18 +4,24 @@ package se.scalablesolutions.akka.kernel.reactor +import com.twitter.service.Stats + import java.util.concurrent.LinkedBlockingQueue import java.util.Queue + import kernel.actor.{Actor, ActorMessageInvoker} +import kernel.management.Management /** * Dedicates a unique thread for each actor passed in as reference. Served through its messageQueue. * @author Jonas Bonér */ -class ThreadBasedDispatcher private[kernel] (val messageHandler: MessageInvoker) extends MessageDispatcher { - def this(actor: Actor) = this(new ActorMessageInvoker(actor)) +class ThreadBasedDispatcher private[kernel] (val name: String, val messageHandler: MessageInvoker) extends MessageDispatcher { + def this(actor: Actor) = this(actor.getClass.getName, new ActorMessageInvoker(actor)) - private val queue = new BlockingMessageQueue + val NR_OF_PROCESSED_MESSAGES = Stats.getCounter("NrOfProcessedMessages_" + name) + + private val queue = new BlockingMessageQueue(name) private var selectorThread: Thread = _ @volatile private var active: Boolean = false @@ -27,6 +33,7 @@ class ThreadBasedDispatcher private[kernel] (val messageHandler: MessageInvoker) override def run = { while (active) { try { + if (Management.RECORD_STATS) NR_OF_PROCESSED_MESSAGES.incr messageHandler.invoke(queue.take) } catch { case e: InterruptedException => active = false } } @@ -44,7 +51,13 @@ class ThreadBasedDispatcher private[kernel] (val messageHandler: MessageInvoker) def unregisterHandler(key: AnyRef) = throw new UnsupportedOperationException } -class BlockingMessageQueue extends MessageQueue { +class BlockingMessageQueue(name: String) extends MessageQueue { + if (Management.RECORD_STATS) { + Stats.makeGauge("SizeOfBlockingQueue_" + name) { + queue.size.toDouble + } + } + // FIXME: configure the LBQ private val queue = new LinkedBlockingQueue[MessageInvocation] def append(handle: MessageInvocation) = queue.put(handle) @@ -52,4 +65,4 @@ class BlockingMessageQueue extends MessageQueue { def take: MessageInvocation = queue.take def read(destination: Queue[MessageInvocation]) = throw new UnsupportedOperationException def interrupt = throw new UnsupportedOperationException -} \ No newline at end of file +} diff --git a/kernel/src/test/scala/EventBasedSingleThreadDispatcherTest.scala b/kernel/src/test/scala/EventBasedSingleThreadDispatcherTest.scala index dc272893f5..3ac4eee51a 100644 --- a/kernel/src/test/scala/EventBasedSingleThreadDispatcherTest.scala +++ b/kernel/src/test/scala/EventBasedSingleThreadDispatcherTest.scala @@ -55,7 +55,7 @@ class EventBasedSingleThreadDispatcherTest extends TestCase { val guardLock = new ReentrantLock val handleLatch = new CountDownLatch(100) val key = "key" - val dispatcher = new EventBasedSingleThreadDispatcher + val dispatcher = new EventBasedSingleThreadDispatcher("name") dispatcher.registerHandler(key, new TestMessageHandle(handleLatch)) dispatcher.start for (i <- 0 until 100) { @@ -69,7 +69,7 @@ class EventBasedSingleThreadDispatcherTest extends TestCase { val handleLatch = new CountDownLatch(2) val key1 = "key1" val key2 = "key2" - val dispatcher = new EventBasedSingleThreadDispatcher + val dispatcher = new EventBasedSingleThreadDispatcher("name") dispatcher.registerHandler(key1, new TestMessageHandle(handleLatch)) dispatcher.registerHandler(key2, new TestMessageHandle(handleLatch)) dispatcher.start @@ -83,7 +83,7 @@ class EventBasedSingleThreadDispatcherTest extends TestCase { val handleLatch = new CountDownLatch(200) val key1 = "key1" val key2 = "key2" - val dispatcher = new EventBasedSingleThreadDispatcher + val dispatcher = new EventBasedSingleThreadDispatcher("name") dispatcher.registerHandler(key1, new MessageInvoker { var currentValue = -1; def invoke(message: MessageInvocation) { diff --git a/kernel/src/test/scala/EventBasedThreadPoolDispatcherTest.scala b/kernel/src/test/scala/EventBasedThreadPoolDispatcherTest.scala index 89b908015e..c0b205d6f6 100644 --- a/kernel/src/test/scala/EventBasedThreadPoolDispatcherTest.scala +++ b/kernel/src/test/scala/EventBasedThreadPoolDispatcherTest.scala @@ -37,7 +37,7 @@ class EventBasedThreadPoolDispatcherTest extends TestCase { val guardLock = new ReentrantLock val handleLatch = new CountDownLatch(10) val key = "key" - val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher + val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher("name") dispatcher.withNewThreadPoolWithBoundedBlockingQueue(100) .setCorePoolSize(2) .setMaxPoolSize(4) @@ -76,7 +76,7 @@ class EventBasedThreadPoolDispatcherTest extends TestCase { val handlersBarrier = new CyclicBarrier(3) val key1 = "key1" val key2 = "key2" - val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher + val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher("name") dispatcher.withNewThreadPoolWithBoundedBlockingQueue(100) .setCorePoolSize(2) .setMaxPoolSize(4) @@ -121,7 +121,7 @@ class EventBasedThreadPoolDispatcherTest extends TestCase { val handleLatch = new CountDownLatch(200) val key1 = "key1" val key2 = "key2" - val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher + val dispatcher = Dispatchers.newEventBasedThreadPoolDispatcher("name") dispatcher.withNewThreadPoolWithBoundedBlockingQueue(100) .setCorePoolSize(2) .setMaxPoolSize(4) diff --git a/kernel/src/test/scala/RemoteActorSpec.scala b/kernel/src/test/scala/RemoteActorSpec.scala index 61397e6018..3387aa8eb0 100644 --- a/kernel/src/test/scala/RemoteActorSpec.scala +++ b/kernel/src/test/scala/RemoteActorSpec.scala @@ -26,7 +26,6 @@ class RemoteActorSpecActorBidirectional extends Actor { } class RemoteActorSpec extends TestCase { - kernel.Kernel.config new Thread(new Runnable() { def run = { diff --git a/kernel/src/test/scala/ThreadBasedDispatcherTest.scala b/kernel/src/test/scala/ThreadBasedDispatcherTest.scala index 621e3dccfd..1ad5c0b733 100644 --- a/kernel/src/test/scala/ThreadBasedDispatcherTest.scala +++ b/kernel/src/test/scala/ThreadBasedDispatcherTest.scala @@ -49,7 +49,7 @@ class ThreadBasedDispatcherTest extends TestCase { private def internalTestMessagesDispatchedToTheSameHandlerAreExecutedSequentially: Unit = { val guardLock = new ReentrantLock val handleLatch = new CountDownLatch(100) - val dispatcher = new ThreadBasedDispatcher(new TestMessageHandle(handleLatch)) + val dispatcher = new ThreadBasedDispatcher("name", new TestMessageHandle(handleLatch)) dispatcher.start for (i <- 0 until 100) { dispatcher.messageQueue.append(new MessageInvocation("id", new Object, None, None)) @@ -60,7 +60,7 @@ class ThreadBasedDispatcherTest extends TestCase { private def internalTestMessagesDispatchedToHandlersAreExecutedInFIFOOrder: Unit = { val handleLatch = new CountDownLatch(100) - val dispatcher = new ThreadBasedDispatcher(new MessageInvoker { + val dispatcher = new ThreadBasedDispatcher("name", new MessageInvoker { var currentValue = -1; def invoke(message: MessageInvocation) { if (threadingIssueDetected.get) return diff --git a/lib/atmosphere-core-0.3.jar~HEAD b/lib/atmosphere-core-0.3.jar~HEAD deleted file mode 100644 index aef71c00bac3321cc8d75a5013cd65a506133e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25729 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,ZP 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 DrW0?p diff --git a/lib/cassidy-0.1.jar b/lib/cassidy-0.1.jar old mode 100755 new mode 100644 diff --git a/lib/jersey-client-1.1.1-ea.jar b/lib/jersey-client-1.1.1-ea.jar old mode 100755 new mode 100644 diff --git a/lib/jersey-core-1.1.1-ea.jar b/lib/jersey-core-1.1.1-ea.jar old mode 100755 new mode 100644 diff --git a/lib/jersey-server-1.1.1-ea.jar b/lib/jersey-server-1.1.1-ea.jar old mode 100755 new mode 100644 diff --git a/lib/scala-stats-1.0.jar b/lib/scala-stats-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6b1b43bf7b9db2c3329cfbd34737395efc3a3a4b GIT binary patch literal 48694 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 literal 0 HcmV?d00001 diff --git a/samples-scala/src/main/scala/SimpleService.scala b/samples-scala/src/main/scala/SimpleService.scala index 79eaaad468..59d28e52e6 100644 --- a/samples-scala/src/main/scala/SimpleService.scala +++ b/samples-scala/src/main/scala/SimpleService.scala @@ -114,4 +114,4 @@ class JsonpFilter extends BroadcastFilter[String] with Logging { message + "\" }); \n\n") } -} \ No newline at end of file +}