AkkaExceptions and constructor signatures
The AkkaExceptions normally have this signature:
class IllegalActorStateException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
The problem is that this doesn't compile to a class with 2 signatures:
IllegalActorStateException(String msg)
IllegalActorStateException(String msg, Throwable cause)
But that the defaulting is resolved on the call site.
Normally this is no problem, but with serialization of exceptions it is since a single argument constructor where the argument of type String is expected.
To fix the problem, the akka constructors need to be fixed like this:
class ActorKilledException private[akka] (message: String, cause: Throwable) extends AkkaException(message, cause){
def this(msg: String) = this(msg, null);
}
This does generate the 2 constructors expected.
If this issue is not solved, problems with netty will remain:
[JVM-Node1] 2011-07-25 10:47:54,336 [myid:] - INFO [ProcessThread(sid:0 cport:-1)::PrepRequestProcessor@408] - Got user-level KeeperException when processing sessionid:0x131604398b10004 type:create cxid:0x3b zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a Error Path:/default/actor-address-registry/service-test/uuid Error:KeeperErrorCode = NodeExists for /default/actor-address-registry/service-test/uuid
[JVM-Node1] [ERROR] [07/25/2011 10:47:54.448] [New I/O client worker #1-1] [ActiveRemoteClientHandler] akka.actor.ActorKilledException.<init>(java.lang.String)
[JVM-Node1] java.lang.NoSuchMethodException: akka.actor.ActorKilledException.<init>(java.lang.String)
[JVM-Node1] at java.lang.Class.getConstructor0(Class.java:2706)
[JVM-Node1] at java.lang.Class.getConstructor(Class.java:1657)
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.parseException(NettyRemoteSupport.scala:578)
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.messageReceived(NettyRemoteSupport.scala:506)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.handler.timeout.ReadTimeoutHandler.messageReceived(ReadTimeoutHandler.java:186)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:357)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
[JVM-Node1] at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
[JVM-Node1] at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[JVM-Node1] at java.lang.Thread.run(Thread.java:680)
[JVM-Node1]
[JVM-Node1] - must cleanup itself *** FAILED ***
[JVM-Node1] akka.remoteinterface.CannotInstantiateRemoteExceptionDueToRemoteProtocolParsingErrorException: ParsingError[java.lang.NoSuchMethodException: akka.actor.ActorKilledException.<init>(java.lang.String)]
[JVM-Node1] OriginalException[akka.actor.ActorKilledException]
[JVM-Node1] OriginalMessage[PoisonPill]
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.parseException(NettyRemoteSupport.scala:583)
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.messageReceived(NettyRemoteSupport.scala:506)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.handler.timeout.ReadTimeoutHandler.messageReceived(ReadTimeoutHandler.java:186)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:357)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
[JVM-Node1] at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
[JVM-Node1] at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[JVM-Node1] at java.lang.Thread.run(Thread.java:680)
class IllegalActorStateException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
The problem is that this doesn't compile to a class with 2 signatures:
IllegalActorStateException(String msg)
IllegalActorStateException(String msg, Throwable cause)
But that the defaulting is resolved on the call site.
Normally this is no problem, but with serialization of exceptions it is since a single argument constructor where the argument of type String is expected.
To fix the problem, the akka constructors need to be fixed like this:
class ActorKilledException private[akka] (message: String, cause: Throwable) extends AkkaException(message, cause){
def this(msg: String) = this(msg, null);
}
This does generate the 2 constructors expected.
If this issue is not solved, problems with netty will remain:
[JVM-Node1] 2011-07-25 10:47:54,336 [myid:] - INFO [ProcessThread(sid:0 cport:-1)::PrepRequestProcessor@408] - Got user-level KeeperException when processing sessionid:0x131604398b10004 type:create cxid:0x3b zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a Error Path:/default/actor-address-registry/service-test/uuid Error:KeeperErrorCode = NodeExists for /default/actor-address-registry/service-test/uuid
[JVM-Node1] [ERROR] [07/25/2011 10:47:54.448] [New I/O client worker #1-1] [ActiveRemoteClientHandler] akka.actor.ActorKilledException.<init>(java.lang.String)
[JVM-Node1] java.lang.NoSuchMethodException: akka.actor.ActorKilledException.<init>(java.lang.String)
[JVM-Node1] at java.lang.Class.getConstructor0(Class.java:2706)
[JVM-Node1] at java.lang.Class.getConstructor(Class.java:1657)
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.parseException(NettyRemoteSupport.scala:578)
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.messageReceived(NettyRemoteSupport.scala:506)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.handler.timeout.ReadTimeoutHandler.messageReceived(ReadTimeoutHandler.java:186)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:357)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
[JVM-Node1] at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
[JVM-Node1] at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[JVM-Node1] at java.lang.Thread.run(Thread.java:680)
[JVM-Node1]
[JVM-Node1] - must cleanup itself *** FAILED ***
[JVM-Node1] akka.remoteinterface.CannotInstantiateRemoteExceptionDueToRemoteProtocolParsingErrorException: ParsingError[java.lang.NoSuchMethodException: akka.actor.ActorKilledException.<init>(java.lang.String)]
[JVM-Node1] OriginalException[akka.actor.ActorKilledException]
[JVM-Node1] OriginalMessage[PoisonPill]
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.parseException(NettyRemoteSupport.scala:583)
[JVM-Node1] at akka.remote.netty.ActiveRemoteClientHandler.messageReceived(NettyRemoteSupport.scala:506)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299)
[JVM-Node1] at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
[JVM-Node1] at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:514)
[JVM-Node1] at org.jboss.netty.handler.timeout.ReadTimeoutHandler.messageReceived(ReadTimeoutHandler.java:186)
[JVM-Node1] at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:362)
[JVM-Node1] at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:357)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
[JVM-Node1] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
[JVM-Node1] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
[JVM-Node1] at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
[JVM-Node1] at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[JVM-Node1] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[JVM-Node1] at java.lang.Thread.run(Thread.java:680)
Leave a comment
on 2011-07-25 05:01 *
By pveentjer
Assigned to changed from pveentjer to viktorklang
Status changed from New to Test
on 2011-07-28 09:22 *
By viktorklang
Assigned to changed from viktorklang to pveentjer
Status changed from Test to Fixed
Work remaining changed from 3.0 to 0.0