adds serializer for akka.Done. #23854

(cherry picked from commit 53a543788494d7b6457f129b1ad4ff57ff530584)
This commit is contained in:
Elijah Rippeth 2017-11-01 19:22:09 -04:00 committed by Patrik Nordwall
parent 74b5866f60
commit 2837ebba6e
5 changed files with 27 additions and 4 deletions

View file

@ -3,12 +3,15 @@
*/
package akka
import java.io.Serializable
import akka.annotation.DoNotInherit
/**
* Typically used together with `Future` to signal completion
* but there is no actual value completed. More clearly signals intent
* than `Unit` and is available both from Scala and Java (which `Unit` is not).
*/
sealed abstract class Done
@DoNotInherit sealed abstract class Done extends Serializable
case object Done extends Done {
/**

View file

@ -41,11 +41,16 @@ depending on the akka-remote module), so normally you don't need to add
configuration for that; since `com.google.protobuf.GeneratedMessage`
implements `java.io.Serializable`, protobuf messages will always be
serialized using the protobuf protocol unless specifically overridden. In order
to disable a default serializer, map its marker type to “none”:
to disable a default serializer, see @ref:[Disabling the Java Serializer](remoting.md#disable-java-serializer)
### Enable additional bindings
`akka.Done` is by default serialized by the Java serializer, add the following binding to avoid that.
It's not enabled by default for compatibility reasons.
```
akka.actor.serialization-bindings {
"java.io.Serializable" = none
"akka.Done" = akka-misc
}
```
@ -251,4 +256,4 @@ incompatibility as Java serialization does.
[Akka-kryo by Roman Levenstein](https://github.com/romix/akka-kryo-serialization)
[Twitter Chill Scala extensions for Kryo (based on Akka Version 2.3.x but due to backwards compatibility of the Serializer Interface this extension also works with 2.4.x)](https://github.com/twitter/chill)
[Twitter Chill Scala extensions for Kryo (based on Akka Version 2.3.x but due to backwards compatibility of the Serializer Interface this extension also works with 2.4.x)](https://github.com/twitter/chill)

View file

@ -49,6 +49,12 @@ akka {
"com.google.protobuf.GeneratedMessage" = proto
"java.util.Optional" = akka-misc
# akka.Done is handled by the MiscMessageSerializer, but it is not enabled for
# compatibility reasons (it was added in Akka 2.5.8). Enable by adding
# akka.actor.serialization-bindings {
# "akka.Done" = akka-misc
# }
}
# Additional serialization-bindings that are replacing Java serialization are

View file

@ -8,6 +8,7 @@ import java.nio.charset.StandardCharsets
import java.util.Optional
import java.util.concurrent.TimeUnit
import akka.Done
import akka.actor._
import akka.dispatch.Dispatchers
import akka.remote.routing.RemoteRouterConfig
@ -43,6 +44,7 @@ class MiscMessageSerializer(val system: ExtendedActorSystem) extends SerializerW
case PoisonPill ParameterlessSerializedMessage
case Kill ParameterlessSerializedMessage
case RemoteWatcher.Heartbeat ParameterlessSerializedMessage
case Done ParameterlessSerializedMessage
case hbrsp: RemoteWatcher.HeartbeatRsp serializeHeartbeatRsp(hbrsp)
case rs: RemoteScope serializeRemoteScope(rs)
case LocalScope ParameterlessSerializedMessage
@ -253,6 +255,7 @@ class MiscMessageSerializer(val system: ExtendedActorSystem) extends SerializerW
private val PoisonPillManifest = "P"
private val KillManifest = "K"
private val RemoteWatcherHBManifest = "RWHB"
private val DoneManifest = "DONE"
private val RemoteWatcherHBRespManifest = "RWHR"
private val ActorInitializationExceptionManifest = "AIEX"
private val LocalScopeManifest = "LS"
@ -281,6 +284,7 @@ class MiscMessageSerializer(val system: ExtendedActorSystem) extends SerializerW
PoisonPillManifest ((_) PoisonPill),
KillManifest ((_) Kill),
RemoteWatcherHBManifest ((_) RemoteWatcher.Heartbeat),
DoneManifest ((_) Done),
RemoteWatcherHBRespManifest deserializeHeartbeatRsp,
ActorInitializationExceptionManifest deserializeActorInitializationException,
LocalScopeManifest ((_) LocalScope),
@ -311,6 +315,7 @@ class MiscMessageSerializer(val system: ExtendedActorSystem) extends SerializerW
case PoisonPill PoisonPillManifest
case Kill KillManifest
case RemoteWatcher.Heartbeat RemoteWatcherHBManifest
case Done DoneManifest
case _: RemoteWatcher.HeartbeatRsp RemoteWatcherHBRespManifest
case LocalScope LocalScopeManifest
case _: RemoteScope RemoteScopeManifest

View file

@ -15,6 +15,7 @@ import scala.concurrent.duration._
import java.util.Optional
import java.io.NotSerializableException
import akka.Done
import akka.remote.routing.RemoteRouterConfig
import akka.routing._
@ -23,6 +24,8 @@ object MiscMessageSerializerSpec {
"""
akka.actor.serialization-bindings {
"akka.remote.serialization.MiscMessageSerializerSpec$TestException" = akka-misc
# not enabled by default
"akka.Done" = akka-misc
}
"""
@ -85,6 +88,7 @@ class MiscMessageSerializerSpec extends AkkaSpec(MiscMessageSerializerSpec.testC
"PoisonPill" PoisonPill,
"RemoteWatcher.Heartbeat" RemoteWatcher.Heartbeat,
"RemoteWatcher.HertbeatRsp" RemoteWatcher.HeartbeatRsp(65537),
"Done" Done,
"LocalScope" LocalScope,
"RemoteScope" RemoteScope(Address("akka", "system", "localhost", 2525)),
"Config" system.settings.config,