Optimize remote serialization for the create from class case. See #1755
* Added FromClassCreator as special Function0 to be able to serialize class name as protobuf string
This commit is contained in:
parent
793af8b4ec
commit
31ace9e83f
5 changed files with 278 additions and 160 deletions
|
|
@ -127,7 +127,7 @@ case class Props(
|
||||||
* Java API.
|
* Java API.
|
||||||
*/
|
*/
|
||||||
def this(actorClass: Class[_ <: Actor]) = this(
|
def this(actorClass: Class[_ <: Actor]) = this(
|
||||||
creator = () ⇒ actorClass.newInstance,
|
creator = FromClassCreator(actorClass),
|
||||||
dispatcher = Dispatchers.DefaultDispatcherId,
|
dispatcher = Dispatchers.DefaultDispatcherId,
|
||||||
routerConfig = Props.defaultRoutedProps)
|
routerConfig = Props.defaultRoutedProps)
|
||||||
|
|
||||||
|
|
@ -150,7 +150,7 @@ case class Props(
|
||||||
*
|
*
|
||||||
* Java API.
|
* Java API.
|
||||||
*/
|
*/
|
||||||
def withCreator(c: Class[_ <: Actor]): Props = copy(creator = () ⇒ c.newInstance)
|
def withCreator(c: Class[_ <: Actor]): Props = copy(creator = FromClassCreator(c))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a new Props with the specified dispatcher set.
|
* Returns a new Props with the specified dispatcher set.
|
||||||
|
|
@ -166,4 +166,13 @@ case class Props(
|
||||||
* Returns a new Props with the specified deployment configuration.
|
* Returns a new Props with the specified deployment configuration.
|
||||||
*/
|
*/
|
||||||
def withDeploy(d: Deploy): Props = copy(deploy = d)
|
def withDeploy(d: Deploy): Props = copy(deploy = d)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used when creating an Actor from a class. Special Function0 to be
|
||||||
|
* able to optimize serialization.
|
||||||
|
*/
|
||||||
|
private[akka] case class FromClassCreator(clazz: Class[_ <: Actor]) extends Function0[Actor] {
|
||||||
|
def apply(): Actor = clazz.newInstance
|
||||||
}
|
}
|
||||||
|
|
@ -5035,20 +5035,24 @@ public final class RemoteProtocol {
|
||||||
public interface PropsProtocolOrBuilder
|
public interface PropsProtocolOrBuilder
|
||||||
extends com.google.protobuf.MessageOrBuilder {
|
extends com.google.protobuf.MessageOrBuilder {
|
||||||
|
|
||||||
// required bytes creator = 1;
|
// required string dispatcher = 1;
|
||||||
boolean hasCreator();
|
|
||||||
com.google.protobuf.ByteString getCreator();
|
|
||||||
|
|
||||||
// required string dispatcher = 2;
|
|
||||||
boolean hasDispatcher();
|
boolean hasDispatcher();
|
||||||
String getDispatcher();
|
String getDispatcher();
|
||||||
|
|
||||||
// required .DeployProtocol deploy = 3;
|
// required .DeployProtocol deploy = 2;
|
||||||
boolean hasDeploy();
|
boolean hasDeploy();
|
||||||
akka.remote.RemoteProtocol.DeployProtocol getDeploy();
|
akka.remote.RemoteProtocol.DeployProtocol getDeploy();
|
||||||
akka.remote.RemoteProtocol.DeployProtocolOrBuilder getDeployOrBuilder();
|
akka.remote.RemoteProtocol.DeployProtocolOrBuilder getDeployOrBuilder();
|
||||||
|
|
||||||
// optional bytes routerConfig = 4;
|
// optional string fromClassCreator = 3;
|
||||||
|
boolean hasFromClassCreator();
|
||||||
|
String getFromClassCreator();
|
||||||
|
|
||||||
|
// optional bytes creator = 4;
|
||||||
|
boolean hasCreator();
|
||||||
|
com.google.protobuf.ByteString getCreator();
|
||||||
|
|
||||||
|
// optional bytes routerConfig = 5;
|
||||||
boolean hasRouterConfig();
|
boolean hasRouterConfig();
|
||||||
com.google.protobuf.ByteString getRouterConfig();
|
com.google.protobuf.ByteString getRouterConfig();
|
||||||
}
|
}
|
||||||
|
|
@ -5081,21 +5085,11 @@ public final class RemoteProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int bitField0_;
|
private int bitField0_;
|
||||||
// required bytes creator = 1;
|
// required string dispatcher = 1;
|
||||||
public static final int CREATOR_FIELD_NUMBER = 1;
|
public static final int DISPATCHER_FIELD_NUMBER = 1;
|
||||||
private com.google.protobuf.ByteString creator_;
|
|
||||||
public boolean hasCreator() {
|
|
||||||
return ((bitField0_ & 0x00000001) == 0x00000001);
|
|
||||||
}
|
|
||||||
public com.google.protobuf.ByteString getCreator() {
|
|
||||||
return creator_;
|
|
||||||
}
|
|
||||||
|
|
||||||
// required string dispatcher = 2;
|
|
||||||
public static final int DISPATCHER_FIELD_NUMBER = 2;
|
|
||||||
private java.lang.Object dispatcher_;
|
private java.lang.Object dispatcher_;
|
||||||
public boolean hasDispatcher() {
|
public boolean hasDispatcher() {
|
||||||
return ((bitField0_ & 0x00000002) == 0x00000002);
|
return ((bitField0_ & 0x00000001) == 0x00000001);
|
||||||
}
|
}
|
||||||
public String getDispatcher() {
|
public String getDispatcher() {
|
||||||
java.lang.Object ref = dispatcher_;
|
java.lang.Object ref = dispatcher_;
|
||||||
|
|
@ -5123,11 +5117,11 @@ public final class RemoteProtocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// required .DeployProtocol deploy = 3;
|
// required .DeployProtocol deploy = 2;
|
||||||
public static final int DEPLOY_FIELD_NUMBER = 3;
|
public static final int DEPLOY_FIELD_NUMBER = 2;
|
||||||
private akka.remote.RemoteProtocol.DeployProtocol deploy_;
|
private akka.remote.RemoteProtocol.DeployProtocol deploy_;
|
||||||
public boolean hasDeploy() {
|
public boolean hasDeploy() {
|
||||||
return ((bitField0_ & 0x00000004) == 0x00000004);
|
return ((bitField0_ & 0x00000002) == 0x00000002);
|
||||||
}
|
}
|
||||||
public akka.remote.RemoteProtocol.DeployProtocol getDeploy() {
|
public akka.remote.RemoteProtocol.DeployProtocol getDeploy() {
|
||||||
return deploy_;
|
return deploy_;
|
||||||
|
|
@ -5136,20 +5130,63 @@ public final class RemoteProtocol {
|
||||||
return deploy_;
|
return deploy_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bytes routerConfig = 4;
|
// optional string fromClassCreator = 3;
|
||||||
public static final int ROUTERCONFIG_FIELD_NUMBER = 4;
|
public static final int FROMCLASSCREATOR_FIELD_NUMBER = 3;
|
||||||
|
private java.lang.Object fromClassCreator_;
|
||||||
|
public boolean hasFromClassCreator() {
|
||||||
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
|
}
|
||||||
|
public String getFromClassCreator() {
|
||||||
|
java.lang.Object ref = fromClassCreator_;
|
||||||
|
if (ref instanceof String) {
|
||||||
|
return (String) ref;
|
||||||
|
} else {
|
||||||
|
com.google.protobuf.ByteString bs =
|
||||||
|
(com.google.protobuf.ByteString) ref;
|
||||||
|
String s = bs.toStringUtf8();
|
||||||
|
if (com.google.protobuf.Internal.isValidUtf8(bs)) {
|
||||||
|
fromClassCreator_ = s;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private com.google.protobuf.ByteString getFromClassCreatorBytes() {
|
||||||
|
java.lang.Object ref = fromClassCreator_;
|
||||||
|
if (ref instanceof String) {
|
||||||
|
com.google.protobuf.ByteString b =
|
||||||
|
com.google.protobuf.ByteString.copyFromUtf8((String) ref);
|
||||||
|
fromClassCreator_ = b;
|
||||||
|
return b;
|
||||||
|
} else {
|
||||||
|
return (com.google.protobuf.ByteString) ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional bytes creator = 4;
|
||||||
|
public static final int CREATOR_FIELD_NUMBER = 4;
|
||||||
|
private com.google.protobuf.ByteString creator_;
|
||||||
|
public boolean hasCreator() {
|
||||||
|
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||||
|
}
|
||||||
|
public com.google.protobuf.ByteString getCreator() {
|
||||||
|
return creator_;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional bytes routerConfig = 5;
|
||||||
|
public static final int ROUTERCONFIG_FIELD_NUMBER = 5;
|
||||||
private com.google.protobuf.ByteString routerConfig_;
|
private com.google.protobuf.ByteString routerConfig_;
|
||||||
public boolean hasRouterConfig() {
|
public boolean hasRouterConfig() {
|
||||||
return ((bitField0_ & 0x00000008) == 0x00000008);
|
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||||
}
|
}
|
||||||
public com.google.protobuf.ByteString getRouterConfig() {
|
public com.google.protobuf.ByteString getRouterConfig() {
|
||||||
return routerConfig_;
|
return routerConfig_;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
creator_ = com.google.protobuf.ByteString.EMPTY;
|
|
||||||
dispatcher_ = "";
|
dispatcher_ = "";
|
||||||
deploy_ = akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance();
|
deploy_ = akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance();
|
||||||
|
fromClassCreator_ = "";
|
||||||
|
creator_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
routerConfig_ = com.google.protobuf.ByteString.EMPTY;
|
routerConfig_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
|
|
@ -5157,10 +5194,6 @@ public final class RemoteProtocol {
|
||||||
byte isInitialized = memoizedIsInitialized;
|
byte isInitialized = memoizedIsInitialized;
|
||||||
if (isInitialized != -1) return isInitialized == 1;
|
if (isInitialized != -1) return isInitialized == 1;
|
||||||
|
|
||||||
if (!hasCreator()) {
|
|
||||||
memoizedIsInitialized = 0;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!hasDispatcher()) {
|
if (!hasDispatcher()) {
|
||||||
memoizedIsInitialized = 0;
|
memoizedIsInitialized = 0;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -5181,16 +5214,19 @@ public final class RemoteProtocol {
|
||||||
throws java.io.IOException {
|
throws java.io.IOException {
|
||||||
getSerializedSize();
|
getSerializedSize();
|
||||||
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
output.writeBytes(1, creator_);
|
output.writeBytes(1, getDispatcherBytes());
|
||||||
}
|
}
|
||||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
output.writeBytes(2, getDispatcherBytes());
|
output.writeMessage(2, deploy_);
|
||||||
}
|
}
|
||||||
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
output.writeMessage(3, deploy_);
|
output.writeBytes(3, getFromClassCreatorBytes());
|
||||||
}
|
}
|
||||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
output.writeBytes(4, routerConfig_);
|
output.writeBytes(4, creator_);
|
||||||
|
}
|
||||||
|
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
output.writeBytes(5, routerConfig_);
|
||||||
}
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
@ -5203,19 +5239,23 @@ public final class RemoteProtocol {
|
||||||
size = 0;
|
size = 0;
|
||||||
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBytesSize(1, creator_);
|
.computeBytesSize(1, getDispatcherBytes());
|
||||||
}
|
}
|
||||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBytesSize(2, getDispatcherBytes());
|
.computeMessageSize(2, deploy_);
|
||||||
}
|
}
|
||||||
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeMessageSize(3, deploy_);
|
.computeBytesSize(3, getFromClassCreatorBytes());
|
||||||
}
|
}
|
||||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBytesSize(4, routerConfig_);
|
.computeBytesSize(4, creator_);
|
||||||
|
}
|
||||||
|
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeBytesSize(5, routerConfig_);
|
||||||
}
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
|
|
@ -5342,18 +5382,20 @@ public final class RemoteProtocol {
|
||||||
|
|
||||||
public Builder clear() {
|
public Builder clear() {
|
||||||
super.clear();
|
super.clear();
|
||||||
creator_ = com.google.protobuf.ByteString.EMPTY;
|
|
||||||
bitField0_ = (bitField0_ & ~0x00000001);
|
|
||||||
dispatcher_ = "";
|
dispatcher_ = "";
|
||||||
bitField0_ = (bitField0_ & ~0x00000002);
|
bitField0_ = (bitField0_ & ~0x00000001);
|
||||||
if (deployBuilder_ == null) {
|
if (deployBuilder_ == null) {
|
||||||
deploy_ = akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance();
|
deploy_ = akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance();
|
||||||
} else {
|
} else {
|
||||||
deployBuilder_.clear();
|
deployBuilder_.clear();
|
||||||
}
|
}
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000002);
|
||||||
|
fromClassCreator_ = "";
|
||||||
bitField0_ = (bitField0_ & ~0x00000004);
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
routerConfig_ = com.google.protobuf.ByteString.EMPTY;
|
creator_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
bitField0_ = (bitField0_ & ~0x00000008);
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
|
routerConfig_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5395,22 +5437,26 @@ public final class RemoteProtocol {
|
||||||
if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
|
if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
to_bitField0_ |= 0x00000001;
|
to_bitField0_ |= 0x00000001;
|
||||||
}
|
}
|
||||||
result.creator_ = creator_;
|
result.dispatcher_ = dispatcher_;
|
||||||
if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
|
if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
to_bitField0_ |= 0x00000002;
|
to_bitField0_ |= 0x00000002;
|
||||||
}
|
}
|
||||||
result.dispatcher_ = dispatcher_;
|
|
||||||
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
|
|
||||||
to_bitField0_ |= 0x00000004;
|
|
||||||
}
|
|
||||||
if (deployBuilder_ == null) {
|
if (deployBuilder_ == null) {
|
||||||
result.deploy_ = deploy_;
|
result.deploy_ = deploy_;
|
||||||
} else {
|
} else {
|
||||||
result.deploy_ = deployBuilder_.build();
|
result.deploy_ = deployBuilder_.build();
|
||||||
}
|
}
|
||||||
|
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
to_bitField0_ |= 0x00000004;
|
||||||
|
}
|
||||||
|
result.fromClassCreator_ = fromClassCreator_;
|
||||||
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
to_bitField0_ |= 0x00000008;
|
to_bitField0_ |= 0x00000008;
|
||||||
}
|
}
|
||||||
|
result.creator_ = creator_;
|
||||||
|
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
to_bitField0_ |= 0x00000010;
|
||||||
|
}
|
||||||
result.routerConfig_ = routerConfig_;
|
result.routerConfig_ = routerConfig_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
|
|
@ -5428,15 +5474,18 @@ public final class RemoteProtocol {
|
||||||
|
|
||||||
public Builder mergeFrom(akka.remote.RemoteProtocol.PropsProtocol other) {
|
public Builder mergeFrom(akka.remote.RemoteProtocol.PropsProtocol other) {
|
||||||
if (other == akka.remote.RemoteProtocol.PropsProtocol.getDefaultInstance()) return this;
|
if (other == akka.remote.RemoteProtocol.PropsProtocol.getDefaultInstance()) return this;
|
||||||
if (other.hasCreator()) {
|
|
||||||
setCreator(other.getCreator());
|
|
||||||
}
|
|
||||||
if (other.hasDispatcher()) {
|
if (other.hasDispatcher()) {
|
||||||
setDispatcher(other.getDispatcher());
|
setDispatcher(other.getDispatcher());
|
||||||
}
|
}
|
||||||
if (other.hasDeploy()) {
|
if (other.hasDeploy()) {
|
||||||
mergeDeploy(other.getDeploy());
|
mergeDeploy(other.getDeploy());
|
||||||
}
|
}
|
||||||
|
if (other.hasFromClassCreator()) {
|
||||||
|
setFromClassCreator(other.getFromClassCreator());
|
||||||
|
}
|
||||||
|
if (other.hasCreator()) {
|
||||||
|
setCreator(other.getCreator());
|
||||||
|
}
|
||||||
if (other.hasRouterConfig()) {
|
if (other.hasRouterConfig()) {
|
||||||
setRouterConfig(other.getRouterConfig());
|
setRouterConfig(other.getRouterConfig());
|
||||||
}
|
}
|
||||||
|
|
@ -5445,10 +5494,6 @@ public final class RemoteProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
if (!hasCreator()) {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!hasDispatcher()) {
|
if (!hasDispatcher()) {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -5489,15 +5534,10 @@ public final class RemoteProtocol {
|
||||||
}
|
}
|
||||||
case 10: {
|
case 10: {
|
||||||
bitField0_ |= 0x00000001;
|
bitField0_ |= 0x00000001;
|
||||||
creator_ = input.readBytes();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 18: {
|
|
||||||
bitField0_ |= 0x00000002;
|
|
||||||
dispatcher_ = input.readBytes();
|
dispatcher_ = input.readBytes();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 26: {
|
case 18: {
|
||||||
akka.remote.RemoteProtocol.DeployProtocol.Builder subBuilder = akka.remote.RemoteProtocol.DeployProtocol.newBuilder();
|
akka.remote.RemoteProtocol.DeployProtocol.Builder subBuilder = akka.remote.RemoteProtocol.DeployProtocol.newBuilder();
|
||||||
if (hasDeploy()) {
|
if (hasDeploy()) {
|
||||||
subBuilder.mergeFrom(getDeploy());
|
subBuilder.mergeFrom(getDeploy());
|
||||||
|
|
@ -5506,8 +5546,18 @@ public final class RemoteProtocol {
|
||||||
setDeploy(subBuilder.buildPartial());
|
setDeploy(subBuilder.buildPartial());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 26: {
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
fromClassCreator_ = input.readBytes();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 34: {
|
case 34: {
|
||||||
bitField0_ |= 0x00000008;
|
bitField0_ |= 0x00000008;
|
||||||
|
creator_ = input.readBytes();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 42: {
|
||||||
|
bitField0_ |= 0x00000010;
|
||||||
routerConfig_ = input.readBytes();
|
routerConfig_ = input.readBytes();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -5517,34 +5567,10 @@ public final class RemoteProtocol {
|
||||||
|
|
||||||
private int bitField0_;
|
private int bitField0_;
|
||||||
|
|
||||||
// required bytes creator = 1;
|
// required string dispatcher = 1;
|
||||||
private com.google.protobuf.ByteString creator_ = com.google.protobuf.ByteString.EMPTY;
|
|
||||||
public boolean hasCreator() {
|
|
||||||
return ((bitField0_ & 0x00000001) == 0x00000001);
|
|
||||||
}
|
|
||||||
public com.google.protobuf.ByteString getCreator() {
|
|
||||||
return creator_;
|
|
||||||
}
|
|
||||||
public Builder setCreator(com.google.protobuf.ByteString value) {
|
|
||||||
if (value == null) {
|
|
||||||
throw new NullPointerException();
|
|
||||||
}
|
|
||||||
bitField0_ |= 0x00000001;
|
|
||||||
creator_ = value;
|
|
||||||
onChanged();
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
public Builder clearCreator() {
|
|
||||||
bitField0_ = (bitField0_ & ~0x00000001);
|
|
||||||
creator_ = getDefaultInstance().getCreator();
|
|
||||||
onChanged();
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// required string dispatcher = 2;
|
|
||||||
private java.lang.Object dispatcher_ = "";
|
private java.lang.Object dispatcher_ = "";
|
||||||
public boolean hasDispatcher() {
|
public boolean hasDispatcher() {
|
||||||
return ((bitField0_ & 0x00000002) == 0x00000002);
|
return ((bitField0_ & 0x00000001) == 0x00000001);
|
||||||
}
|
}
|
||||||
public String getDispatcher() {
|
public String getDispatcher() {
|
||||||
java.lang.Object ref = dispatcher_;
|
java.lang.Object ref = dispatcher_;
|
||||||
|
|
@ -5560,29 +5586,29 @@ public final class RemoteProtocol {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
bitField0_ |= 0x00000002;
|
bitField0_ |= 0x00000001;
|
||||||
dispatcher_ = value;
|
dispatcher_ = value;
|
||||||
onChanged();
|
onChanged();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Builder clearDispatcher() {
|
public Builder clearDispatcher() {
|
||||||
bitField0_ = (bitField0_ & ~0x00000002);
|
bitField0_ = (bitField0_ & ~0x00000001);
|
||||||
dispatcher_ = getDefaultInstance().getDispatcher();
|
dispatcher_ = getDefaultInstance().getDispatcher();
|
||||||
onChanged();
|
onChanged();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
void setDispatcher(com.google.protobuf.ByteString value) {
|
void setDispatcher(com.google.protobuf.ByteString value) {
|
||||||
bitField0_ |= 0x00000002;
|
bitField0_ |= 0x00000001;
|
||||||
dispatcher_ = value;
|
dispatcher_ = value;
|
||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
// required .DeployProtocol deploy = 3;
|
// required .DeployProtocol deploy = 2;
|
||||||
private akka.remote.RemoteProtocol.DeployProtocol deploy_ = akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance();
|
private akka.remote.RemoteProtocol.DeployProtocol deploy_ = akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance();
|
||||||
private com.google.protobuf.SingleFieldBuilder<
|
private com.google.protobuf.SingleFieldBuilder<
|
||||||
akka.remote.RemoteProtocol.DeployProtocol, akka.remote.RemoteProtocol.DeployProtocol.Builder, akka.remote.RemoteProtocol.DeployProtocolOrBuilder> deployBuilder_;
|
akka.remote.RemoteProtocol.DeployProtocol, akka.remote.RemoteProtocol.DeployProtocol.Builder, akka.remote.RemoteProtocol.DeployProtocolOrBuilder> deployBuilder_;
|
||||||
public boolean hasDeploy() {
|
public boolean hasDeploy() {
|
||||||
return ((bitField0_ & 0x00000004) == 0x00000004);
|
return ((bitField0_ & 0x00000002) == 0x00000002);
|
||||||
}
|
}
|
||||||
public akka.remote.RemoteProtocol.DeployProtocol getDeploy() {
|
public akka.remote.RemoteProtocol.DeployProtocol getDeploy() {
|
||||||
if (deployBuilder_ == null) {
|
if (deployBuilder_ == null) {
|
||||||
|
|
@ -5601,7 +5627,7 @@ public final class RemoteProtocol {
|
||||||
} else {
|
} else {
|
||||||
deployBuilder_.setMessage(value);
|
deployBuilder_.setMessage(value);
|
||||||
}
|
}
|
||||||
bitField0_ |= 0x00000004;
|
bitField0_ |= 0x00000002;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Builder setDeploy(
|
public Builder setDeploy(
|
||||||
|
|
@ -5612,12 +5638,12 @@ public final class RemoteProtocol {
|
||||||
} else {
|
} else {
|
||||||
deployBuilder_.setMessage(builderForValue.build());
|
deployBuilder_.setMessage(builderForValue.build());
|
||||||
}
|
}
|
||||||
bitField0_ |= 0x00000004;
|
bitField0_ |= 0x00000002;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Builder mergeDeploy(akka.remote.RemoteProtocol.DeployProtocol value) {
|
public Builder mergeDeploy(akka.remote.RemoteProtocol.DeployProtocol value) {
|
||||||
if (deployBuilder_ == null) {
|
if (deployBuilder_ == null) {
|
||||||
if (((bitField0_ & 0x00000004) == 0x00000004) &&
|
if (((bitField0_ & 0x00000002) == 0x00000002) &&
|
||||||
deploy_ != akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance()) {
|
deploy_ != akka.remote.RemoteProtocol.DeployProtocol.getDefaultInstance()) {
|
||||||
deploy_ =
|
deploy_ =
|
||||||
akka.remote.RemoteProtocol.DeployProtocol.newBuilder(deploy_).mergeFrom(value).buildPartial();
|
akka.remote.RemoteProtocol.DeployProtocol.newBuilder(deploy_).mergeFrom(value).buildPartial();
|
||||||
|
|
@ -5628,7 +5654,7 @@ public final class RemoteProtocol {
|
||||||
} else {
|
} else {
|
||||||
deployBuilder_.mergeFrom(value);
|
deployBuilder_.mergeFrom(value);
|
||||||
}
|
}
|
||||||
bitField0_ |= 0x00000004;
|
bitField0_ |= 0x00000002;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Builder clearDeploy() {
|
public Builder clearDeploy() {
|
||||||
|
|
@ -5638,11 +5664,11 @@ public final class RemoteProtocol {
|
||||||
} else {
|
} else {
|
||||||
deployBuilder_.clear();
|
deployBuilder_.clear();
|
||||||
}
|
}
|
||||||
bitField0_ = (bitField0_ & ~0x00000004);
|
bitField0_ = (bitField0_ & ~0x00000002);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public akka.remote.RemoteProtocol.DeployProtocol.Builder getDeployBuilder() {
|
public akka.remote.RemoteProtocol.DeployProtocol.Builder getDeployBuilder() {
|
||||||
bitField0_ |= 0x00000004;
|
bitField0_ |= 0x00000002;
|
||||||
onChanged();
|
onChanged();
|
||||||
return getDeployFieldBuilder().getBuilder();
|
return getDeployFieldBuilder().getBuilder();
|
||||||
}
|
}
|
||||||
|
|
@ -5667,10 +5693,70 @@ public final class RemoteProtocol {
|
||||||
return deployBuilder_;
|
return deployBuilder_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bytes routerConfig = 4;
|
// optional string fromClassCreator = 3;
|
||||||
|
private java.lang.Object fromClassCreator_ = "";
|
||||||
|
public boolean hasFromClassCreator() {
|
||||||
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
|
}
|
||||||
|
public String getFromClassCreator() {
|
||||||
|
java.lang.Object ref = fromClassCreator_;
|
||||||
|
if (!(ref instanceof String)) {
|
||||||
|
String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
|
||||||
|
fromClassCreator_ = s;
|
||||||
|
return s;
|
||||||
|
} else {
|
||||||
|
return (String) ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Builder setFromClassCreator(String value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
fromClassCreator_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder clearFromClassCreator() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
|
fromClassCreator_ = getDefaultInstance().getFromClassCreator();
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
void setFromClassCreator(com.google.protobuf.ByteString value) {
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
fromClassCreator_ = value;
|
||||||
|
onChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional bytes creator = 4;
|
||||||
|
private com.google.protobuf.ByteString creator_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
|
public boolean hasCreator() {
|
||||||
|
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||||
|
}
|
||||||
|
public com.google.protobuf.ByteString getCreator() {
|
||||||
|
return creator_;
|
||||||
|
}
|
||||||
|
public Builder setCreator(com.google.protobuf.ByteString value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000008;
|
||||||
|
creator_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder clearCreator() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
|
creator_ = getDefaultInstance().getCreator();
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional bytes routerConfig = 5;
|
||||||
private com.google.protobuf.ByteString routerConfig_ = com.google.protobuf.ByteString.EMPTY;
|
private com.google.protobuf.ByteString routerConfig_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
public boolean hasRouterConfig() {
|
public boolean hasRouterConfig() {
|
||||||
return ((bitField0_ & 0x00000008) == 0x00000008);
|
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||||
}
|
}
|
||||||
public com.google.protobuf.ByteString getRouterConfig() {
|
public com.google.protobuf.ByteString getRouterConfig() {
|
||||||
return routerConfig_;
|
return routerConfig_;
|
||||||
|
|
@ -5679,13 +5765,13 @@ public final class RemoteProtocol {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
bitField0_ |= 0x00000008;
|
bitField0_ |= 0x00000010;
|
||||||
routerConfig_ = value;
|
routerConfig_ = value;
|
||||||
onChanged();
|
onChanged();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Builder clearRouterConfig() {
|
public Builder clearRouterConfig() {
|
||||||
bitField0_ = (bitField0_ & ~0x00000008);
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
routerConfig_ = getDefaultInstance().getRouterConfig();
|
routerConfig_ = getDefaultInstance().getRouterConfig();
|
||||||
onChanged();
|
onChanged();
|
||||||
return this;
|
return this;
|
||||||
|
|
@ -6947,17 +7033,17 @@ public final class RemoteProtocol {
|
||||||
"\014\n\004port\030\003 \002(\r\"\216\001\n\027DaemonMsgCreateProtoco" +
|
"\014\n\004port\030\003 \002(\r\"\216\001\n\027DaemonMsgCreateProtoco" +
|
||||||
"l\022\035\n\005props\030\001 \002(\0132\016.PropsProtocol\022\037\n\006depl" +
|
"l\022\035\n\005props\030\001 \002(\0132\016.PropsProtocol\022\037\n\006depl" +
|
||||||
"oy\030\002 \002(\0132\017.DeployProtocol\022\014\n\004path\030\003 \002(\t\022" +
|
"oy\030\002 \002(\0132\017.DeployProtocol\022\014\n\004path\030\003 \002(\t\022" +
|
||||||
"%\n\nsupervisor\030\004 \002(\0132\021.ActorRefProtocol\"k",
|
"%\n\nsupervisor\030\004 \002(\0132\021.ActorRefProtocol\"\205",
|
||||||
"\n\rPropsProtocol\022\017\n\007creator\030\001 \002(\014\022\022\n\ndisp" +
|
"\001\n\rPropsProtocol\022\022\n\ndispatcher\030\001 \002(\t\022\037\n\006" +
|
||||||
"atcher\030\002 \002(\t\022\037\n\006deploy\030\003 \002(\0132\017.DeployPro" +
|
"deploy\030\002 \002(\0132\017.DeployProtocol\022\030\n\020fromCla" +
|
||||||
"tocol\022\024\n\014routerConfig\030\004 \001(\014\"S\n\016DeployPro" +
|
"ssCreator\030\003 \001(\t\022\017\n\007creator\030\004 \001(\014\022\024\n\014rout" +
|
||||||
"tocol\022\014\n\004path\030\001 \002(\t\022\016\n\006config\030\002 \001(\014\022\024\n\014r" +
|
"erConfig\030\005 \001(\014\"S\n\016DeployProtocol\022\014\n\004path" +
|
||||||
"outerConfig\030\003 \001(\014\022\r\n\005scope\030\004 \001(\014\"`\n\026Daem" +
|
"\030\001 \002(\t\022\016\n\006config\030\002 \001(\014\022\024\n\014routerConfig\030\003" +
|
||||||
"onMsgWatchProtocol\022\"\n\007watcher\030\001 \002(\0132\021.Ac" +
|
" \001(\014\022\r\n\005scope\030\004 \001(\014\"`\n\026DaemonMsgWatchPro" +
|
||||||
"torRefProtocol\022\"\n\007watched\030\002 \002(\0132\021.ActorR" +
|
"tocol\022\"\n\007watcher\030\001 \002(\0132\021.ActorRefProtoco" +
|
||||||
"efProtocol*7\n\013CommandType\022\013\n\007CONNECT\020\001\022\014" +
|
"l\022\"\n\007watched\030\002 \002(\0132\021.ActorRefProtocol*7\n" +
|
||||||
"\n\010SHUTDOWN\020\002\022\r\n\tHEARTBEAT\020\003B\017\n\013akka.remo" +
|
"\013CommandType\022\013\n\007CONNECT\020\001\022\014\n\010SHUTDOWN\020\002\022" +
|
||||||
"teH\001"
|
"\r\n\tHEARTBEAT\020\003B\017\n\013akka.remoteH\001"
|
||||||
};
|
};
|
||||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||||
|
|
@ -7033,7 +7119,7 @@ public final class RemoteProtocol {
|
||||||
internal_static_PropsProtocol_fieldAccessorTable = new
|
internal_static_PropsProtocol_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_PropsProtocol_descriptor,
|
internal_static_PropsProtocol_descriptor,
|
||||||
new java.lang.String[] { "Creator", "Dispatcher", "Deploy", "RouterConfig", },
|
new java.lang.String[] { "Dispatcher", "Deploy", "FromClassCreator", "Creator", "RouterConfig", },
|
||||||
akka.remote.RemoteProtocol.PropsProtocol.class,
|
akka.remote.RemoteProtocol.PropsProtocol.class,
|
||||||
akka.remote.RemoteProtocol.PropsProtocol.Builder.class);
|
akka.remote.RemoteProtocol.PropsProtocol.Builder.class);
|
||||||
internal_static_DeployProtocol_descriptor =
|
internal_static_DeployProtocol_descriptor =
|
||||||
|
|
|
||||||
|
|
@ -92,10 +92,11 @@ message DaemonMsgCreateProtocol {
|
||||||
* Serialization of akka.actor.Props
|
* Serialization of akka.actor.Props
|
||||||
*/
|
*/
|
||||||
message PropsProtocol {
|
message PropsProtocol {
|
||||||
required bytes creator = 1;
|
required string dispatcher = 1;
|
||||||
required string dispatcher = 2;
|
required DeployProtocol deploy = 2;
|
||||||
required DeployProtocol deploy = 3;
|
optional string fromClassCreator = 3;
|
||||||
optional bytes routerConfig = 4;
|
optional bytes creator = 4;
|
||||||
|
optional bytes routerConfig = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,9 @@
|
||||||
package akka.serialization
|
package akka.serialization
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
import com.google.protobuf.ByteString
|
import com.google.protobuf.ByteString
|
||||||
import com.typesafe.config.Config
|
import com.typesafe.config.Config
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.ConfigFactory
|
||||||
|
|
||||||
import akka.actor.Actor
|
import akka.actor.Actor
|
||||||
import akka.actor.ActorRef
|
import akka.actor.ActorRef
|
||||||
import akka.actor.Deploy
|
import akka.actor.Deploy
|
||||||
|
|
@ -24,12 +22,14 @@ import akka.remote.RemoteProtocol.DeployProtocol
|
||||||
import akka.remote.RemoteProtocol.PropsProtocol
|
import akka.remote.RemoteProtocol.PropsProtocol
|
||||||
import akka.routing.NoRouter
|
import akka.routing.NoRouter
|
||||||
import akka.routing.RouterConfig
|
import akka.routing.RouterConfig
|
||||||
|
import akka.actor.FromClassCreator
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializes akka's internal DaemonMsgCreate using protobuf
|
* Serializes akka's internal DaemonMsgCreate using protobuf
|
||||||
* for the core structure of DaemonMsgCreate, Props and Deploy.
|
* for the core structure of DaemonMsgCreate, Props and Deploy.
|
||||||
* Serialization of contained RouterConfig, Config, Scope, and creator (scala.Function0)
|
* Serialization of contained RouterConfig, Config, and Scope
|
||||||
* is done with configured serializer for those classes, by default java.io.Serializable.
|
* is done with configured serializer for those classes, by
|
||||||
|
* default java.io.Serializable.
|
||||||
*/
|
*/
|
||||||
class DaemonMsgCreateSerializer(val system: ExtendedActorSystem) extends Serializer {
|
class DaemonMsgCreateSerializer(val system: ExtendedActorSystem) extends Serializer {
|
||||||
import ProtobufSerializer.serializeActorRef
|
import ProtobufSerializer.serializeActorRef
|
||||||
|
|
@ -55,9 +55,12 @@ class DaemonMsgCreateSerializer(val system: ExtendedActorSystem) extends Seriali
|
||||||
|
|
||||||
def propsProto = {
|
def propsProto = {
|
||||||
val builder = PropsProtocol.newBuilder.
|
val builder = PropsProtocol.newBuilder.
|
||||||
setCreator(serialize(props.creator)).
|
|
||||||
setDispatcher(props.dispatcher).
|
setDispatcher(props.dispatcher).
|
||||||
setDeploy(deployProto(props.deploy))
|
setDeploy(deployProto(props.deploy))
|
||||||
|
props.creator match {
|
||||||
|
case FromClassCreator(clazz) ⇒ builder.setFromClassCreator(clazz.getName)
|
||||||
|
case creator ⇒ builder.setCreator(serialize(creator))
|
||||||
|
}
|
||||||
if (props.routerConfig != NoRouter)
|
if (props.routerConfig != NoRouter)
|
||||||
builder.setRouterConfig(serialize(props.routerConfig))
|
builder.setRouterConfig(serialize(props.routerConfig))
|
||||||
builder.build
|
builder.build
|
||||||
|
|
@ -92,11 +95,22 @@ class DaemonMsgCreateSerializer(val system: ExtendedActorSystem) extends Seriali
|
||||||
}
|
}
|
||||||
|
|
||||||
def props = {
|
def props = {
|
||||||
|
val creator =
|
||||||
|
if (proto.getProps.hasFromClassCreator) {
|
||||||
|
system.dynamicAccess.getClassFor(proto.getProps.getFromClassCreator) match {
|
||||||
|
case Right(clazz) ⇒ FromClassCreator(clazz)
|
||||||
|
case Left(e) ⇒ throw e
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
deserialize(proto.getProps.getCreator, classOf[() ⇒ Actor])
|
||||||
|
}
|
||||||
|
|
||||||
val routerConfig =
|
val routerConfig =
|
||||||
if (proto.getProps.hasRouterConfig) deserialize(proto.getProps.getRouterConfig, classOf[RouterConfig])
|
if (proto.getProps.hasRouterConfig) deserialize(proto.getProps.getRouterConfig, classOf[RouterConfig])
|
||||||
else NoRouter
|
else NoRouter
|
||||||
|
|
||||||
Props(
|
Props(
|
||||||
creator = deserialize(proto.getProps.getCreator, classOf[() ⇒ Actor]),
|
creator = creator,
|
||||||
dispatcher = proto.getProps.getDispatcher,
|
dispatcher = proto.getProps.getDispatcher,
|
||||||
routerConfig = routerConfig,
|
routerConfig = routerConfig,
|
||||||
deploy = deploy(proto.getProps.getDeploy))
|
deploy = deploy(proto.getProps.getDeploy))
|
||||||
|
|
@ -124,7 +138,6 @@ class DaemonMsgCreateSerializer(val system: ExtendedActorSystem) extends Seriali
|
||||||
case Left(e) ⇒
|
case Left(e) ⇒
|
||||||
// Fallback to the java serializer, because some interfaces don't implement java.io.Serializable,
|
// Fallback to the java serializer, because some interfaces don't implement java.io.Serializable,
|
||||||
// but the impl instance does. This could be optimized by adding java serializers in reference.conf:
|
// but the impl instance does. This could be optimized by adding java serializers in reference.conf:
|
||||||
// scala.Function0 (the creator)
|
|
||||||
// com.typesafe.config.Config
|
// com.typesafe.config.Config
|
||||||
// akka.routing.RouterConfig
|
// akka.routing.RouterConfig
|
||||||
// akka.actor.Scope
|
// akka.actor.Scope
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import akka.remote.RemoteScope
|
||||||
import akka.routing.RoundRobinRouter
|
import akka.routing.RoundRobinRouter
|
||||||
import akka.routing.FromConfig
|
import akka.routing.FromConfig
|
||||||
import akka.util.duration._
|
import akka.util.duration._
|
||||||
|
import akka.actor.FromClassCreator
|
||||||
|
|
||||||
object DaemonMsgCreateSerializerSpec {
|
object DaemonMsgCreateSerializerSpec {
|
||||||
class MyActor extends Actor {
|
class MyActor extends Actor {
|
||||||
|
|
@ -39,45 +40,51 @@ class DaemonMsgCreateSerializerSpec extends AkkaSpec {
|
||||||
ser.serializerFor(classOf[DaemonMsgCreate]).getClass must be(classOf[DaemonMsgCreateSerializer])
|
ser.serializerFor(classOf[DaemonMsgCreate]).getClass must be(classOf[DaemonMsgCreateSerializer])
|
||||||
}
|
}
|
||||||
|
|
||||||
"serialize and de-serialize simple DaemonMsgCreate" in {
|
"serialize and de-serialize DaemonMsgCreate with FromClassCreator" in {
|
||||||
|
verifySerialization {
|
||||||
val msg = DaemonMsgCreate(
|
DaemonMsgCreate(
|
||||||
props = Props[MyActor],
|
props = Props[MyActor],
|
||||||
deploy = Deploy(),
|
deploy = Deploy(),
|
||||||
path = "foo",
|
path = "foo",
|
||||||
supervisor = supervisor)
|
supervisor = supervisor)
|
||||||
|
|
||||||
val bytes = ser.serialize(msg) match {
|
|
||||||
case Left(exception) ⇒ fail(exception)
|
|
||||||
case Right(bytes) ⇒ bytes
|
|
||||||
}
|
}
|
||||||
ser.deserialize(bytes.asInstanceOf[Array[Byte]], classOf[DaemonMsgCreate]) match {
|
}
|
||||||
case Left(exception) ⇒ fail(exception)
|
|
||||||
case Right(m: DaemonMsgCreate) ⇒ assertDaemonMsgCreate(msg, m)
|
"serialize and de-serialize DaemonMsgCreate with function creator" in {
|
||||||
|
verifySerialization {
|
||||||
|
DaemonMsgCreate(
|
||||||
|
props = Props().withCreator(new MyActor),
|
||||||
|
deploy = Deploy(),
|
||||||
|
path = "foo",
|
||||||
|
supervisor = supervisor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"serialize and de-serialize DaemonMsgCreate with Deploy and RouterConfig" in {
|
"serialize and de-serialize DaemonMsgCreate with Deploy and RouterConfig" in {
|
||||||
// Duration.Inf doesn't equal Duration.Inf, so we use another for test
|
verifySerialization {
|
||||||
val supervisorStrategy = OneForOneStrategy(3, 10 seconds) {
|
// Duration.Inf doesn't equal Duration.Inf, so we use another for test
|
||||||
case _ ⇒ SupervisorStrategy.Escalate
|
val supervisorStrategy = OneForOneStrategy(3, 10 seconds) {
|
||||||
|
case _ ⇒ SupervisorStrategy.Escalate
|
||||||
|
}
|
||||||
|
val deploy1 = Deploy(
|
||||||
|
path = "path1",
|
||||||
|
config = ConfigFactory.parseString("a=1"),
|
||||||
|
routerConfig = RoundRobinRouter(nrOfInstances = 5, supervisorStrategy = supervisorStrategy),
|
||||||
|
scope = RemoteScope(Address("akka", "Test", "host1", 1921)))
|
||||||
|
val deploy2 = Deploy(
|
||||||
|
path = "path2",
|
||||||
|
config = ConfigFactory.parseString("a=2"),
|
||||||
|
routerConfig = FromConfig,
|
||||||
|
scope = RemoteScope(Address("akka", "Test", "host2", 1922)))
|
||||||
|
DaemonMsgCreate(
|
||||||
|
props = Props[MyActor].withDispatcher("my-disp").withDeploy(deploy1),
|
||||||
|
deploy = deploy2,
|
||||||
|
path = "foo",
|
||||||
|
supervisor = supervisor)
|
||||||
}
|
}
|
||||||
val deploy1 = Deploy(
|
}
|
||||||
path = "path1",
|
|
||||||
config = ConfigFactory.parseString("a=1"),
|
|
||||||
routerConfig = RoundRobinRouter(nrOfInstances = 5, supervisorStrategy = supervisorStrategy),
|
|
||||||
scope = RemoteScope(Address("akka", "Test", "host1", 1921)))
|
|
||||||
val deploy2 = Deploy(
|
|
||||||
path = "path2",
|
|
||||||
config = ConfigFactory.parseString("a=2"),
|
|
||||||
routerConfig = FromConfig,
|
|
||||||
scope = RemoteScope(Address("akka", "Test", "host2", 1922)))
|
|
||||||
val msg = DaemonMsgCreate(
|
|
||||||
props = Props[MyActor].withDispatcher("my-disp").withDeploy(deploy1),
|
|
||||||
deploy = deploy2,
|
|
||||||
path = "foo",
|
|
||||||
supervisor = supervisor)
|
|
||||||
|
|
||||||
|
def verifySerialization(msg: DaemonMsgCreate): Unit = {
|
||||||
val bytes = ser.serialize(msg) match {
|
val bytes = ser.serialize(msg) match {
|
||||||
case Left(exception) ⇒ fail(exception)
|
case Left(exception) ⇒ fail(exception)
|
||||||
case Right(bytes) ⇒ bytes
|
case Right(bytes) ⇒ bytes
|
||||||
|
|
@ -89,7 +96,9 @@ class DaemonMsgCreateSerializerSpec extends AkkaSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
def assertDaemonMsgCreate(expected: DaemonMsgCreate, got: DaemonMsgCreate): Unit = {
|
def assertDaemonMsgCreate(expected: DaemonMsgCreate, got: DaemonMsgCreate): Unit = {
|
||||||
// can't compare props.creator
|
// can't compare props.creator when function
|
||||||
|
if (expected.props.creator.isInstanceOf[FromClassCreator])
|
||||||
|
assert(got.props.creator === expected.props.creator)
|
||||||
assert(got.props.dispatcher === expected.props.dispatcher)
|
assert(got.props.dispatcher === expected.props.dispatcher)
|
||||||
assert(got.props.dispatcher === expected.props.dispatcher)
|
assert(got.props.dispatcher === expected.props.dispatcher)
|
||||||
assert(got.props.routerConfig === expected.props.routerConfig)
|
assert(got.props.routerConfig === expected.props.routerConfig)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue