fixed misc FIXMEs and TODOs
This commit is contained in:
parent
be00b09f75
commit
b36bacb005
49 changed files with 95 additions and 242 deletions
|
|
@ -457,7 +457,6 @@ private[akka] class Dispatcher(transactionalRequired: Boolean, val callbacks: Op
|
||||||
if (arg.getClass.getName.contains(ActiveObject.AW_PROXY_PREFIX)) unserializable = true
|
if (arg.getClass.getName.contains(ActiveObject.AW_PROXY_PREFIX)) unserializable = true
|
||||||
}
|
}
|
||||||
if (!unserializable && hasMutableArgument) {
|
if (!unserializable && hasMutableArgument) {
|
||||||
// FIXME: can we have another default deep cloner?
|
|
||||||
val copyOfArgs = Serializer.Java.deepClone(args)
|
val copyOfArgs = Serializer.Java.deepClone(args)
|
||||||
joinPoint.getRtti.asInstanceOf[MethodRtti].setParameterValues(copyOfArgs.asInstanceOf[Array[AnyRef]])
|
joinPoint.getRtti.asInstanceOf[MethodRtti].setParameterValues(copyOfArgs.asInstanceOf[Array[AnyRef]])
|
||||||
}
|
}
|
||||||
|
|
@ -480,7 +479,7 @@ ublic class CamelInvocationHandler implements InvocationHandler {
|
||||||
BeanInvocation invocation = new BeanInvocation(method, args);
|
BeanInvocation invocation = new BeanInvocation(method, args);
|
||||||
ExchangePattern pattern = ExchangePattern.InOut;
|
ExchangePattern pattern = ExchangePattern.InOut;
|
||||||
MethodInfo methodInfo = methodInfoCache.getMethodInfo(method);
|
MethodInfo methodInfo = methodInfoCache.getMethodInfo(method);
|
||||||
if (methodInfo != null) {
|
if (methodInfo ne null) {
|
||||||
pattern = methodInfo.getPattern();
|
pattern = methodInfo.getPattern();
|
||||||
}
|
}
|
||||||
Exchange exchange = new DefaultExchange(endpoint, pattern);
|
Exchange exchange = new DefaultExchange(endpoint, pattern);
|
||||||
|
|
@ -488,7 +487,7 @@ ublic class CamelInvocationHandler implements InvocationHandler {
|
||||||
|
|
||||||
producer.process(exchange);
|
producer.process(exchange);
|
||||||
Throwable fault = exchange.getException();
|
Throwable fault = exchange.getException();
|
||||||
if (fault != null) {
|
if (fault ne null) {
|
||||||
throw new InvocationTargetException(fault);
|
throw new InvocationTargetException(fault);
|
||||||
}
|
}
|
||||||
if (pattern.isOutCapable()) {
|
if (pattern.isOutCapable()) {
|
||||||
|
|
@ -511,7 +510,7 @@ ublic class CamelInvocationHandler implements InvocationHandler {
|
||||||
exchange.getIn().setBody(joinpoint)
|
exchange.getIn().setBody(joinpoint)
|
||||||
producer.process(exchange)
|
producer.process(exchange)
|
||||||
val fault = exchange.getException();
|
val fault = exchange.getException();
|
||||||
if (fault != null) throw new InvocationTargetException(fault)
|
if (fault ne null) throw new InvocationTargetException(fault)
|
||||||
|
|
||||||
// FIXME: need some timeout and future here...
|
// FIXME: need some timeout and future here...
|
||||||
exchange.getOut.getBody
|
exchange.getOut.getBody
|
||||||
|
|
|
||||||
|
|
@ -815,7 +815,7 @@ trait Actor extends TransactionManagement {
|
||||||
if (sender.isDefined) {
|
if (sender.isDefined) {
|
||||||
requestBuilder.setSourceTarget(sender.get.getClass.getName)
|
requestBuilder.setSourceTarget(sender.get.getClass.getName)
|
||||||
requestBuilder.setSourceUuid(sender.get.uuid)
|
requestBuilder.setSourceUuid(sender.get.uuid)
|
||||||
log.debug("Setting sending actor as " + sender.get.getClass.getName + ", " + _contactAddress)
|
log.debug("Setting sending actor as %s, %s", sender.get.getClass.getName, _contactAddress)
|
||||||
|
|
||||||
if (sender.get._contactAddress.isDefined) {
|
if (sender.get._contactAddress.isDefined) {
|
||||||
val addr = sender.get._contactAddress.get
|
val addr = sender.get._contactAddress.get
|
||||||
|
|
@ -839,7 +839,6 @@ trait Actor extends TransactionManagement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME support local and remote sender as postMessageToMailbox above
|
|
||||||
private def postMessageToMailboxAndCreateFutureResultWithTimeout(
|
private def postMessageToMailboxAndCreateFutureResultWithTimeout(
|
||||||
message: Any, timeout: Long): CompletableFutureResult = {
|
message: Any, timeout: Long): CompletableFutureResult = {
|
||||||
if (_remoteAddress.isDefined) {
|
if (_remoteAddress.isDefined) {
|
||||||
|
|
@ -962,7 +961,7 @@ trait Actor extends TransactionManagement {
|
||||||
if (trapExit.exists(_.isAssignableFrom(reason.getClass))) {
|
if (trapExit.exists(_.isAssignableFrom(reason.getClass))) {
|
||||||
if (faultHandler.isDefined) {
|
if (faultHandler.isDefined) {
|
||||||
faultHandler.get match {
|
faultHandler.get match {
|
||||||
// FIXME: implement support for maxNrOfRetries and withinTimeRange in RestartStrategy
|
// FIXME: implement support for maxNrOfRetries and withinTimeRange in RestartStrategy
|
||||||
case AllForOneStrategy(maxNrOfRetries, withinTimeRange) => restartLinkedActors(reason)
|
case AllForOneStrategy(maxNrOfRetries, withinTimeRange) => restartLinkedActors(reason)
|
||||||
case OneForOneStrategy(maxNrOfRetries, withinTimeRange) => dead.restart(reason)
|
case OneForOneStrategy(maxNrOfRetries, withinTimeRange) => dead.restart(reason)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ object ActorRegistry extends Logging {
|
||||||
case None => actorsByClassName + (className -> (actor :: Nil))
|
case None => actorsByClassName + (className -> (actor :: Nil))
|
||||||
}
|
}
|
||||||
val id = actor.id
|
val id = actor.id
|
||||||
if (id == null) throw new IllegalStateException("Actor.id is null " + actor)
|
if (id eq null) throw new IllegalStateException("Actor.id is null " + actor)
|
||||||
actorsById.get(id) match {
|
actorsById.get(id) match {
|
||||||
case Some(instances) => actorsById + (id -> (actor :: instances))
|
case Some(instances) => actorsById + (id -> (actor :: instances))
|
||||||
case None => actorsById + (id -> (actor :: Nil))
|
case None => actorsById + (id -> (actor :: Nil))
|
||||||
|
|
@ -50,7 +50,6 @@ object ActorRegistry extends Logging {
|
||||||
actorsById - actor.getClass.getName
|
actorsById - actor.getClass.getName
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: document ActorRegistry.shutdownAll
|
|
||||||
def shutdownAll = {
|
def shutdownAll = {
|
||||||
log.info("Shutting down all actors in the system...")
|
log.info("Shutting down all actors in the system...")
|
||||||
actorsById.foreach(entry => entry._2.map(_.stop))
|
actorsById.foreach(entry => entry._2.map(_.stop))
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ trait BootableActorLoaderService extends Bootable with Logging {
|
||||||
val toDeploy = for (f <- DEPLOY_DIR.listFiles().toArray.toList.asInstanceOf[List[File]]) yield f.toURL
|
val toDeploy = for (f <- DEPLOY_DIR.listFiles().toArray.toList.asInstanceOf[List[File]]) yield f.toURL
|
||||||
log.info("Deploying applications from [%s]: [%s]", DEPLOY, toDeploy.toArray.toList)
|
log.info("Deploying applications from [%s]: [%s]", DEPLOY, toDeploy.toArray.toList)
|
||||||
new URLClassLoader(toDeploy.toArray, getClass.getClassLoader)
|
new URLClassLoader(toDeploy.toArray, getClass.getClassLoader)
|
||||||
} else if (getClass.getClassLoader.getResourceAsStream("akka.conf") != null) {
|
} else if (getClass.getClassLoader.getResourceAsStream("akka.conf") ne null) {
|
||||||
getClass.getClassLoader
|
getClass.getClassLoader
|
||||||
} else throw new IllegalStateException(
|
} else throw new IllegalStateException(
|
||||||
"AKKA_HOME is not defined and no 'akka.conf' can be found on the classpath, aborting")
|
"AKKA_HOME is not defined and no 'akka.conf' can be found on the classpath, aborting")
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ private[akka] class ActiveObjectGuiceConfigurator extends ActiveObjectConfigurat
|
||||||
*/
|
*/
|
||||||
override def getInstance[T](clazz: Class[T]): T = synchronized {
|
override def getInstance[T](clazz: Class[T]): T = synchronized {
|
||||||
log.debug("Retrieving active object [%s]", clazz.getName)
|
log.debug("Retrieving active object [%s]", clazz.getName)
|
||||||
if (injector == null) throw new IllegalStateException(
|
if (injector eq null) throw new IllegalStateException(
|
||||||
"inject() and/or supervise() must be called before invoking getInstance(clazz)")
|
"inject() and/or supervise() must be called before invoking getInstance(clazz)")
|
||||||
val (proxy, targetInstance, component) =
|
val (proxy, targetInstance, component) =
|
||||||
activeObjectRegistry.getOrElse(clazz, throw new IllegalStateException(
|
activeObjectRegistry.getOrElse(clazz, throw new IllegalStateException(
|
||||||
|
|
@ -132,13 +132,13 @@ private[akka] class ActiveObjectGuiceConfigurator extends ActiveObjectConfigurat
|
||||||
}
|
}
|
||||||
|
|
||||||
override def inject: ActiveObjectConfiguratorBase = synchronized {
|
override def inject: ActiveObjectConfiguratorBase = synchronized {
|
||||||
if (injector != null) throw new IllegalStateException("inject() has already been called on this configurator")
|
if (injector ne null) throw new IllegalStateException("inject() has already been called on this configurator")
|
||||||
injector = Guice.createInjector(modules)
|
injector = Guice.createInjector(modules)
|
||||||
this
|
this
|
||||||
}
|
}
|
||||||
|
|
||||||
override def supervise: ActiveObjectConfiguratorBase = synchronized {
|
override def supervise: ActiveObjectConfiguratorBase = synchronized {
|
||||||
if (injector == null) inject
|
if (injector eq null) inject
|
||||||
supervisor = Some(ActiveObject.supervise(restartStrategy, supervised))
|
supervisor = Some(ActiveObject.supervise(restartStrategy, supervised))
|
||||||
//camelContext.addComponent(AKKA_CAMEL_ROUTING_SCHEME, new ActiveObjectComponent(this))
|
//camelContext.addComponent(AKKA_CAMEL_ROUTING_SCHEME, new ActiveObjectComponent(this))
|
||||||
//camelContext.start
|
//camelContext.start
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ object ScalaConfig {
|
||||||
def apply(scope: Scope) = new LifeCycle(scope, None)
|
def apply(scope: Scope) = new LifeCycle(scope, None)
|
||||||
}
|
}
|
||||||
case class RestartCallbacks(preRestart: String, postRestart: String) {
|
case class RestartCallbacks(preRestart: String, postRestart: String) {
|
||||||
if (preRestart == null || postRestart == null) throw new IllegalArgumentException("Restart callback methods can't be null")
|
if ((preRestart eq null) || (postRestart eq null)) throw new IllegalArgumentException("Restart callback methods can't be null")
|
||||||
}
|
}
|
||||||
|
|
||||||
case object Permanent extends Scope
|
case object Permanent extends Scope
|
||||||
|
|
@ -56,9 +56,9 @@ object ScalaConfig {
|
||||||
_dispatcher: MessageDispatcher, // optional
|
_dispatcher: MessageDispatcher, // optional
|
||||||
_remoteAddress: RemoteAddress // optional
|
_remoteAddress: RemoteAddress // optional
|
||||||
) extends Server {
|
) extends Server {
|
||||||
val intf: Option[Class[_]] = if (_intf == null) None else Some(_intf)
|
val intf: Option[Class[_]] = if (_intf eq null) None else Some(_intf)
|
||||||
val dispatcher: Option[MessageDispatcher] = if (_dispatcher == null) None else Some(_dispatcher)
|
val dispatcher: Option[MessageDispatcher] = if (_dispatcher eq null) None else Some(_dispatcher)
|
||||||
val remoteAddress: Option[RemoteAddress] = if (_remoteAddress == null) None else Some(_remoteAddress)
|
val remoteAddress: Option[RemoteAddress] = if (_remoteAddress eq null) None else Some(_remoteAddress)
|
||||||
}
|
}
|
||||||
object Component {
|
object Component {
|
||||||
def apply(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Int) =
|
def apply(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Int) =
|
||||||
|
|
@ -131,7 +131,7 @@ object JavaConfig {
|
||||||
class LifeCycle(@BeanProperty val scope: Scope, @BeanProperty val callbacks: RestartCallbacks) extends ConfigElement {
|
class LifeCycle(@BeanProperty val scope: Scope, @BeanProperty val callbacks: RestartCallbacks) extends ConfigElement {
|
||||||
def this(scope: Scope) = this(scope, null)
|
def this(scope: Scope) = this(scope, null)
|
||||||
def transform = {
|
def transform = {
|
||||||
val callbackOption = if (callbacks == null) None else Some(callbacks.transform)
|
val callbackOption = if (callbacks eq null) None else Some(callbacks.transform)
|
||||||
se.scalablesolutions.akka.config.ScalaConfig.LifeCycle(scope.transform, callbackOption)
|
se.scalablesolutions.akka.config.ScalaConfig.LifeCycle(scope.transform, callbackOption)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -217,7 +217,7 @@ object JavaConfig {
|
||||||
def transform =
|
def transform =
|
||||||
se.scalablesolutions.akka.config.ScalaConfig.Component(
|
se.scalablesolutions.akka.config.ScalaConfig.Component(
|
||||||
intf, target, lifeCycle.transform, timeout, transactionRequired, dispatcher,
|
intf, target, lifeCycle.transform, timeout, transactionRequired, dispatcher,
|
||||||
if (remoteAddress != null) se.scalablesolutions.akka.config.ScalaConfig.RemoteAddress(remoteAddress.hostname, remoteAddress.port) else null)
|
if (remoteAddress ne null) se.scalablesolutions.akka.config.ScalaConfig.RemoteAddress(remoteAddress.hostname, remoteAddress.port) else null)
|
||||||
|
|
||||||
def newSupervised(actor: Actor) =
|
def newSupervised(actor: Actor) =
|
||||||
se.scalablesolutions.akka.config.ScalaConfig.Supervise(actor, lifeCycle.transform)
|
se.scalablesolutions.akka.config.ScalaConfig.Supervise(actor, lifeCycle.transform)
|
||||||
|
|
|
||||||
|
|
@ -49,11 +49,6 @@ class ReactiveMessageQueue(name: String) extends MessageQueue {
|
||||||
queue.notifyAll
|
queue.notifyAll
|
||||||
}
|
}
|
||||||
|
|
||||||
def prepend(handle: MessageInvocation) = queue.synchronized {
|
|
||||||
queue.add(handle)
|
|
||||||
queue.notifyAll
|
|
||||||
}
|
|
||||||
|
|
||||||
def read(destination: List[MessageInvocation]) = queue.synchronized {
|
def read(destination: List[MessageInvocation]) = queue.synchronized {
|
||||||
while (queue.isEmpty && !interrupted) queue.wait
|
while (queue.isEmpty && !interrupted) queue.wait
|
||||||
if (!interrupted) while (!queue.isEmpty) destination.add(queue.remove)
|
if (!interrupted) while (!queue.isEmpty) destination.add(queue.remove)
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,7 @@ final class MessageInvocation(val receiver: Actor,
|
||||||
val future: Option[CompletableFutureResult],
|
val future: Option[CompletableFutureResult],
|
||||||
val sender: Option[Actor],
|
val sender: Option[Actor],
|
||||||
val tx: Option[Transaction]) {
|
val tx: Option[Transaction]) {
|
||||||
if (receiver == null) throw new IllegalArgumentException("receiver is null")
|
if (receiver eq null) throw new IllegalArgumentException("receiver is null")
|
||||||
if (message == null) throw new IllegalArgumentException("message is null")
|
|
||||||
|
|
||||||
def invoke = receiver.invoke(this)
|
def invoke = receiver.invoke(this)
|
||||||
|
|
||||||
|
|
@ -51,7 +50,6 @@ final class MessageInvocation(val receiver: Actor,
|
||||||
|
|
||||||
trait MessageQueue {
|
trait MessageQueue {
|
||||||
def append(handle: MessageInvocation)
|
def append(handle: MessageInvocation)
|
||||||
def prepend(handle: MessageInvocation)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trait MessageInvoker {
|
trait MessageInvoker {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ class ReactorBasedSingleThreadEventDrivenDispatcher(name: String) extends Abstra
|
||||||
while (iter.hasNext) {
|
while (iter.hasNext) {
|
||||||
val invocation = iter.next
|
val invocation = iter.next
|
||||||
val invoker = messageInvokers.get(invocation.receiver)
|
val invoker = messageInvokers.get(invocation.receiver)
|
||||||
if (invoker != null) invoker.invoke(invocation)
|
if (invoker ne null) invoker.invoke(invocation)
|
||||||
iter.remove
|
iter.remove
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,10 +105,10 @@ class ReactorBasedThreadPoolEventDrivenDispatcher(_name: String)
|
||||||
val invocations = selectedInvocations.iterator
|
val invocations = selectedInvocations.iterator
|
||||||
while (invocations.hasNext && totalNrOfActors > totalNrOfBusyActors && passFairnessCheck(nrOfBusyMessages)) {
|
while (invocations.hasNext && totalNrOfActors > totalNrOfBusyActors && passFairnessCheck(nrOfBusyMessages)) {
|
||||||
val invocation = invocations.next
|
val invocation = invocations.next
|
||||||
if (invocation == null) throw new IllegalStateException("Message invocation is null [" + invocation + "]")
|
if (invocation eq null) throw new IllegalStateException("Message invocation is null [" + invocation + "]")
|
||||||
if (!busyActors.contains(invocation.receiver)) {
|
if (!busyActors.contains(invocation.receiver)) {
|
||||||
val invoker = messageInvokers.get(invocation.receiver)
|
val invoker = messageInvokers.get(invocation.receiver)
|
||||||
if (invoker == null) throw new IllegalStateException("Message invoker for invocation [" + invocation + "] is null")
|
if (invoker eq null) throw new IllegalStateException("Message invoker for invocation [" + invocation + "] is null")
|
||||||
resume(invocation.receiver)
|
resume(invocation.receiver)
|
||||||
invocations.remove
|
invocations.remove
|
||||||
executor.execute(new Runnable() {
|
executor.execute(new Runnable() {
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ class BlockingMessageQueue(name: String) extends MessageQueue {
|
||||||
// FIXME: configure the LinkedBlockingQueue in BlockingMessageQueue, use a Builder like in the ReactorBasedThreadPoolEventDrivenDispatcher
|
// FIXME: configure the LinkedBlockingQueue in BlockingMessageQueue, use a Builder like in the ReactorBasedThreadPoolEventDrivenDispatcher
|
||||||
private val queue = new LinkedBlockingQueue[MessageInvocation]
|
private val queue = new LinkedBlockingQueue[MessageInvocation]
|
||||||
def append(invocation: MessageInvocation) = queue.put(invocation)
|
def append(invocation: MessageInvocation) = queue.put(invocation)
|
||||||
def prepend(invocation: MessageInvocation) = queue.add(invocation) // FIXME is add prepend???
|
|
||||||
def take: MessageInvocation = queue.take
|
def take: MessageInvocation = queue.take
|
||||||
def read(destination: Queue[MessageInvocation]) = throw new UnsupportedOperationException
|
def read(destination: Queue[MessageInvocation]) = throw new UnsupportedOperationException
|
||||||
def interrupt = throw new UnsupportedOperationException
|
def interrupt = throw new UnsupportedOperationException
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import atomic.{AtomicLong, AtomicInteger}
|
||||||
import ThreadPoolExecutor.CallerRunsPolicy
|
import ThreadPoolExecutor.CallerRunsPolicy
|
||||||
|
|
||||||
import java.util.Collection
|
import java.util.Collection
|
||||||
|
import se.scalablesolutions.akka.util.Logging
|
||||||
|
|
||||||
trait ThreadPoolBuilder {
|
trait ThreadPoolBuilder {
|
||||||
val name: String
|
val name: String
|
||||||
|
|
@ -207,8 +208,8 @@ trait ThreadPoolBuilder {
|
||||||
protected val counter = new AtomicLong
|
protected val counter = new AtomicLong
|
||||||
|
|
||||||
def newThread(runnable: Runnable) =
|
def newThread(runnable: Runnable) =
|
||||||
//new MonitorableThread(runnable, name)
|
new MonitorableThread(runnable, name)
|
||||||
new Thread(runnable, name + "-" + counter.getAndIncrement)
|
// new Thread(runnable, name + "-" + counter.getAndIncrement)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -218,7 +219,7 @@ trait ThreadPoolBuilder {
|
||||||
val DEFAULT_NAME = "MonitorableThread"
|
val DEFAULT_NAME = "MonitorableThread"
|
||||||
val created = new AtomicInteger
|
val created = new AtomicInteger
|
||||||
val alive = new AtomicInteger
|
val alive = new AtomicInteger
|
||||||
@volatile val debugLifecycle = false
|
@volatile var debugLifecycle = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME fix the issues with using the monitoring in MonitorableThread
|
// FIXME fix the issues with using the monitoring in MonitorableThread
|
||||||
|
|
@ -227,20 +228,21 @@ trait ThreadPoolBuilder {
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
class MonitorableThread(runnable: Runnable, name: String)
|
class MonitorableThread(runnable: Runnable, name: String)
|
||||||
extends Thread(runnable, name + "-" + MonitorableThread.created.incrementAndGet) { //with Logging {
|
extends Thread(runnable, name + "-" + MonitorableThread.created.incrementAndGet) with Logging {
|
||||||
|
|
||||||
setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
||||||
def uncaughtException(thread: Thread, cause: Throwable) = {} //log.error("UNCAUGHT in thread [%s] cause [%s]", thread.getName, cause)
|
def uncaughtException(thread: Thread, cause: Throwable) = log.error(cause, "UNCAUGHT in thread [%s]", thread.getName)
|
||||||
})
|
})
|
||||||
|
|
||||||
override def run = {
|
override def run = {
|
||||||
val debug = MonitorableThread.debugLifecycle
|
val debug = MonitorableThread.debugLifecycle
|
||||||
//if (debug) log.debug("Created %s", getName)
|
log.debug("Created %s", getName)
|
||||||
try {
|
try {
|
||||||
MonitorableThread.alive.incrementAndGet
|
MonitorableThread.alive.incrementAndGet
|
||||||
super.run
|
super.run
|
||||||
} finally {
|
} finally {
|
||||||
MonitorableThread.alive.decrementAndGet
|
MonitorableThread.alive.decrementAndGet
|
||||||
//if (debug) log.debug("Exiting %s", getName)
|
log.debug("Exiting %s", getName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,16 @@ import org.jboss.netty.util.{TimerTask, Timeout, HashedWheelTimer}
|
||||||
|
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.util.concurrent.{TimeUnit, Executors, ConcurrentMap, ConcurrentHashMap}
|
import java.util.concurrent.{TimeUnit, Executors, ConcurrentMap, ConcurrentHashMap}
|
||||||
|
import java.util.concurrent.atomic.AtomicLong
|
||||||
|
|
||||||
|
import org.codehaus.aspectwerkz.proxy.Uuid
|
||||||
|
|
||||||
|
object RemoteRequestIdFactory {
|
||||||
|
private val nodeId = Uuid.newUuid
|
||||||
|
private val id = new AtomicLong
|
||||||
|
def nextId: Long = id.getAndIncrement + nodeId
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
|
|
@ -31,8 +40,6 @@ object RemoteClient extends Logging {
|
||||||
val READ_TIMEOUT = config.getInt("akka.remote.client.read-timeout", 10000)
|
val READ_TIMEOUT = config.getInt("akka.remote.client.read-timeout", 10000)
|
||||||
val RECONNECT_DELAY = config.getInt("akka.remote.client.reconnect-delay", 5000)
|
val RECONNECT_DELAY = config.getInt("akka.remote.client.reconnect-delay", 5000)
|
||||||
|
|
||||||
// TODO: add configuration optons: 'HashedWheelTimer(long tickDuration, TimeUnit unit, int ticksPerWheel)'
|
|
||||||
// private[akka] val TIMER = new HashedWheelTimer
|
|
||||||
private val clients = new HashMap[String, RemoteClient]
|
private val clients = new HashMap[String, RemoteClient]
|
||||||
|
|
||||||
def clientFor(address: InetSocketAddress): RemoteClient = synchronized {
|
def clientFor(address: InetSocketAddress): RemoteClient = synchronized {
|
||||||
|
|
@ -54,7 +61,6 @@ object RemoteClient extends Logging {
|
||||||
def shutdownAll() = synchronized {
|
def shutdownAll() = synchronized {
|
||||||
clients.foreach({case (addr, client) => client.shutdown})
|
clients.foreach({case (addr, client) => client.shutdown})
|
||||||
clients.clear
|
clients.clear
|
||||||
// TIMER.stop
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -68,7 +74,6 @@ class RemoteClient(hostname: String, port: Int) extends Logging {
|
||||||
private val futures = new ConcurrentHashMap[Long, CompletableFutureResult]
|
private val futures = new ConcurrentHashMap[Long, CompletableFutureResult]
|
||||||
private val supervisors = new ConcurrentHashMap[String, Actor]
|
private val supervisors = new ConcurrentHashMap[String, Actor]
|
||||||
|
|
||||||
// TODO is this Netty channelFactory and other options always the best or should it be configurable?
|
|
||||||
private val channelFactory = new NioClientSocketChannelFactory(
|
private val channelFactory = new NioClientSocketChannelFactory(
|
||||||
Executors.newCachedThreadPool,
|
Executors.newCachedThreadPool,
|
||||||
Executors.newCachedThreadPool)
|
Executors.newCachedThreadPool)
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ class RemoteServerHandler(val name: String, openChannels: ChannelGroup, val appl
|
||||||
|
|
||||||
override def messageReceived(ctx: ChannelHandlerContext, event: MessageEvent) = {
|
override def messageReceived(ctx: ChannelHandlerContext, event: MessageEvent) = {
|
||||||
val message = event.getMessage
|
val message = event.getMessage
|
||||||
if (message == null) throw new IllegalStateException(
|
if (message eq null) throw new IllegalStateException(
|
||||||
"Message in remote MessageEvent is null: " + event)
|
"Message in remote MessageEvent is null: " + event)
|
||||||
if (message.isInstanceOf[RemoteRequest]) {
|
if (message.isInstanceOf[RemoteRequest]) {
|
||||||
handleRemoteRequest(message.asInstanceOf[RemoteRequest], event.getChannel)
|
handleRemoteRequest(message.asInstanceOf[RemoteRequest], event.getChannel)
|
||||||
|
|
@ -340,7 +340,7 @@ class RemoteServerHandler(val name: String, openChannels: ChannelGroup, val appl
|
||||||
|
|
||||||
private def createActiveObject(name: String, timeout: Long): AnyRef = {
|
private def createActiveObject(name: String, timeout: Long): AnyRef = {
|
||||||
val activeObjectOrNull = activeObjects.get(name)
|
val activeObjectOrNull = activeObjects.get(name)
|
||||||
if (activeObjectOrNull == null) {
|
if (activeObjectOrNull eq null) {
|
||||||
try {
|
try {
|
||||||
log.info("Creating a new remote active object [%s]", name)
|
log.info("Creating a new remote active object [%s]", name)
|
||||||
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
||||||
|
|
@ -358,7 +358,7 @@ class RemoteServerHandler(val name: String, openChannels: ChannelGroup, val appl
|
||||||
|
|
||||||
private def createActor(name: String, uuid: String, timeout: Long): Actor = {
|
private def createActor(name: String, uuid: String, timeout: Long): Actor = {
|
||||||
val actorOrNull = actors.get(uuid)
|
val actorOrNull = actors.get(uuid)
|
||||||
if (actorOrNull == null) {
|
if (actorOrNull eq null) {
|
||||||
try {
|
try {
|
||||||
log.info("Creating a new remote actor [%s:%s]", name, uuid)
|
log.info("Creating a new remote actor [%s:%s]", name, uuid)
|
||||||
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
||||||
|
|
|
||||||
|
|
@ -1,107 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright (C) 2009 Scalable Solutions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package se.scalablesolutions.akka.remote
|
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicLong
|
|
||||||
import stm.Transaction
|
|
||||||
import util.HashCode
|
|
||||||
|
|
||||||
// FIXME: will not work - can clash with other host's requests - need te prepend with hostname
|
|
||||||
object RemoteRequestIdFactory {
|
|
||||||
private val id = new AtomicLong
|
|
||||||
def nextId = id.getAndIncrement
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@serializable class RemoteRequest(val message: AnyRef,
|
|
||||||
val method: String,
|
|
||||||
val target: String,
|
|
||||||
val timeout: Long,
|
|
||||||
val supervisorUuid: Option[String],
|
|
||||||
val isActor: Boolean,
|
|
||||||
val isOneWay: Boolean,
|
|
||||||
val isEscaped: Boolean) {
|
|
||||||
private[RemoteRequest] var _id = IdFactory.nextId
|
|
||||||
def id = _id
|
|
||||||
|
|
||||||
override def toString: String = synchronized {
|
|
||||||
"RemoteRequest[isActor: " + isActor + " | message: " + message + " | timeout: " + timeout + " | method: " + method +
|
|
||||||
" | target: " + target + " | isOneWay: " + isOneWay + " | supervisorUuid: " + supervisorUuid + "]"
|
|
||||||
}
|
|
||||||
|
|
||||||
override def hashCode(): Int = synchronized {
|
|
||||||
var result = HashCode.SEED
|
|
||||||
result = HashCode.hash(result, isActor)
|
|
||||||
result = HashCode.hash(result, message)
|
|
||||||
result = HashCode.hash(result, method)
|
|
||||||
result = HashCode.hash(result, target)
|
|
||||||
result = HashCode.hash(result, timeout)
|
|
||||||
result = HashCode.hash(result, isOneWay)
|
|
||||||
result = HashCode.hash(result, isEscaped)
|
|
||||||
result = if (supervisorUuid.isDefined) HashCode.hash(result, supervisorUuid.get) else result
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
override def equals(that: Any): Boolean = synchronized {
|
|
||||||
that != null &&
|
|
||||||
that.isInstanceOf[RemoteRequest] &&
|
|
||||||
that.asInstanceOf[RemoteRequest].isActor == isActor &&
|
|
||||||
that.asInstanceOf[RemoteRequest].message == message &&
|
|
||||||
that.asInstanceOf[RemoteRequest].method == method &&
|
|
||||||
that.asInstanceOf[RemoteRequest].target == target &&
|
|
||||||
that.asInstanceOf[RemoteRequest].timeout == timeout &&
|
|
||||||
that.asInstanceOf[RemoteRequest].isOneWay == isOneWay &&
|
|
||||||
that.asInstanceOf[RemoteRequest].isEscaped == isEscaped &&
|
|
||||||
that.asInstanceOf[RemoteRequest].supervisorUuid.isDefined == supervisorUuid.isDefined &&
|
|
||||||
that.asInstanceOf[RemoteRequest].supervisorUuid.get == supervisorUuid.get
|
|
||||||
}
|
|
||||||
|
|
||||||
def newReplyWithMessage(message: AnyRef, tx: Option[Transaction]) = synchronized {
|
|
||||||
new RemoteReply(true, id, message, null, supervisorUuid)
|
|
||||||
}
|
|
||||||
|
|
||||||
def newReplyWithException(error: Throwable) = synchronized {
|
|
||||||
new RemoteReply(false, id, null, error, supervisorUuid)
|
|
||||||
}
|
|
||||||
|
|
||||||
def cloneWithNewMessage(message: AnyRef, isEscaped: Boolean) = synchronized {
|
|
||||||
val request = new RemoteRequest(message, method, target, timeout, supervisorUuid, isActor, isOneWay, isEscaped)
|
|
||||||
request._id = id
|
|
||||||
request
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@serializable class RemoteReply(val successful: Boolean,
|
|
||||||
val id: Long,
|
|
||||||
val message: AnyRef,
|
|
||||||
val exception: Throwable,
|
|
||||||
val supervisorUuid: Option[String]) {
|
|
||||||
override def toString: String = synchronized {
|
|
||||||
"RemoteReply[successful: " + successful + " | id: " + id + " | message: " + message +
|
|
||||||
" | exception: " + exception + " | supervisorUuid: " + supervisorUuid + "]"
|
|
||||||
}
|
|
||||||
|
|
||||||
override def hashCode(): Int = synchronized {
|
|
||||||
var result = HashCode.SEED
|
|
||||||
result = HashCode.hash(result, successful)
|
|
||||||
result = HashCode.hash(result, id)
|
|
||||||
result = HashCode.hash(result, message)
|
|
||||||
result = HashCode.hash(result, exception)
|
|
||||||
result = if (supervisorUuid.isDefined) HashCode.hash(result, supervisorUuid.get) else result
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
override def equals(that: Any): Boolean = synchronized {
|
|
||||||
that != null &&
|
|
||||||
that.isInstanceOf[RemoteReply] &&
|
|
||||||
that.asInstanceOf[RemoteReply].successful == successful &&
|
|
||||||
that.asInstanceOf[RemoteReply].id == id &&
|
|
||||||
that.asInstanceOf[RemoteReply].message == message &&
|
|
||||||
that.asInstanceOf[RemoteReply].exception == exception &&
|
|
||||||
that.asInstanceOf[RemoteRequest].supervisorUuid.isDefined == supervisorUuid.isDefined &&
|
|
||||||
that.asInstanceOf[RemoteRequest].supervisorUuid.get == supervisorUuid.get
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
@ -79,7 +79,6 @@ object Serializable {
|
||||||
|
|
||||||
def toJSON: String = {
|
def toJSON: String = {
|
||||||
val out = new StringWriter
|
val out = new StringWriter
|
||||||
// FIXME: is this mapper expensive to create? Should I cache it away?
|
|
||||||
val mapper = new ObjectMapper
|
val mapper = new ObjectMapper
|
||||||
mapper.writeValue(out, this)
|
mapper.writeValue(out, this)
|
||||||
out.close
|
out.close
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ object Serializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
def in(bytes: Array[Byte], clazz: Class[_]): AnyRef = {
|
def in(bytes: Array[Byte], clazz: Class[_]): AnyRef = {
|
||||||
if (clazz == null) throw new IllegalArgumentException("Protobuf message can't be null")
|
if (clazz eq null) throw new IllegalArgumentException("Protobuf message can't be null")
|
||||||
in(bytes, Some(clazz))
|
in(bytes, Some(clazz))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +119,7 @@ object Serializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
def in(json: String, clazz: Class[_]): AnyRef = {
|
def in(json: String, clazz: Class[_]): AnyRef = {
|
||||||
if (clazz == null) throw new IllegalArgumentException("Can't deserialize JSON to instance if no class is provided")
|
if (clazz eq null) throw new IllegalArgumentException("Can't deserialize JSON to instance if no class is provided")
|
||||||
mapper.readValue(json, clazz).asInstanceOf[AnyRef]
|
mapper.readValue(json, clazz).asInstanceOf[AnyRef]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -270,11 +270,11 @@ private[collection] class BitmappedNode[K, +V](shift: Int)(table: Array[Node[K,
|
||||||
|
|
||||||
def elements = {
|
def elements = {
|
||||||
table.foldLeft(emptyElements) { (it, e) =>
|
table.foldLeft(emptyElements) { (it, e) =>
|
||||||
if (e == null) it else it ++ e.elements
|
if (e eq null) it else it ++ e.elements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def toString = "BitmappedNode(" + size + "," + table.filter(_ != null).toList.toString + ")"
|
override def toString = "BitmappedNode(" + size + "," + table.filter(_ ne null).toList.toString + ")"
|
||||||
|
|
||||||
private lazy val emptyElements: Iterator[(K, V)] = new Iterator[(K, V)] {
|
private lazy val emptyElements: Iterator[(K, V)] = new Iterator[(K, V)] {
|
||||||
val hasNext = false
|
val hasNext = false
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ object Transaction extends TransactionManagement {
|
||||||
// For reinitialize transaction after sending it over the wire
|
// For reinitialize transaction after sending it over the wire
|
||||||
private[akka] def reinit = synchronized {
|
private[akka] def reinit = synchronized {
|
||||||
import net.lag.logging.{Logger, Level}
|
import net.lag.logging.{Logger, Level}
|
||||||
if (log == null) {
|
if (log eq null) {
|
||||||
log = Logger.get(this.getClass.getName)
|
log = Logger.get(this.getClass.getName)
|
||||||
log.setLevel(Level.ALL) // TODO: preserve logging level
|
log.setLevel(Level.ALL) // TODO: preserve logging level
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ class TransactionWatcher extends Logging with Watcher {
|
||||||
zk.exists(znode, true, this, null)
|
zk.exists(znode, true, this, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chainedWatcher != null) chainedWatcher.process(event);
|
if (chainedWatcher ne null) chainedWatcher.process(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
var (newRoot, expansion) = pushTail(shift - 5, root, tail, null)
|
var (newRoot, expansion) = pushTail(shift - 5, root, tail, null)
|
||||||
var newShift = shift
|
var newShift = shift
|
||||||
|
|
||||||
if (expansion != null) {
|
if (expansion ne null) {
|
||||||
newRoot = array(newRoot, expansion)
|
newRoot = array(newRoot, expansion)
|
||||||
newShift += 5
|
newShift += 5
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +130,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
val newChild = if (level == 0) tailNode else {
|
val newChild = if (level == 0) tailNode else {
|
||||||
val (newChild, subExpansion) = pushTail(level - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], tailNode, expansion)
|
val (newChild, subExpansion) = pushTail(level - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], tailNode, expansion)
|
||||||
|
|
||||||
if (subExpansion == null) {
|
if (subExpansion eq null) {
|
||||||
val ret = new Array[AnyRef](arr.length)
|
val ret = new Array[AnyRef](arr.length)
|
||||||
Array.copy(arr, 0, ret, 0, arr.length)
|
Array.copy(arr, 0, ret, 0, arr.length)
|
||||||
|
|
||||||
|
|
@ -169,7 +169,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
var (newRoot, pTail) = popTail(shift - 5, root, null)
|
var (newRoot, pTail) = popTail(shift - 5, root, null)
|
||||||
var newShift = shift
|
var newShift = shift
|
||||||
|
|
||||||
if (newRoot == null) {
|
if (newRoot eq null) {
|
||||||
newRoot = EmptyArray
|
newRoot = EmptyArray
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -186,7 +186,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
val newPTail = if (shift > 0) {
|
val newPTail = if (shift > 0) {
|
||||||
val (newChild, subPTail) = popTail(shift - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], pTail)
|
val (newChild, subPTail) = popTail(shift - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], pTail)
|
||||||
|
|
||||||
if (newChild != null) {
|
if (newChild ne null) {
|
||||||
val ret = new Array[AnyRef](arr.length)
|
val ret = new Array[AnyRef](arr.length)
|
||||||
Array.copy(arr, 0, ret, 0, arr.length)
|
Array.copy(arr, 0, ret, 0, arr.length)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ class ForwardActorTest extends JUnitSuite {
|
||||||
val senderActor = new SenderActor
|
val senderActor = new SenderActor
|
||||||
senderActor.start
|
senderActor.start
|
||||||
Thread.sleep(1000)
|
Thread.sleep(1000)
|
||||||
assert(ForwardState.sender != null)
|
assert(ForwardState.sender ne null)
|
||||||
assert(senderActor === ForwardState.sender)
|
assert(senderActor === ForwardState.sender)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ case object OneWay extends TestMessage
|
||||||
case object Die extends TestMessage
|
case object Die extends TestMessage
|
||||||
case object NotifySupervisorExit extends TestMessage
|
case object NotifySupervisorExit extends TestMessage
|
||||||
|
|
||||||
// FIXME: add this User class to document on how to use SBinary
|
|
||||||
case class User(val usernamePassword: Tuple2[String, String],
|
case class User(val usernamePassword: Tuple2[String, String],
|
||||||
val email: String,
|
val email: String,
|
||||||
val age: Int)
|
val age: Int)
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ public class InMemNestedStateTest extends TestCase {
|
||||||
conf.configure(
|
conf.configure(
|
||||||
new RestartStrategy(new AllForOne(), 3, 5000, new Class[]{Exception.class}),
|
new RestartStrategy(new AllForOne(), 3, 5000, new Class[]{Exception.class}),
|
||||||
new Component[]{
|
new Component[]{
|
||||||
// FIXME: remove string-name, add ctor to only accept target class
|
|
||||||
new Component(InMemStateful.class, new LifeCycle(new Permanent()), 10000000),
|
new Component(InMemStateful.class, new LifeCycle(new Permanent()), 10000000),
|
||||||
new Component(InMemStatefulNested.class, new LifeCycle(new Permanent()), 10000000),
|
new Component(InMemStatefulNested.class, new LifeCycle(new Permanent()), 10000000),
|
||||||
new Component(InMemFailer.class, new LifeCycle(new Permanent()), 1000)
|
new Component(InMemFailer.class, new LifeCycle(new Permanent()), 1000)
|
||||||
|
|
|
||||||
|
|
@ -158,20 +158,6 @@ class InMemClasherImpl implements InMemClasher {
|
||||||
|
|
||||||
public void clash() {
|
public void clash() {
|
||||||
state.put("clasher", "was here");
|
state.put("clasher", "was here");
|
||||||
// spend some time here
|
|
||||||
// for (long i = 0; i < 1000000000; i++) {
|
|
||||||
// for (long j = 0; j < 10000000; j++) {
|
|
||||||
// j += i;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// FIXME: this statement gives me this error:
|
|
||||||
// se.scalablesolutions.akka.kernel.ActiveObjectException:
|
|
||||||
// Unexpected message [!(scala.actors.Channel@c2b2f6,ResultOrFailure[Right(null)])]
|
|
||||||
// to
|
|
||||||
// [GenericServer[se.scalablesolutions.akka.api.StatefulImpl]] from
|
|
||||||
// [GenericServer[se.scalablesolutions.akka.api.ClasherImpl]]]
|
|
||||||
// try { Thread.sleep(1000); } catch (InterruptedException e) {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,5 @@ public class PersistentClasher {
|
||||||
|
|
||||||
public void clash() {
|
public void clash() {
|
||||||
state.put("clasher", "was here");
|
state.put("clasher", "was here");
|
||||||
// spend some time here
|
|
||||||
|
|
||||||
// FIXME: this statement gives me this error:
|
|
||||||
// se.scalablesolutions.akka.kernel.ActiveObjectException:
|
|
||||||
// Unexpected message [!(scala.actors.Channel@c2b2f6,ResultOrFailure[Right(null)])]
|
|
||||||
// to
|
|
||||||
// [GenericServer[se.scalablesolutions.akka.api.StatefulImpl]] from
|
|
||||||
// [GenericServer[se.scalablesolutions.akka.api.ClasherImpl]]]
|
|
||||||
// try { Thread.sleep(1000); } catch (InterruptedException e) {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -22,7 +22,6 @@ public class PersistentNestedStateTest extends TestCase {
|
||||||
conf.configure(
|
conf.configure(
|
||||||
new RestartStrategy(new AllForOne(), 3, 5000, new Class[] {Exception.class}),
|
new RestartStrategy(new AllForOne(), 3, 5000, new Class[] {Exception.class}),
|
||||||
new Component[]{
|
new Component[]{
|
||||||
// FIXME: remove string-name, add ctor to only accept target class
|
|
||||||
new Component(PersistentStateful.class, new LifeCycle(new Permanent()), 10000000),
|
new Component(PersistentStateful.class, new LifeCycle(new Permanent()), 10000000),
|
||||||
new Component(PersistentStatefulNested.class, new LifeCycle(new Permanent()), 10000000),
|
new Component(PersistentStatefulNested.class, new LifeCycle(new Permanent()), 10000000),
|
||||||
new Component(PersistentFailer.class, new LifeCycle(new Permanent()), 1000)
|
new Component(PersistentFailer.class, new LifeCycle(new Permanent()), 1000)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ package se.scalablesolutions.akka.api;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Compile with:
|
Compile with:
|
||||||
cd ./fun-test-java/src/test/java
|
cd ./akka-fun-test-java/src/test/java
|
||||||
protoc se/scalablesolutions/akka/api/ProtobufProtocol.proto --java_out .
|
protoc se/scalablesolutions/akka/api/ProtobufProtocol.proto --java_out .
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ object Main {
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
object Kernel extends Logging {
|
object Kernel extends Logging {
|
||||||
// FIXME add API to shut server down gracefully
|
|
||||||
@volatile private var hasBooted = false
|
@volatile private var hasBooted = false
|
||||||
|
|
||||||
private val startTime = System.currentTimeMillis
|
private val startTime = System.currentTimeMillis
|
||||||
|
|
@ -62,7 +61,6 @@ object Kernel extends Logging {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME This is only being called by a test
|
|
||||||
def startRemoteService = Bundles.startRemoteService
|
def startRemoteService = Bundles.startRemoteService
|
||||||
|
|
||||||
private def printBanner = {
|
private def printBanner = {
|
||||||
|
|
|
||||||
|
|
@ -93,9 +93,8 @@ private[akka] object CassandraStorageBackend extends
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME implement insertVectorStorageEntriesFor
|
|
||||||
def insertVectorStorageEntriesFor(name: String, elements: List[Array[Byte]]) = {
|
def insertVectorStorageEntriesFor(name: String, elements: List[Array[Byte]]) = {
|
||||||
throw new UnsupportedOperationException("insertVectorStorageEntriesFor for CassandraStorageBackend is not implemented yet")
|
throw new UnsupportedOperationException("CassandraStorageBackend::insertVectorStorageEntriesFor is not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
def updateVectorStorageEntryFor(name: String, index: Int, elem: Array[Byte]) = {
|
def updateVectorStorageEntryFor(name: String, index: Int, elem: Array[Byte]) = {
|
||||||
|
|
@ -197,7 +196,7 @@ private[akka] object CassandraStorageBackend extends
|
||||||
def removeMapStorageFor(name: String): Unit = removeMapStorageFor(name, null)
|
def removeMapStorageFor(name: String): Unit = removeMapStorageFor(name, null)
|
||||||
|
|
||||||
def removeMapStorageFor(name: String, key: Array[Byte]): Unit = {
|
def removeMapStorageFor(name: String, key: Array[Byte]): Unit = {
|
||||||
val keyBytes = if (key == null) null else key
|
val keyBytes = if (key eq null) null else key
|
||||||
sessions.withSession {
|
sessions.withSession {
|
||||||
_ -- (name,
|
_ -- (name,
|
||||||
new ColumnPath(MAP_COLUMN_PARENT.getColumn_family, null, keyBytes),
|
new ColumnPath(MAP_COLUMN_PARENT.getColumn_family, null, keyBytes),
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,6 @@ class NoTransactionInScopeException extends RuntimeException
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
trait Storage {
|
trait Storage {
|
||||||
// FIXME: The UUID won't work across the remote machines, use [http://johannburkard.de/software/uuid/]
|
|
||||||
type ElementType
|
type ElementType
|
||||||
|
|
||||||
def newMap: PersistentMap[ElementType, ElementType]
|
def newMap: PersistentMap[ElementType, ElementType]
|
||||||
|
|
@ -145,8 +144,7 @@ trait PersistentMap[K, V] extends scala.collection.mutable.Map[K, V]
|
||||||
} catch {
|
} catch {
|
||||||
case e: Throwable => Nil
|
case e: Throwable => Nil
|
||||||
}
|
}
|
||||||
// FIXME how to deal with updated entries, these should be replaced in the originalList not just added
|
private var elements = newAndUpdatedEntries.toList union originalList.reverse
|
||||||
private var elements = newAndUpdatedEntries.toList ::: originalList.reverse
|
|
||||||
override def next: Tuple2[K, V]= synchronized {
|
override def next: Tuple2[K, V]= synchronized {
|
||||||
val element = elements.head
|
val element = elements.head
|
||||||
elements = elements.tail
|
elements = elements.tail
|
||||||
|
|
@ -176,7 +174,6 @@ trait PersistentVector[T] extends RandomAccessSeq[T] with Transactional with Com
|
||||||
val storage: VectorStorageBackend[T]
|
val storage: VectorStorageBackend[T]
|
||||||
|
|
||||||
def commit = {
|
def commit = {
|
||||||
// FIXME: should use batch function once the bug is resolved
|
|
||||||
for (element <- newElems) storage.insertVectorStorageEntryFor(uuid, element)
|
for (element <- newElems) storage.insertVectorStorageEntryFor(uuid, element)
|
||||||
for (entry <- updatedElems) storage.updateVectorStorageEntryFor(uuid, entry._1, entry._2)
|
for (entry <- updatedElems) storage.updateVectorStorageEntryFor(uuid, entry._1, entry._2)
|
||||||
newElems.clear
|
newElems.clear
|
||||||
|
|
@ -208,10 +205,9 @@ trait PersistentVector[T] extends RandomAccessSeq[T] with Transactional with Com
|
||||||
/**
|
/**
|
||||||
* Removes the <i>tail</i> element of this vector.
|
* Removes the <i>tail</i> element of this vector.
|
||||||
*/
|
*/
|
||||||
// FIXME: implement persistent vector pop
|
|
||||||
def pop: T = {
|
def pop: T = {
|
||||||
register
|
register
|
||||||
throw new UnsupportedOperationException("need to implement persistent vector pop")
|
throw new UnsupportedOperationException("PersistentVector::pop is not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
def update(index: Int, newElem: T) = {
|
def update(index: Int, newElem: T) = {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,6 @@ private[akka] object MongoStorageBackend extends
|
||||||
val db = new Mongo(MONGODB_SERVER_HOSTNAME, MONGODB_SERVER_PORT)
|
val db = new Mongo(MONGODB_SERVER_HOSTNAME, MONGODB_SERVER_PORT)
|
||||||
val coll = db.getDB(MONGODB_SERVER_DBNAME).getCollection(COLLECTION)
|
val coll = db.getDB(MONGODB_SERVER_DBNAME).getCollection(COLLECTION)
|
||||||
|
|
||||||
// FIXME: make this pluggable
|
|
||||||
private[this] val serializer = SJSON
|
private[this] val serializer = SJSON
|
||||||
|
|
||||||
def insertMapStorageEntryFor(name: String, key: AnyRef, value: AnyRef) {
|
def insertMapStorageEntryFor(name: String, key: AnyRef, value: AnyRef) {
|
||||||
|
|
@ -257,8 +256,8 @@ private[akka] object MongoStorageBackend extends
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME implement updateVectorStorageEntryFor
|
def updateVectorStorageEntryFor(name: String, index: Int, elem: AnyRef) =
|
||||||
def updateVectorStorageEntryFor(name: String, index: Int, elem: AnyRef) = throw new UnsupportedOperationException
|
throw new UnsupportedOperationException("MongoStorageBackend::insertVectorStorageEntriesFor is not implemented")
|
||||||
|
|
||||||
def getVectorStorageSizeFor(name: String): Int = {
|
def getVectorStorageSizeFor(name: String): Int = {
|
||||||
nullSafeFindOne(name) match {
|
nullSafeFindOne(name) match {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public class ActiveObjectGuiceModule extends AbstractModule {
|
||||||
//bind(ResourceProviderFactory.class);
|
//bind(ResourceProviderFactory.class);
|
||||||
for (int i = 0; i < bindings.size(); i++) {
|
for (int i = 0; i < bindings.size(); i++) {
|
||||||
final DependencyBinding db = bindings.get(i);
|
final DependencyBinding db = bindings.get(i);
|
||||||
//if (db.getInterface() != null) bind((Class) db.getInterface()).to((Class) db.getTarget()).in(Singleton.class);
|
//if (db.getInterface() ne null) bind((Class) db.getInterface()).to((Class) db.getTarget()).in(Singleton.class);
|
||||||
//else
|
//else
|
||||||
this.bind(db.getInterface()).toInstance(db.getTarget());
|
this.bind(db.getInterface()).toInstance(db.getTarget());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import net.lag.configgy.{Configgy, ParseException}
|
||||||
object Config extends Logging {
|
object Config extends Logging {
|
||||||
val VERSION = "0.6"
|
val VERSION = "0.6"
|
||||||
|
|
||||||
// TODO: make Multiverse options configurable
|
|
||||||
// Set Multiverse options for max speed
|
// Set Multiverse options for max speed
|
||||||
System.setProperty("org.multiverse.MuliverseConstants.sanityChecks", "false")
|
System.setProperty("org.multiverse.MuliverseConstants.sanityChecks", "false")
|
||||||
System.setProperty("org.multiverse.api.GlobalStmInstance.factorymethod", "org.multiverse.stms.alpha.AlphaStm.createFast")
|
System.setProperty("org.multiverse.api.GlobalStmInstance.factorymethod", "org.multiverse.stms.alpha.AlphaStm.createFast")
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ object HashCode {
|
||||||
case value: Byte => hash(seed, value)
|
case value: Byte => hash(seed, value)
|
||||||
case value: AnyRef =>
|
case value: AnyRef =>
|
||||||
var result = seed
|
var result = seed
|
||||||
if (value == null) result = hash(result, 0)
|
if (value eq null) result = hash(result, 0)
|
||||||
else if (!isArray(value)) result = hash(result, value.hashCode())
|
else if (!isArray(value)) result = hash(result, value.hashCode())
|
||||||
else for (id <- 0 until JArray.getLength(value)) result = hash(result, JArray.get(value, id)) // is an array
|
else for (id <- 0 until JArray.getLength(value)) result = hash(result, JArray.get(value, id)) // is an array
|
||||||
result
|
result
|
||||||
|
|
|
||||||
2
deploy/root/javascripts/prototype.js
vendored
2
deploy/root/javascripts/prototype.js
vendored
|
|
@ -34,7 +34,7 @@ Object.extend = function(destination, source) {
|
||||||
Object.inspect = function(object) {
|
Object.inspect = function(object) {
|
||||||
try {
|
try {
|
||||||
if (object == undefined) return 'undefined';
|
if (object == undefined) return 'undefined';
|
||||||
if (object == null) return 'null';
|
if (object eq null) return 'null';
|
||||||
return object.inspect ? object.inspect() : object.toString();
|
return object.inspect ? object.inspect() : object.toString();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof RangeError) return '...';
|
if (e instanceof RangeError) return '...';
|
||||||
|
|
|
||||||
|
|
@ -409,7 +409,7 @@ ublic class CamelInvocationHandler implements InvocationHandler {
|
||||||
BeanInvocation invocation = new BeanInvocation(method, args);
|
BeanInvocation invocation = new BeanInvocation(method, args);
|
||||||
ExchangePattern pattern = ExchangePattern.InOut;
|
ExchangePattern pattern = ExchangePattern.InOut;
|
||||||
MethodInfo methodInfo = methodInfoCache.getMethodInfo(method);
|
MethodInfo methodInfo = methodInfoCache.getMethodInfo(method);
|
||||||
if (methodInfo != null) {
|
if (methodInfo ne null) {
|
||||||
pattern = methodInfo.getPattern();
|
pattern = methodInfo.getPattern();
|
||||||
}
|
}
|
||||||
Exchange exchange = new DefaultExchange(endpoint, pattern);
|
Exchange exchange = new DefaultExchange(endpoint, pattern);
|
||||||
|
|
@ -417,7 +417,7 @@ ublic class CamelInvocationHandler implements InvocationHandler {
|
||||||
|
|
||||||
producer.process(exchange);
|
producer.process(exchange);
|
||||||
Throwable fault = exchange.getException();
|
Throwable fault = exchange.getException();
|
||||||
if (fault != null) {
|
if (fault ne null) {
|
||||||
throw new InvocationTargetException(fault);
|
throw new InvocationTargetException(fault);
|
||||||
}
|
}
|
||||||
if (pattern.isOutCapable()) {
|
if (pattern.isOutCapable()) {
|
||||||
|
|
@ -440,7 +440,7 @@ ublic class CamelInvocationHandler implements InvocationHandler {
|
||||||
exchange.getIn().setBody(joinpoint)
|
exchange.getIn().setBody(joinpoint)
|
||||||
producer.process(exchange)
|
producer.process(exchange)
|
||||||
val fault = exchange.getException();
|
val fault = exchange.getException();
|
||||||
if (fault != null) throw new InvocationTargetException(fault)
|
if (fault ne null) throw new InvocationTargetException(fault)
|
||||||
|
|
||||||
// FIXME: need some timeout and future here...
|
// FIXME: need some timeout and future here...
|
||||||
exchange.getOut.getBody
|
exchange.getOut.getBody
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ object ScalaConfig {
|
||||||
def apply(scope: Scope) = new LifeCycle(scope, 0, None)
|
def apply(scope: Scope) = new LifeCycle(scope, 0, None)
|
||||||
}
|
}
|
||||||
case class RestartCallbacks(preRestart: String, postRestart: String) {
|
case class RestartCallbacks(preRestart: String, postRestart: String) {
|
||||||
if (preRestart == null || postRestart == null) throw new IllegalArgumentException("Restart callback methods can't be null")
|
if (preRestart == null || postRestart eq null) throw new IllegalArgumentException("Restart callback methods can't be null")
|
||||||
}
|
}
|
||||||
|
|
||||||
case object Permanent extends Scope
|
case object Permanent extends Scope
|
||||||
|
|
@ -62,9 +62,9 @@ object ScalaConfig {
|
||||||
_dispatcher: MessageDispatcher, // optional
|
_dispatcher: MessageDispatcher, // optional
|
||||||
_remoteAddress: RemoteAddress // optional
|
_remoteAddress: RemoteAddress // optional
|
||||||
) extends Server {
|
) extends Server {
|
||||||
val intf: Option[Class[_]] = if (_intf == null) None else Some(_intf)
|
val intf: Option[Class[_]] = if (_intf eq null) None else Some(_intf)
|
||||||
val dispatcher: Option[MessageDispatcher] = if (_dispatcher == null) None else Some(_dispatcher)
|
val dispatcher: Option[MessageDispatcher] = if (_dispatcher eq null) None else Some(_dispatcher)
|
||||||
val remoteAddress: Option[RemoteAddress] = if (_remoteAddress == null) None else Some(_remoteAddress)
|
val remoteAddress: Option[RemoteAddress] = if (_remoteAddress eq null) None else Some(_remoteAddress)
|
||||||
}
|
}
|
||||||
object Component {
|
object Component {
|
||||||
def apply(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Int) =
|
def apply(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Int) =
|
||||||
|
|
@ -110,7 +110,7 @@ object JavaConfig {
|
||||||
class LifeCycle(@BeanProperty val scope: Scope, @BeanProperty val shutdownTime: Int, @BeanProperty val callbacks: RestartCallbacks) extends ConfigElement {
|
class LifeCycle(@BeanProperty val scope: Scope, @BeanProperty val shutdownTime: Int, @BeanProperty val callbacks: RestartCallbacks) extends ConfigElement {
|
||||||
def this(scope: Scope, shutdownTime: Int) = this(scope, shutdownTime, null)
|
def this(scope: Scope, shutdownTime: Int) = this(scope, shutdownTime, null)
|
||||||
def transform = {
|
def transform = {
|
||||||
val callbackOption = if (callbacks == null) None else Some(callbacks.transform)
|
val callbackOption = if (callbacks eq null) None else Some(callbacks.transform)
|
||||||
se.scalablesolutions.akka.config.ScalaConfig.LifeCycle(scope.transform, shutdownTime, callbackOption)
|
se.scalablesolutions.akka.config.ScalaConfig.LifeCycle(scope.transform, shutdownTime, callbackOption)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -176,7 +176,7 @@ object JavaConfig {
|
||||||
|
|
||||||
def transform =
|
def transform =
|
||||||
se.scalablesolutions.akka.config.ScalaConfig.Component(intf, target, lifeCycle.transform, timeout, dispatcher,
|
se.scalablesolutions.akka.config.ScalaConfig.Component(intf, target, lifeCycle.transform, timeout, dispatcher,
|
||||||
if (remoteAddress != null) se.scalablesolutions.akka.config.ScalaConfig.RemoteAddress(remoteAddress.hostname, remoteAddress.port) else null)
|
if (remoteAddress ne null) se.scalablesolutions.akka.config.ScalaConfig.RemoteAddress(remoteAddress.hostname, remoteAddress.port) else null)
|
||||||
|
|
||||||
def newSupervised(actor: Actor) =
|
def newSupervised(actor: Actor) =
|
||||||
se.scalablesolutions.akka.config.ScalaConfig.Supervise(actor, lifeCycle.transform)
|
se.scalablesolutions.akka.config.ScalaConfig.Supervise(actor, lifeCycle.transform)
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class EventBasedSingleThreadDispatcher(name: String) extends MessageDispatcherBa
|
||||||
while (iter.hasNext) {
|
while (iter.hasNext) {
|
||||||
val invocation = iter.next
|
val invocation = iter.next
|
||||||
val invoker = messageHandlers.get(invocation.receiver)
|
val invoker = messageHandlers.get(invocation.receiver)
|
||||||
if (invoker != null) invoker.invoke(invocation)
|
if (invoker ne null) invoker.invoke(invocation)
|
||||||
iter.remove
|
iter.remove
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -136,13 +136,13 @@ class EventBasedThreadPoolDispatcher(name: String, private val concurrentMode: B
|
||||||
val invocation = iterator.next
|
val invocation = iterator.next
|
||||||
if (concurrentMode) {
|
if (concurrentMode) {
|
||||||
val invoker = messageHandlers.get(invocation.receiver)
|
val invoker = messageHandlers.get(invocation.receiver)
|
||||||
if (invocation == null) throw new IllegalStateException("Message invocation is null [" + invocation + "]")
|
if (invocation eq null) throw new IllegalStateException("Message invocation is null [" + invocation + "]")
|
||||||
if (invoker == null) throw new IllegalStateException("Message invoker for invocation [" + invocation + "] is null")
|
if (invoker eq null) throw new IllegalStateException("Message invoker for invocation [" + invocation + "] is null")
|
||||||
result.put(invocation, invoker)
|
result.put(invocation, invoker)
|
||||||
} else if (!busyInvokers.contains(invocation.receiver)) {
|
} else if (!busyInvokers.contains(invocation.receiver)) {
|
||||||
val invoker = messageHandlers.get(invocation.receiver)
|
val invoker = messageHandlers.get(invocation.receiver)
|
||||||
if (invocation == null) throw new IllegalStateException("Message invocation is null [" + invocation + "]")
|
if (invocation eq null) throw new IllegalStateException("Message invocation is null [" + invocation + "]")
|
||||||
if (invoker == null) throw new IllegalStateException("Message invoker for invocation [" + invocation + "] is null")
|
if (invoker eq null) throw new IllegalStateException("Message invoker for invocation [" + invocation + "] is null")
|
||||||
result.put(invocation, invoker)
|
result.put(invocation, invoker)
|
||||||
busyInvokers.add(invocation.receiver)
|
busyInvokers.add(invocation.receiver)
|
||||||
iterator.remove
|
iterator.remove
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@ class MessageInvocation(val receiver: Actor,
|
||||||
val message: AnyRef,
|
val message: AnyRef,
|
||||||
val future: Option[CompletableFutureResult],
|
val future: Option[CompletableFutureResult],
|
||||||
val tx: Option[Transaction]) {
|
val tx: Option[Transaction]) {
|
||||||
if (receiver == null) throw new IllegalArgumentException("receiver is null")
|
if (receiver eq null) throw new IllegalArgumentException("receiver is null")
|
||||||
if (message == null) throw new IllegalArgumentException("message is null")
|
if (message eq null) throw new IllegalArgumentException("message is null")
|
||||||
|
|
||||||
private [akka] val nrOfDeliveryAttempts = new AtomicInteger(0)
|
private [akka] val nrOfDeliveryAttempts = new AtomicInteger(0)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ class RemoteServerHandler(val name: String, val applicationLoader: Option[ClassL
|
||||||
|
|
||||||
override def messageReceived(ctx: ChannelHandlerContext, event: MessageEvent) = {
|
override def messageReceived(ctx: ChannelHandlerContext, event: MessageEvent) = {
|
||||||
val message = event.getMessage
|
val message = event.getMessage
|
||||||
if (message == null) throw new IllegalStateException("Message in remote MessageEvent is null: " + event)
|
if (message eq null) throw new IllegalStateException("Message in remote MessageEvent is null: " + event)
|
||||||
if (message.isInstanceOf[RemoteRequest]) handleRemoteRequest(message.asInstanceOf[RemoteRequest], event.getChannel)
|
if (message.isInstanceOf[RemoteRequest]) handleRemoteRequest(message.asInstanceOf[RemoteRequest], event.getChannel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -240,7 +240,7 @@ class RemoteServerHandler(val name: String, val applicationLoader: Option[ClassL
|
||||||
|
|
||||||
private def createActiveObject(name: String, timeout: Long): AnyRef = {
|
private def createActiveObject(name: String, timeout: Long): AnyRef = {
|
||||||
val activeObjectOrNull = activeObjects.get(name)
|
val activeObjectOrNull = activeObjects.get(name)
|
||||||
if (activeObjectOrNull == null) {
|
if (activeObjectOrNull eq null) {
|
||||||
try {
|
try {
|
||||||
log.info("Creating a new remote active object [%s]", name)
|
log.info("Creating a new remote active object [%s]", name)
|
||||||
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
||||||
|
|
@ -259,7 +259,7 @@ class RemoteServerHandler(val name: String, val applicationLoader: Option[ClassL
|
||||||
|
|
||||||
private def createActor(name: String, timeout: Long): Actor = {
|
private def createActor(name: String, timeout: Long): Actor = {
|
||||||
val actorOrNull = actors.get(name)
|
val actorOrNull = actors.get(name)
|
||||||
if (actorOrNull == null) {
|
if (actorOrNull eq null) {
|
||||||
try {
|
try {
|
||||||
log.info("Creating a new remote actor [%s]", name)
|
log.info("Creating a new remote actor [%s]", name)
|
||||||
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name)
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ class TransactionWatcher extends Logging with Watcher {
|
||||||
zk.exists(znode, true, this, null)
|
zk.exists(znode, true, this, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chainedWatcher != null) chainedWatcher.process(event);
|
if (chainedWatcher ne null) chainedWatcher.process(event);
|
||||||
}
|
}
|
||||||
def run: Unit = synchronized {
|
def run: Unit = synchronized {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ object Serializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
def in(bytes: Array[Byte], clazz: Class[_]): AnyRef = {
|
def in(bytes: Array[Byte], clazz: Class[_]): AnyRef = {
|
||||||
if (clazz == null) throw new IllegalArgumentException("Protobuf message can't be null")
|
if (clazz eq null) throw new IllegalArgumentException("Protobuf message can't be null")
|
||||||
in(bytes, Some(clazz))
|
in(bytes, Some(clazz))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -122,7 +122,7 @@ object Serializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
def in(json: String, clazz: Class[_]): AnyRef = {
|
def in(json: String, clazz: Class[_]): AnyRef = {
|
||||||
if (clazz == null) throw new IllegalArgumentException("Can't deserialize JSON to instance if no class is provided")
|
if (clazz eq null) throw new IllegalArgumentException("Can't deserialize JSON to instance if no class is provided")
|
||||||
mapper.readValue(json, clazz).asInstanceOf[AnyRef]
|
mapper.readValue(json, clazz).asInstanceOf[AnyRef]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -278,11 +278,11 @@ private[collection] class BitmappedNode[K, +V](shift: Int)(table: Array[Node[K,
|
||||||
|
|
||||||
def elements = {
|
def elements = {
|
||||||
table.foldLeft(emptyElements) { (it, e) =>
|
table.foldLeft(emptyElements) { (it, e) =>
|
||||||
if (e == null) it else it ++ e.elements
|
if (e eq null) it else it ++ e.elements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def toString = "BitmappedNode(" + size + "," + table.filter(_ != null).toList.toString + ")"
|
override def toString = "BitmappedNode(" + size + "," + table.filter(_ ne null).toList.toString + ")"
|
||||||
|
|
||||||
private lazy val emptyElements: Iterator[(K, V)] = new Iterator[(K, V)] {
|
private lazy val emptyElements: Iterator[(K, V)] = new Iterator[(K, V)] {
|
||||||
val hasNext = false
|
val hasNext = false
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ object Transaction extends TransactionManagement {
|
||||||
// For reinitialize transaction after sending it over the wire
|
// For reinitialize transaction after sending it over the wire
|
||||||
private[akka] def reinit = synchronized {
|
private[akka] def reinit = synchronized {
|
||||||
import net.lag.logging.{Logger, Level}
|
import net.lag.logging.{Logger, Level}
|
||||||
if (log == null) {
|
if (log eq null) {
|
||||||
log = Logger.get(this.getClass.getName)
|
log = Logger.get(this.getClass.getName)
|
||||||
log.setLevel(Level.ALL) // TODO: preserve logging level
|
log.setLevel(Level.ALL) // TODO: preserve logging level
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class TransactionWatcher extends Logging with Watcher {
|
||||||
zk.exists(znode, true, this, null)
|
zk.exists(znode, true, this, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chainedWatcher != null) chainedWatcher.process(event);
|
if (chainedWatcher ne null) chainedWatcher.process(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
var (newRoot, expansion) = pushTail(shift - 5, root, tail, null)
|
var (newRoot, expansion) = pushTail(shift - 5, root, tail, null)
|
||||||
var newShift = shift
|
var newShift = shift
|
||||||
|
|
||||||
if (expansion != null) {
|
if (expansion ne null) {
|
||||||
newRoot = array(newRoot, expansion)
|
newRoot = array(newRoot, expansion)
|
||||||
newShift += 5
|
newShift += 5
|
||||||
}
|
}
|
||||||
|
|
@ -138,7 +138,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
val newChild = if (level == 0) tailNode else {
|
val newChild = if (level == 0) tailNode else {
|
||||||
val (newChild, subExpansion) = pushTail(level - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], tailNode, expansion)
|
val (newChild, subExpansion) = pushTail(level - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], tailNode, expansion)
|
||||||
|
|
||||||
if (subExpansion == null) {
|
if (subExpansion eq null) {
|
||||||
val ret = new Array[AnyRef](arr.length)
|
val ret = new Array[AnyRef](arr.length)
|
||||||
Array.copy(arr, 0, ret, 0, arr.length)
|
Array.copy(arr, 0, ret, 0, arr.length)
|
||||||
|
|
||||||
|
|
@ -177,7 +177,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
var (newRoot, pTail) = popTail(shift - 5, root, null)
|
var (newRoot, pTail) = popTail(shift - 5, root, null)
|
||||||
var newShift = shift
|
var newShift = shift
|
||||||
|
|
||||||
if (newRoot == null) {
|
if (newRoot eq null) {
|
||||||
newRoot = EmptyArray
|
newRoot = EmptyArray
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,7 +194,7 @@ class Vector[+T] private (val length: Int, shift: Int, root: Array[AnyRef], tail
|
||||||
val newPTail = if (shift > 0) {
|
val newPTail = if (shift > 0) {
|
||||||
val (newChild, subPTail) = popTail(shift - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], pTail)
|
val (newChild, subPTail) = popTail(shift - 5, arr(arr.length - 1).asInstanceOf[Array[AnyRef]], pTail)
|
||||||
|
|
||||||
if (newChild != null) {
|
if (newChild ne null) {
|
||||||
val ret = new Array[AnyRef](arr.length)
|
val ret = new Array[AnyRef](arr.length)
|
||||||
Array.copy(arr, 0, ret, 0, arr.length)
|
Array.copy(arr, 0, ret, 0, arr.length)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ object CassandraStorage extends MapStorage
|
||||||
def removeMapStorageFor(name: String): Unit = removeMapStorageFor(name, null)
|
def removeMapStorageFor(name: String): Unit = removeMapStorageFor(name, null)
|
||||||
|
|
||||||
def removeMapStorageFor(name: String, key: AnyRef): Unit = {
|
def removeMapStorageFor(name: String, key: AnyRef): Unit = {
|
||||||
val keyBytes = if (key == null) null else serializer.out(key)
|
val keyBytes = if (key eq null) null else serializer.out(key)
|
||||||
sessions.withSession {
|
sessions.withSession {
|
||||||
_ -- (name,
|
_ -- (name,
|
||||||
new ColumnPath(MAP_COLUMN_PARENT.getColumn_family, null, keyBytes),
|
new ColumnPath(MAP_COLUMN_PARENT.getColumn_family, null, keyBytes),
|
||||||
|
|
@ -424,7 +424,7 @@ case object Stop
|
||||||
|
|
||||||
private[this] val serverEngine: TThreadPoolServer = try {
|
private[this] val serverEngine: TThreadPoolServer = try {
|
||||||
val pidFile = akka.akka.config.getString("akka.storage.cassandra.thrift-server.pidfile", "akka.pid")
|
val pidFile = akka.akka.config.getString("akka.storage.cassandra.thrift-server.pidfile", "akka.pid")
|
||||||
if (pidFile != null) new File(pidFile).deleteOnExit();
|
if (pidFile ne null) new File(pidFile).deleteOnExit();
|
||||||
val listenPort = DatabaseDescriptor.getThriftPort
|
val listenPort = DatabaseDescriptor.getThriftPort
|
||||||
|
|
||||||
val processor = new Cassandra.Processor(server)
|
val processor = new Cassandra.Processor(server)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue