Optimized serializer for ORSet[ActorRef], #23703
* ORSet[ActorRef] is used by Akka Typed receptionist * and similar for GSet[ActorRef] ORSetSerializationBenchmark
This commit is contained in:
parent
a05170c419
commit
f754705c9c
7 changed files with 742 additions and 84 deletions
|
|
@ -0,0 +1,78 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2018 Lightbend Inc. <https://www.lightbend.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
package akka.cluster.ddata
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
import scala.concurrent.Await
|
||||||
|
import scala.concurrent.duration._
|
||||||
|
|
||||||
|
import akka.actor.ActorRef
|
||||||
|
import akka.actor.ActorSystem
|
||||||
|
import akka.actor.Props
|
||||||
|
import akka.cluster.Cluster
|
||||||
|
import akka.serialization.SerializationExtension
|
||||||
|
import akka.serialization.Serializers
|
||||||
|
import com.typesafe.config.ConfigFactory
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark
|
||||||
|
import org.openjdk.jmh.annotations.BenchmarkMode
|
||||||
|
import org.openjdk.jmh.annotations.Fork
|
||||||
|
import org.openjdk.jmh.annotations.Measurement
|
||||||
|
import org.openjdk.jmh.annotations.Mode
|
||||||
|
import org.openjdk.jmh.annotations.OutputTimeUnit
|
||||||
|
import org.openjdk.jmh.annotations.State
|
||||||
|
import org.openjdk.jmh.annotations.TearDown
|
||||||
|
import org.openjdk.jmh.annotations.Warmup
|
||||||
|
import org.openjdk.jmh.annotations.{ Scope ⇒ JmhScope }
|
||||||
|
|
||||||
|
@Fork(2)
|
||||||
|
@State(JmhScope.Benchmark)
|
||||||
|
@BenchmarkMode(Array(Mode.Throughput))
|
||||||
|
@Warmup(iterations = 4)
|
||||||
|
@Measurement(iterations = 5)
|
||||||
|
@OutputTimeUnit(TimeUnit.SECONDS)
|
||||||
|
class ORSetSerializationBenchmark {
|
||||||
|
|
||||||
|
private val config = ConfigFactory.parseString(
|
||||||
|
"""
|
||||||
|
akka.actor.provider=cluster
|
||||||
|
akka.remote.netty.tcp.port=0
|
||||||
|
akka.remote.artery.canonical.port = 0
|
||||||
|
akka.actor {
|
||||||
|
serialize-messages = off
|
||||||
|
allow-java-serialization = off
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
private val system1 = ActorSystem("ORSetSerializationBenchmark", config)
|
||||||
|
private val system2 = ActorSystem("ORSetSerializationBenchmark", config)
|
||||||
|
|
||||||
|
private val ref1 = (1 to 10).map(n ⇒ system1.actorOf(Props.empty, s"ref1-$n"))
|
||||||
|
private val ref2 = (1 to 10).map(n ⇒ system2.actorOf(Props.empty, s"ref2-$n"))
|
||||||
|
|
||||||
|
private val orSet = {
|
||||||
|
val set1 = ref1.foldLeft(ORSet.empty[ActorRef]) { case (acc, r) ⇒ acc.add(Cluster(system1), r) }
|
||||||
|
val set2 = ref2.foldLeft(ORSet.empty[ActorRef]) { case (acc, r) ⇒ acc.add(Cluster(system2), r) }
|
||||||
|
set1.merge(set2)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val serialization = SerializationExtension(system1)
|
||||||
|
private val serializerId = serialization.findSerializerFor(orSet).identifier
|
||||||
|
private val manifest = Serializers.manifestFor(serialization.findSerializerFor(orSet), orSet)
|
||||||
|
|
||||||
|
@TearDown
|
||||||
|
def shutdown(): Unit = {
|
||||||
|
Await.result(system1.terminate(), 5.seconds)
|
||||||
|
Await.result(system2.terminate(), 5.seconds)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
def serializeRoundtrip: ORSet[ActorRef] = {
|
||||||
|
val bytes = serialization.serialize(orSet).get
|
||||||
|
serialization.deserialize(bytes, serializerId, manifest).get.asInstanceOf[ORSet[ActorRef]]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -278,6 +278,42 @@ public final class ReplicatedDataMessages {
|
||||||
*/
|
*/
|
||||||
akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessageOrBuilder getOtherElementsOrBuilder(
|
akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessageOrBuilder getOtherElementsOrBuilder(
|
||||||
int index);
|
int index);
|
||||||
|
|
||||||
|
// repeated string actorRefElements = 5;
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
java.util.List<java.lang.String>
|
||||||
|
getActorRefElementsList();
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
int getActorRefElementsCount();
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
java.lang.String getActorRefElements(int index);
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
akka.protobuf.ByteString
|
||||||
|
getActorRefElementsBytes(int index);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code akka.cluster.ddata.GSet}
|
* Protobuf type {@code akka.cluster.ddata.GSet}
|
||||||
|
|
@ -388,6 +424,14 @@ public final class ReplicatedDataMessages {
|
||||||
otherElements_.add(input.readMessage(akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessage.PARSER, extensionRegistry));
|
otherElements_.add(input.readMessage(akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessage.PARSER, extensionRegistry));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 42: {
|
||||||
|
if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.LazyStringArrayList();
|
||||||
|
mutable_bitField0_ |= 0x00000010;
|
||||||
|
}
|
||||||
|
actorRefElements_.add(input.readBytes());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (akka.protobuf.InvalidProtocolBufferException e) {
|
} catch (akka.protobuf.InvalidProtocolBufferException e) {
|
||||||
|
|
@ -408,6 +452,9 @@ public final class ReplicatedDataMessages {
|
||||||
if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
otherElements_ = java.util.Collections.unmodifiableList(otherElements_);
|
otherElements_ = java.util.Collections.unmodifiableList(otherElements_);
|
||||||
}
|
}
|
||||||
|
if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.UnmodifiableLazyStringList(actorRefElements_);
|
||||||
|
}
|
||||||
this.unknownFields = unknownFields.build();
|
this.unknownFields = unknownFields.build();
|
||||||
makeExtensionsImmutable();
|
makeExtensionsImmutable();
|
||||||
}
|
}
|
||||||
|
|
@ -553,11 +600,58 @@ public final class ReplicatedDataMessages {
|
||||||
return otherElements_.get(index);
|
return otherElements_.get(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated string actorRefElements = 5;
|
||||||
|
public static final int ACTORREFELEMENTS_FIELD_NUMBER = 5;
|
||||||
|
private akka.protobuf.LazyStringList actorRefElements_;
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.util.List<java.lang.String>
|
||||||
|
getActorRefElementsList() {
|
||||||
|
return actorRefElements_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public int getActorRefElementsCount() {
|
||||||
|
return actorRefElements_.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.lang.String getActorRefElements(int index) {
|
||||||
|
return actorRefElements_.get(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public akka.protobuf.ByteString
|
||||||
|
getActorRefElementsBytes(int index) {
|
||||||
|
return actorRefElements_.getByteString(index);
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
stringElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
stringElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
intElements_ = java.util.Collections.emptyList();
|
intElements_ = java.util.Collections.emptyList();
|
||||||
longElements_ = java.util.Collections.emptyList();
|
longElements_ = java.util.Collections.emptyList();
|
||||||
otherElements_ = java.util.Collections.emptyList();
|
otherElements_ = java.util.Collections.emptyList();
|
||||||
|
actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
|
|
@ -597,6 +691,9 @@ public final class ReplicatedDataMessages {
|
||||||
for (int i = 0; i < otherElements_.size(); i++) {
|
for (int i = 0; i < otherElements_.size(); i++) {
|
||||||
output.writeMessage(4, otherElements_.get(i));
|
output.writeMessage(4, otherElements_.get(i));
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < actorRefElements_.size(); i++) {
|
||||||
|
output.writeBytes(5, actorRefElements_.getByteString(i));
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -647,6 +744,15 @@ public final class ReplicatedDataMessages {
|
||||||
size += akka.protobuf.CodedOutputStream
|
size += akka.protobuf.CodedOutputStream
|
||||||
.computeMessageSize(4, otherElements_.get(i));
|
.computeMessageSize(4, otherElements_.get(i));
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
int dataSize = 0;
|
||||||
|
for (int i = 0; i < actorRefElements_.size(); i++) {
|
||||||
|
dataSize += akka.protobuf.CodedOutputStream
|
||||||
|
.computeBytesSizeNoTag(actorRefElements_.getByteString(i));
|
||||||
|
}
|
||||||
|
size += dataSize;
|
||||||
|
size += 1 * getActorRefElementsList().size();
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
|
|
@ -776,6 +882,8 @@ public final class ReplicatedDataMessages {
|
||||||
} else {
|
} else {
|
||||||
otherElementsBuilder_.clear();
|
otherElementsBuilder_.clear();
|
||||||
}
|
}
|
||||||
|
actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -828,6 +936,12 @@ public final class ReplicatedDataMessages {
|
||||||
} else {
|
} else {
|
||||||
result.otherElements_ = otherElementsBuilder_.build();
|
result.otherElements_ = otherElementsBuilder_.build();
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.UnmodifiableLazyStringList(
|
||||||
|
actorRefElements_);
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
|
}
|
||||||
|
result.actorRefElements_ = actorRefElements_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -899,6 +1013,16 @@ public final class ReplicatedDataMessages {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!other.actorRefElements_.isEmpty()) {
|
||||||
|
if (actorRefElements_.isEmpty()) {
|
||||||
|
actorRefElements_ = other.actorRefElements_;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
|
} else {
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.addAll(other.actorRefElements_);
|
||||||
|
}
|
||||||
|
onChanged();
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
@ -1397,6 +1521,135 @@ public final class ReplicatedDataMessages {
|
||||||
return otherElementsBuilder_;
|
return otherElementsBuilder_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated string actorRefElements = 5;
|
||||||
|
private akka.protobuf.LazyStringList actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
|
private void ensureActorRefElementsIsMutable() {
|
||||||
|
if (!((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.LazyStringArrayList(actorRefElements_);
|
||||||
|
bitField0_ |= 0x00000010;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.util.List<java.lang.String>
|
||||||
|
getActorRefElementsList() {
|
||||||
|
return java.util.Collections.unmodifiableList(actorRefElements_);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public int getActorRefElementsCount() {
|
||||||
|
return actorRefElements_.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.lang.String getActorRefElements(int index) {
|
||||||
|
return actorRefElements_.get(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public akka.protobuf.ByteString
|
||||||
|
getActorRefElementsBytes(int index) {
|
||||||
|
return actorRefElements_.getByteString(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder setActorRefElements(
|
||||||
|
int index, java.lang.String value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.set(index, value);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder addActorRefElements(
|
||||||
|
java.lang.String value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.add(value);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder addAllActorRefElements(
|
||||||
|
java.lang.Iterable<java.lang.String> values) {
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
super.addAll(values, actorRefElements_);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder clearActorRefElements() {
|
||||||
|
actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 5;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder addActorRefElementsBytes(
|
||||||
|
akka.protobuf.ByteString value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.add(value);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:akka.cluster.ddata.GSet)
|
// @@protoc_insertion_point(builder_scope:akka.cluster.ddata.GSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1522,6 +1775,42 @@ public final class ReplicatedDataMessages {
|
||||||
*/
|
*/
|
||||||
akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessageOrBuilder getOtherElementsOrBuilder(
|
akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessageOrBuilder getOtherElementsOrBuilder(
|
||||||
int index);
|
int index);
|
||||||
|
|
||||||
|
// repeated string actorRefElements = 7;
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
java.util.List<java.lang.String>
|
||||||
|
getActorRefElementsList();
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
int getActorRefElementsCount();
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
java.lang.String getActorRefElements(int index);
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
akka.protobuf.ByteString
|
||||||
|
getActorRefElementsBytes(int index);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code akka.cluster.ddata.ORSet}
|
* Protobuf type {@code akka.cluster.ddata.ORSet}
|
||||||
|
|
@ -1653,6 +1942,14 @@ public final class ReplicatedDataMessages {
|
||||||
otherElements_.add(input.readMessage(akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessage.PARSER, extensionRegistry));
|
otherElements_.add(input.readMessage(akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessage.PARSER, extensionRegistry));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 58: {
|
||||||
|
if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.LazyStringArrayList();
|
||||||
|
mutable_bitField0_ |= 0x00000040;
|
||||||
|
}
|
||||||
|
actorRefElements_.add(input.readBytes());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (akka.protobuf.InvalidProtocolBufferException e) {
|
} catch (akka.protobuf.InvalidProtocolBufferException e) {
|
||||||
|
|
@ -1676,6 +1973,9 @@ public final class ReplicatedDataMessages {
|
||||||
if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
|
if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
|
||||||
otherElements_ = java.util.Collections.unmodifiableList(otherElements_);
|
otherElements_ = java.util.Collections.unmodifiableList(otherElements_);
|
||||||
}
|
}
|
||||||
|
if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.UnmodifiableLazyStringList(actorRefElements_);
|
||||||
|
}
|
||||||
this.unknownFields = unknownFields.build();
|
this.unknownFields = unknownFields.build();
|
||||||
makeExtensionsImmutable();
|
makeExtensionsImmutable();
|
||||||
}
|
}
|
||||||
|
|
@ -1880,6 +2180,52 @@ public final class ReplicatedDataMessages {
|
||||||
return otherElements_.get(index);
|
return otherElements_.get(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated string actorRefElements = 7;
|
||||||
|
public static final int ACTORREFELEMENTS_FIELD_NUMBER = 7;
|
||||||
|
private akka.protobuf.LazyStringList actorRefElements_;
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.util.List<java.lang.String>
|
||||||
|
getActorRefElementsList() {
|
||||||
|
return actorRefElements_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public int getActorRefElementsCount() {
|
||||||
|
return actorRefElements_.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.lang.String getActorRefElements(int index) {
|
||||||
|
return actorRefElements_.get(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public akka.protobuf.ByteString
|
||||||
|
getActorRefElementsBytes(int index) {
|
||||||
|
return actorRefElements_.getByteString(index);
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
vvector_ = akka.cluster.ddata.protobuf.msg.ReplicatorMessages.VersionVector.getDefaultInstance();
|
vvector_ = akka.cluster.ddata.protobuf.msg.ReplicatorMessages.VersionVector.getDefaultInstance();
|
||||||
dots_ = java.util.Collections.emptyList();
|
dots_ = java.util.Collections.emptyList();
|
||||||
|
|
@ -1887,6 +2233,7 @@ public final class ReplicatedDataMessages {
|
||||||
intElements_ = java.util.Collections.emptyList();
|
intElements_ = java.util.Collections.emptyList();
|
||||||
longElements_ = java.util.Collections.emptyList();
|
longElements_ = java.util.Collections.emptyList();
|
||||||
otherElements_ = java.util.Collections.emptyList();
|
otherElements_ = java.util.Collections.emptyList();
|
||||||
|
actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
|
|
@ -1946,6 +2293,9 @@ public final class ReplicatedDataMessages {
|
||||||
for (int i = 0; i < otherElements_.size(); i++) {
|
for (int i = 0; i < otherElements_.size(); i++) {
|
||||||
output.writeMessage(6, otherElements_.get(i));
|
output.writeMessage(6, otherElements_.get(i));
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < actorRefElements_.size(); i++) {
|
||||||
|
output.writeBytes(7, actorRefElements_.getByteString(i));
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2004,6 +2354,15 @@ public final class ReplicatedDataMessages {
|
||||||
size += akka.protobuf.CodedOutputStream
|
size += akka.protobuf.CodedOutputStream
|
||||||
.computeMessageSize(6, otherElements_.get(i));
|
.computeMessageSize(6, otherElements_.get(i));
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
int dataSize = 0;
|
||||||
|
for (int i = 0; i < actorRefElements_.size(); i++) {
|
||||||
|
dataSize += akka.protobuf.CodedOutputStream
|
||||||
|
.computeBytesSizeNoTag(actorRefElements_.getByteString(i));
|
||||||
|
}
|
||||||
|
size += dataSize;
|
||||||
|
size += 1 * getActorRefElementsList().size();
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
|
|
@ -2147,6 +2506,8 @@ public final class ReplicatedDataMessages {
|
||||||
} else {
|
} else {
|
||||||
otherElementsBuilder_.clear();
|
otherElementsBuilder_.clear();
|
||||||
}
|
}
|
||||||
|
actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2217,6 +2578,12 @@ public final class ReplicatedDataMessages {
|
||||||
} else {
|
} else {
|
||||||
result.otherElements_ = otherElementsBuilder_.build();
|
result.otherElements_ = otherElementsBuilder_.build();
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.UnmodifiableLazyStringList(
|
||||||
|
actorRefElements_);
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
|
}
|
||||||
|
result.actorRefElements_ = actorRefElements_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -2318,6 +2685,16 @@ public final class ReplicatedDataMessages {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!other.actorRefElements_.isEmpty()) {
|
||||||
|
if (actorRefElements_.isEmpty()) {
|
||||||
|
actorRefElements_ = other.actorRefElements_;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
|
} else {
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.addAll(other.actorRefElements_);
|
||||||
|
}
|
||||||
|
onChanged();
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
@ -3187,6 +3564,135 @@ public final class ReplicatedDataMessages {
|
||||||
return otherElementsBuilder_;
|
return otherElementsBuilder_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated string actorRefElements = 7;
|
||||||
|
private akka.protobuf.LazyStringList actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
|
private void ensureActorRefElementsIsMutable() {
|
||||||
|
if (!((bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
actorRefElements_ = new akka.protobuf.LazyStringArrayList(actorRefElements_);
|
||||||
|
bitField0_ |= 0x00000040;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.util.List<java.lang.String>
|
||||||
|
getActorRefElementsList() {
|
||||||
|
return java.util.Collections.unmodifiableList(actorRefElements_);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public int getActorRefElementsCount() {
|
||||||
|
return actorRefElements_.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public java.lang.String getActorRefElements(int index) {
|
||||||
|
return actorRefElements_.get(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public akka.protobuf.ByteString
|
||||||
|
getActorRefElementsBytes(int index) {
|
||||||
|
return actorRefElements_.getByteString(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder setActorRefElements(
|
||||||
|
int index, java.lang.String value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.set(index, value);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder addActorRefElements(
|
||||||
|
java.lang.String value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.add(value);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder addAllActorRefElements(
|
||||||
|
java.lang.Iterable<java.lang.String> values) {
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
super.addAll(values, actorRefElements_);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder clearActorRefElements() {
|
||||||
|
actorRefElements_ = akka.protobuf.LazyStringArrayList.EMPTY;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated string actorRefElements = 7;</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* added in Akka 2.5.14
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder addActorRefElementsBytes(
|
||||||
|
akka.protobuf.ByteString value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
ensureActorRefElementsIsMutable();
|
||||||
|
actorRefElements_.add(value);
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:akka.cluster.ddata.ORSet)
|
// @@protoc_insertion_point(builder_scope:akka.cluster.ddata.ORSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -18531,75 +19037,76 @@ public final class ReplicatedDataMessages {
|
||||||
static {
|
static {
|
||||||
java.lang.String[] descriptorData = {
|
java.lang.String[] descriptorData = {
|
||||||
"\n\034ReplicatedDataMessages.proto\022\022akka.clu" +
|
"\n\034ReplicatedDataMessages.proto\022\022akka.clu" +
|
||||||
"ster.ddata\032\030ReplicatorMessages.proto\"\212\001\n" +
|
"ster.ddata\032\030ReplicatorMessages.proto\"\244\001\n" +
|
||||||
"\004GSet\022\026\n\016stringElements\030\001 \003(\t\022\027\n\013intElem" +
|
"\004GSet\022\026\n\016stringElements\030\001 \003(\t\022\027\n\013intElem" +
|
||||||
"ents\030\002 \003(\021B\002\020\001\022\030\n\014longElements\030\003 \003(\022B\002\020\001" +
|
"ents\030\002 \003(\021B\002\020\001\022\030\n\014longElements\030\003 \003(\022B\002\020\001" +
|
||||||
"\0227\n\rotherElements\030\004 \003(\0132 .akka.cluster.d" +
|
"\0227\n\rotherElements\030\004 \003(\0132 .akka.cluster.d" +
|
||||||
"data.OtherMessage\"\360\001\n\005ORSet\0222\n\007vvector\030\001" +
|
"data.OtherMessage\022\030\n\020actorRefElements\030\005 " +
|
||||||
" \002(\0132!.akka.cluster.ddata.VersionVector\022" +
|
"\003(\t\"\212\002\n\005ORSet\0222\n\007vvector\030\001 \002(\0132!.akka.cl" +
|
||||||
"/\n\004dots\030\002 \003(\0132!.akka.cluster.ddata.Versi" +
|
"uster.ddata.VersionVector\022/\n\004dots\030\002 \003(\0132" +
|
||||||
"onVector\022\026\n\016stringElements\030\003 \003(\t\022\027\n\013intE" +
|
"!.akka.cluster.ddata.VersionVector\022\026\n\016st" +
|
||||||
"lements\030\004 \003(\021B\002\020\001\022\030\n\014longElements\030\005 \003(\022B",
|
"ringElements\030\003 \003(\t\022\027\n\013intElements\030\004 \003(\021B",
|
||||||
"\002\020\001\0227\n\rotherElements\030\006 \003(\0132 .akka.cluste" +
|
"\002\020\001\022\030\n\014longElements\030\005 \003(\022B\002\020\001\0227\n\rotherEl" +
|
||||||
"r.ddata.OtherMessage\"\272\001\n\017ORSetDeltaGroup" +
|
"ements\030\006 \003(\0132 .akka.cluster.ddata.OtherM" +
|
||||||
"\022:\n\007entries\030\001 \003(\0132).akka.cluster.ddata.O" +
|
"essage\022\030\n\020actorRefElements\030\007 \003(\t\"\272\001\n\017ORS" +
|
||||||
"RSetDeltaGroup.Entry\032k\n\005Entry\0223\n\toperati" +
|
"etDeltaGroup\022:\n\007entries\030\001 \003(\0132).akka.clu" +
|
||||||
"on\030\001 \002(\0162 .akka.cluster.ddata.ORSetDelta" +
|
"ster.ddata.ORSetDeltaGroup.Entry\032k\n\005Entr" +
|
||||||
"Op\022-\n\nunderlying\030\002 \002(\0132\031.akka.cluster.dd" +
|
"y\0223\n\toperation\030\001 \002(\0162 .akka.cluster.ddat" +
|
||||||
"ata.ORSet\"\027\n\004Flag\022\017\n\007enabled\030\001 \002(\010\"\202\001\n\013L" +
|
"a.ORSetDeltaOp\022-\n\nunderlying\030\002 \002(\0132\031.akk" +
|
||||||
"WWRegister\022\021\n\ttimestamp\030\001 \002(\022\022/\n\004node\030\002 " +
|
"a.cluster.ddata.ORSet\"\027\n\004Flag\022\017\n\007enabled" +
|
||||||
"\002(\0132!.akka.cluster.ddata.UniqueAddress\022/" +
|
"\030\001 \002(\010\"\202\001\n\013LWWRegister\022\021\n\ttimestamp\030\001 \002(" +
|
||||||
"\n\005state\030\003 \002(\0132 .akka.cluster.ddata.Other",
|
"\022\022/\n\004node\030\002 \002(\0132!.akka.cluster.ddata.Uni",
|
||||||
"Message\"\210\001\n\010GCounter\0223\n\007entries\030\001 \003(\0132\"." +
|
"queAddress\022/\n\005state\030\003 \002(\0132 .akka.cluster" +
|
||||||
"akka.cluster.ddata.GCounter.Entry\032G\n\005Ent" +
|
".ddata.OtherMessage\"\210\001\n\010GCounter\0223\n\007entr" +
|
||||||
"ry\022/\n\004node\030\001 \002(\0132!.akka.cluster.ddata.Un" +
|
"ies\030\001 \003(\0132\".akka.cluster.ddata.GCounter." +
|
||||||
"iqueAddress\022\r\n\005value\030\002 \002(\014\"o\n\tPNCounter\022" +
|
"Entry\032G\n\005Entry\022/\n\004node\030\001 \002(\0132!.akka.clus" +
|
||||||
"0\n\nincrements\030\001 \002(\0132\034.akka.cluster.ddata" +
|
"ter.ddata.UniqueAddress\022\r\n\005value\030\002 \002(\014\"o" +
|
||||||
".GCounter\0220\n\ndecrements\030\002 \002(\0132\034.akka.clu" +
|
"\n\tPNCounter\0220\n\nincrements\030\001 \002(\0132\034.akka.c" +
|
||||||
"ster.ddata.GCounter\"\205\002\n\005ORMap\022\'\n\004keys\030\001 " +
|
"luster.ddata.GCounter\0220\n\ndecrements\030\002 \002(" +
|
||||||
"\002(\0132\031.akka.cluster.ddata.ORSet\0220\n\007entrie" +
|
"\0132\034.akka.cluster.ddata.GCounter\"\205\002\n\005ORMa" +
|
||||||
"s\030\002 \003(\0132\037.akka.cluster.ddata.ORMap.Entry" +
|
"p\022\'\n\004keys\030\001 \002(\0132\031.akka.cluster.ddata.ORS" +
|
||||||
"\032\240\001\n\005Entry\022\021\n\tstringKey\030\001 \001(\t\022/\n\005value\030\002",
|
"et\0220\n\007entries\030\002 \003(\0132\037.akka.cluster.ddata",
|
||||||
" \002(\0132 .akka.cluster.ddata.OtherMessage\022\016" +
|
".ORMap.Entry\032\240\001\n\005Entry\022\021\n\tstringKey\030\001 \001(" +
|
||||||
"\n\006intKey\030\003 \001(\021\022\017\n\007longKey\030\004 \001(\022\0222\n\010other" +
|
"\t\022/\n\005value\030\002 \002(\0132 .akka.cluster.ddata.Ot" +
|
||||||
"Key\030\005 \001(\0132 .akka.cluster.ddata.OtherMess" +
|
"herMessage\022\016\n\006intKey\030\003 \001(\021\022\017\n\007longKey\030\004 " +
|
||||||
"age\"\263\003\n\017ORMapDeltaGroup\022:\n\007entries\030\001 \003(\013" +
|
"\001(\022\0222\n\010otherKey\030\005 \001(\0132 .akka.cluster.dda" +
|
||||||
"2).akka.cluster.ddata.ORMapDeltaGroup.En" +
|
"ta.OtherMessage\"\263\003\n\017ORMapDeltaGroup\022:\n\007e" +
|
||||||
"try\032\243\001\n\010MapEntry\022\021\n\tstringKey\030\001 \001(\t\022/\n\005v" +
|
"ntries\030\001 \003(\0132).akka.cluster.ddata.ORMapD" +
|
||||||
"alue\030\002 \001(\0132 .akka.cluster.ddata.OtherMes" +
|
"eltaGroup.Entry\032\243\001\n\010MapEntry\022\021\n\tstringKe" +
|
||||||
"sage\022\016\n\006intKey\030\003 \001(\021\022\017\n\007longKey\030\004 \001(\022\0222\n" +
|
"y\030\001 \001(\t\022/\n\005value\030\002 \001(\0132 .akka.cluster.dd" +
|
||||||
"\010otherKey\030\005 \001(\0132 .akka.cluster.ddata.Oth" +
|
"ata.OtherMessage\022\016\n\006intKey\030\003 \001(\021\022\017\n\007long" +
|
||||||
"erMessage\032\275\001\n\005Entry\0223\n\toperation\030\001 \002(\0162 ",
|
"Key\030\004 \001(\022\0222\n\010otherKey\030\005 \001(\0132 .akka.clust",
|
||||||
".akka.cluster.ddata.ORMapDeltaOp\022-\n\nunde" +
|
"er.ddata.OtherMessage\032\275\001\n\005Entry\0223\n\topera" +
|
||||||
"rlying\030\002 \002(\0132\031.akka.cluster.ddata.ORSet\022" +
|
"tion\030\001 \002(\0162 .akka.cluster.ddata.ORMapDel" +
|
||||||
"\017\n\007zeroTag\030\003 \002(\021\022?\n\tentryData\030\004 \003(\0132,.ak" +
|
"taOp\022-\n\nunderlying\030\002 \002(\0132\031.akka.cluster." +
|
||||||
"ka.cluster.ddata.ORMapDeltaGroup.MapEntr" +
|
"ddata.ORSet\022\017\n\007zeroTag\030\003 \002(\021\022?\n\tentryDat" +
|
||||||
"y\"\206\002\n\006LWWMap\022\'\n\004keys\030\001 \002(\0132\031.akka.cluste" +
|
"a\030\004 \003(\0132,.akka.cluster.ddata.ORMapDeltaG" +
|
||||||
"r.ddata.ORSet\0221\n\007entries\030\002 \003(\0132 .akka.cl" +
|
"roup.MapEntry\"\206\002\n\006LWWMap\022\'\n\004keys\030\001 \002(\0132\031" +
|
||||||
"uster.ddata.LWWMap.Entry\032\237\001\n\005Entry\022\021\n\tst" +
|
".akka.cluster.ddata.ORSet\0221\n\007entries\030\002 \003" +
|
||||||
"ringKey\030\001 \001(\t\022.\n\005value\030\002 \002(\0132\037.akka.clus" +
|
"(\0132 .akka.cluster.ddata.LWWMap.Entry\032\237\001\n" +
|
||||||
"ter.ddata.LWWRegister\022\016\n\006intKey\030\003 \001(\021\022\017\n" +
|
"\005Entry\022\021\n\tstringKey\030\001 \001(\t\022.\n\005value\030\002 \002(\013" +
|
||||||
"\007longKey\030\004 \001(\022\0222\n\010otherKey\030\005 \001(\0132 .akka.",
|
"2\037.akka.cluster.ddata.LWWRegister\022\016\n\006int",
|
||||||
"cluster.ddata.OtherMessage\"\220\002\n\014PNCounter" +
|
"Key\030\003 \001(\021\022\017\n\007longKey\030\004 \001(\022\0222\n\010otherKey\030\005" +
|
||||||
"Map\022\'\n\004keys\030\001 \002(\0132\031.akka.cluster.ddata.O" +
|
" \001(\0132 .akka.cluster.ddata.OtherMessage\"\220" +
|
||||||
"RSet\0227\n\007entries\030\002 \003(\0132&.akka.cluster.dda" +
|
"\002\n\014PNCounterMap\022\'\n\004keys\030\001 \002(\0132\031.akka.clu" +
|
||||||
"ta.PNCounterMap.Entry\032\235\001\n\005Entry\022\021\n\tstrin" +
|
"ster.ddata.ORSet\0227\n\007entries\030\002 \003(\0132&.akka" +
|
||||||
"gKey\030\001 \001(\t\022,\n\005value\030\002 \002(\0132\035.akka.cluster" +
|
".cluster.ddata.PNCounterMap.Entry\032\235\001\n\005En" +
|
||||||
".ddata.PNCounter\022\016\n\006intKey\030\003 \001(\021\022\017\n\007long" +
|
"try\022\021\n\tstringKey\030\001 \001(\t\022,\n\005value\030\002 \002(\0132\035." +
|
||||||
"Key\030\004 \001(\022\0222\n\010otherKey\030\005 \001(\0132 .akka.clust" +
|
"akka.cluster.ddata.PNCounter\022\016\n\006intKey\030\003" +
|
||||||
"er.ddata.OtherMessage\"\241\002\n\nORMultiMap\022\'\n\004" +
|
|
||||||
"keys\030\001 \002(\0132\031.akka.cluster.ddata.ORSet\0225\n" +
|
|
||||||
"\007entries\030\002 \003(\0132$.akka.cluster.ddata.ORMu",
|
|
||||||
"ltiMap.Entry\022\027\n\017withValueDeltas\030\003 \001(\010\032\231\001" +
|
|
||||||
"\n\005Entry\022\021\n\tstringKey\030\001 \001(\t\022(\n\005value\030\002 \002(" +
|
|
||||||
"\0132\031.akka.cluster.ddata.ORSet\022\016\n\006intKey\030\003" +
|
|
||||||
" \001(\021\022\017\n\007longKey\030\004 \001(\022\0222\n\010otherKey\030\005 \001(\0132" +
|
" \001(\021\022\017\n\007longKey\030\004 \001(\022\0222\n\010otherKey\030\005 \001(\0132" +
|
||||||
" .akka.cluster.ddata.OtherMessage*-\n\014ORS" +
|
" .akka.cluster.ddata.OtherMessage\"\241\002\n\nOR" +
|
||||||
"etDeltaOp\022\007\n\003Add\020\000\022\n\n\006Remove\020\001\022\010\n\004Full\020\002" +
|
"MultiMap\022\'\n\004keys\030\001 \002(\0132\031.akka.cluster.dd",
|
||||||
"*R\n\014ORMapDeltaOp\022\014\n\010ORMapPut\020\000\022\017\n\013ORMapR" +
|
"ata.ORSet\0225\n\007entries\030\002 \003(\0132$.akka.cluste" +
|
||||||
"emove\020\001\022\022\n\016ORMapRemoveKey\020\002\022\017\n\013ORMapUpda" +
|
"r.ddata.ORMultiMap.Entry\022\027\n\017withValueDel" +
|
||||||
"te\020\003B#\n\037akka.cluster.ddata.protobuf.msgH" +
|
"tas\030\003 \001(\010\032\231\001\n\005Entry\022\021\n\tstringKey\030\001 \001(\t\022(" +
|
||||||
"\001"
|
"\n\005value\030\002 \002(\0132\031.akka.cluster.ddata.ORSet" +
|
||||||
|
"\022\016\n\006intKey\030\003 \001(\021\022\017\n\007longKey\030\004 \001(\022\0222\n\010oth" +
|
||||||
|
"erKey\030\005 \001(\0132 .akka.cluster.ddata.OtherMe" +
|
||||||
|
"ssage*-\n\014ORSetDeltaOp\022\007\n\003Add\020\000\022\n\n\006Remove" +
|
||||||
|
"\020\001\022\010\n\004Full\020\002*R\n\014ORMapDeltaOp\022\014\n\010ORMapPut" +
|
||||||
|
"\020\000\022\017\n\013ORMapRemove\020\001\022\022\n\016ORMapRemoveKey\020\002\022" +
|
||||||
|
"\017\n\013ORMapUpdate\020\003B#\n\037akka.cluster.ddata.p",
|
||||||
|
"rotobuf.msgH\001"
|
||||||
};
|
};
|
||||||
akka.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
akka.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||||
new akka.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
new akka.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||||
|
|
@ -18611,13 +19118,13 @@ public final class ReplicatedDataMessages {
|
||||||
internal_static_akka_cluster_ddata_GSet_fieldAccessorTable = new
|
internal_static_akka_cluster_ddata_GSet_fieldAccessorTable = new
|
||||||
akka.protobuf.GeneratedMessage.FieldAccessorTable(
|
akka.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_akka_cluster_ddata_GSet_descriptor,
|
internal_static_akka_cluster_ddata_GSet_descriptor,
|
||||||
new java.lang.String[] { "StringElements", "IntElements", "LongElements", "OtherElements", });
|
new java.lang.String[] { "StringElements", "IntElements", "LongElements", "OtherElements", "ActorRefElements", });
|
||||||
internal_static_akka_cluster_ddata_ORSet_descriptor =
|
internal_static_akka_cluster_ddata_ORSet_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(1);
|
getDescriptor().getMessageTypes().get(1);
|
||||||
internal_static_akka_cluster_ddata_ORSet_fieldAccessorTable = new
|
internal_static_akka_cluster_ddata_ORSet_fieldAccessorTable = new
|
||||||
akka.protobuf.GeneratedMessage.FieldAccessorTable(
|
akka.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_akka_cluster_ddata_ORSet_descriptor,
|
internal_static_akka_cluster_ddata_ORSet_descriptor,
|
||||||
new java.lang.String[] { "Vvector", "Dots", "StringElements", "IntElements", "LongElements", "OtherElements", });
|
new java.lang.String[] { "Vvector", "Dots", "StringElements", "IntElements", "LongElements", "OtherElements", "ActorRefElements", });
|
||||||
internal_static_akka_cluster_ddata_ORSetDeltaGroup_descriptor =
|
internal_static_akka_cluster_ddata_ORSetDeltaGroup_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(2);
|
getDescriptor().getMessageTypes().get(2);
|
||||||
internal_static_akka_cluster_ddata_ORSetDeltaGroup_fieldAccessorTable = new
|
internal_static_akka_cluster_ddata_ORSetDeltaGroup_fieldAccessorTable = new
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
# #23703 Optimized serializer for ORSet[ActorRef]
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#GSetOrBuilder.getActorRefElementsCount")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#GSetOrBuilder.getActorRefElementsList")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#GSetOrBuilder.getActorRefElements")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#GSetOrBuilder.getActorRefElementsBytes")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#ORSetOrBuilder.getActorRefElementsCount")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#ORSetOrBuilder.getActorRefElementsList")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#ORSetOrBuilder.getActorRefElements")
|
||||||
|
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.ddata.protobuf.msg.ReplicatedDataMessages#ORSetOrBuilder.getActorRefElementsBytes")
|
||||||
|
|
||||||
|
|
@ -12,6 +12,7 @@ message GSet {
|
||||||
repeated sint32 intElements = 2 [packed=true];
|
repeated sint32 intElements = 2 [packed=true];
|
||||||
repeated sint64 longElements = 3 [packed=true];
|
repeated sint64 longElements = 3 [packed=true];
|
||||||
repeated OtherMessage otherElements = 4;
|
repeated OtherMessage otherElements = 4;
|
||||||
|
repeated string actorRefElements = 5; // added in Akka 2.5.14
|
||||||
}
|
}
|
||||||
|
|
||||||
message ORSet {
|
message ORSet {
|
||||||
|
|
@ -21,6 +22,7 @@ message ORSet {
|
||||||
repeated sint32 intElements = 4 [packed=true];
|
repeated sint32 intElements = 4 [packed=true];
|
||||||
repeated sint64 longElements = 5 [packed=true];
|
repeated sint64 longElements = 5 [packed=true];
|
||||||
repeated OtherMessage otherElements = 6;
|
repeated OtherMessage otherElements = 6;
|
||||||
|
repeated string actorRefElements = 7; // added in Akka 2.5.14
|
||||||
}
|
}
|
||||||
|
|
||||||
message ORSetDeltaGroup {
|
message ORSetDeltaGroup {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import java.util.TreeSet
|
||||||
import scala.annotation.tailrec
|
import scala.annotation.tailrec
|
||||||
import scala.collection.JavaConverters._
|
import scala.collection.JavaConverters._
|
||||||
import scala.collection.breakOut
|
import scala.collection.breakOut
|
||||||
|
|
||||||
import akka.actor.ExtendedActorSystem
|
import akka.actor.ExtendedActorSystem
|
||||||
import akka.cluster.ddata._
|
import akka.cluster.ddata._
|
||||||
import akka.cluster.ddata.Replicator.Internal._
|
import akka.cluster.ddata.Replicator.Internal._
|
||||||
|
|
@ -22,10 +23,11 @@ import akka.serialization.SerializerWithStringManifest
|
||||||
import akka.serialization.BaseSerializer
|
import akka.serialization.BaseSerializer
|
||||||
import akka.protobuf.{ ByteString, GeneratedMessage }
|
import akka.protobuf.{ ByteString, GeneratedMessage }
|
||||||
import akka.util.ByteString.UTF_8
|
import akka.util.ByteString.UTF_8
|
||||||
|
|
||||||
import java.io.NotSerializableException
|
import java.io.NotSerializableException
|
||||||
|
|
||||||
|
import akka.actor.ActorRef
|
||||||
import akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessage
|
import akka.cluster.ddata.protobuf.msg.ReplicatorMessages.OtherMessage
|
||||||
|
import akka.serialization.Serialization
|
||||||
|
|
||||||
private object ReplicatedDataSerializer {
|
private object ReplicatedDataSerializer {
|
||||||
/*
|
/*
|
||||||
|
|
@ -321,11 +323,13 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
||||||
val intElements = new ArrayList[Integer]
|
val intElements = new ArrayList[Integer]
|
||||||
val longElements = new ArrayList[jl.Long]
|
val longElements = new ArrayList[jl.Long]
|
||||||
val otherElements = new ArrayList[dm.OtherMessage]
|
val otherElements = new ArrayList[dm.OtherMessage]
|
||||||
|
val actorRefElements = new ArrayList[String]
|
||||||
gset.elements.foreach {
|
gset.elements.foreach {
|
||||||
case s: String ⇒ stringElements.add(s)
|
case s: String ⇒ stringElements.add(s)
|
||||||
case i: Int ⇒ intElements.add(i)
|
case i: Int ⇒ intElements.add(i)
|
||||||
case l: Long ⇒ longElements.add(l)
|
case l: Long ⇒ longElements.add(l)
|
||||||
case other ⇒ otherElements.add(otherMessageToProto(other))
|
case ref: ActorRef ⇒ actorRefElements.add(Serialization.serializedActorPath(ref))
|
||||||
|
case other ⇒ otherElements.add(otherMessageToProto(other))
|
||||||
}
|
}
|
||||||
if (!stringElements.isEmpty) {
|
if (!stringElements.isEmpty) {
|
||||||
Collections.sort(stringElements)
|
Collections.sort(stringElements)
|
||||||
|
|
@ -343,17 +347,26 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
||||||
Collections.sort(otherElements, OtherMessageComparator)
|
Collections.sort(otherElements, OtherMessageComparator)
|
||||||
b.addAllOtherElements(otherElements)
|
b.addAllOtherElements(otherElements)
|
||||||
}
|
}
|
||||||
|
if (!actorRefElements.isEmpty) {
|
||||||
|
Collections.sort(actorRefElements)
|
||||||
|
b.addAllActorRefElements(actorRefElements)
|
||||||
|
}
|
||||||
b.build()
|
b.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
def gsetFromBinary(bytes: Array[Byte]): GSet[_] =
|
def gsetFromBinary(bytes: Array[Byte]): GSet[_] =
|
||||||
gsetFromProto(rd.GSet.parseFrom(bytes))
|
gsetFromProto(rd.GSet.parseFrom(bytes))
|
||||||
|
|
||||||
def gsetFromProto(gset: rd.GSet): GSet[Any] =
|
def gsetFromProto(gset: rd.GSet): GSet[Any] = {
|
||||||
GSet(gset.getStringElementsList.iterator.asScala.toSet ++
|
val elements: Iterator[Any] = {
|
||||||
gset.getIntElementsList.iterator.asScala ++
|
gset.getStringElementsList.iterator.asScala ++
|
||||||
gset.getLongElementsList.iterator.asScala ++
|
gset.getIntElementsList.iterator.asScala ++
|
||||||
gset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto))
|
gset.getLongElementsList.iterator.asScala ++
|
||||||
|
gset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto) ++
|
||||||
|
gset.getActorRefElementsList.iterator.asScala.map(resolveActorRef)
|
||||||
|
}
|
||||||
|
GSet(elements.toSet)
|
||||||
|
}
|
||||||
|
|
||||||
def orsetToProto(orset: ORSet[_]): rd.ORSet =
|
def orsetToProto(orset: ORSet[_]): rd.ORSet =
|
||||||
orsetToProtoImpl(orset.asInstanceOf[ORSet[Any]])
|
orsetToProtoImpl(orset.asInstanceOf[ORSet[Any]])
|
||||||
|
|
@ -366,10 +379,12 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
||||||
val longElements = new ArrayList[jl.Long]
|
val longElements = new ArrayList[jl.Long]
|
||||||
val otherElements = new ArrayList[dm.OtherMessage]
|
val otherElements = new ArrayList[dm.OtherMessage]
|
||||||
var otherElementsMap = Map.empty[dm.OtherMessage, Any]
|
var otherElementsMap = Map.empty[dm.OtherMessage, Any]
|
||||||
|
val actorRefElements = new ArrayList[ActorRef]
|
||||||
orset.elementsMap.keysIterator.foreach {
|
orset.elementsMap.keysIterator.foreach {
|
||||||
case s: String ⇒ stringElements.add(s)
|
case s: String ⇒ stringElements.add(s)
|
||||||
case i: Int ⇒ intElements.add(i)
|
case i: Int ⇒ intElements.add(i)
|
||||||
case l: Long ⇒ longElements.add(l)
|
case l: Long ⇒ longElements.add(l)
|
||||||
|
case ref: ActorRef ⇒ actorRefElements.add(ref)
|
||||||
case other ⇒
|
case other ⇒
|
||||||
val enclosedMsg = otherMessageToProto(other)
|
val enclosedMsg = otherMessageToProto(other)
|
||||||
otherElements.add(enclosedMsg)
|
otherElements.add(enclosedMsg)
|
||||||
|
|
@ -409,6 +424,14 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
||||||
b.addAllOtherElements(otherElements)
|
b.addAllOtherElements(otherElements)
|
||||||
addDots(otherElements)
|
addDots(otherElements)
|
||||||
}
|
}
|
||||||
|
if (!actorRefElements.isEmpty) {
|
||||||
|
Collections.sort(actorRefElements)
|
||||||
|
val iter = actorRefElements.iterator
|
||||||
|
while (iter.hasNext) {
|
||||||
|
b.addActorRefElements(Serialization.serializedActorPath(iter.next()))
|
||||||
|
}
|
||||||
|
addDots(actorRefElements)
|
||||||
|
}
|
||||||
|
|
||||||
b.build()
|
b.build()
|
||||||
}
|
}
|
||||||
|
|
@ -463,11 +486,13 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
||||||
}
|
}
|
||||||
|
|
||||||
def orsetFromProto(orset: rd.ORSet): ORSet[Any] = {
|
def orsetFromProto(orset: rd.ORSet): ORSet[Any] = {
|
||||||
val elements: Iterator[Any] =
|
val elements: Iterator[Any] = {
|
||||||
(orset.getStringElementsList.iterator.asScala ++
|
orset.getStringElementsList.iterator.asScala ++
|
||||||
orset.getIntElementsList.iterator.asScala ++
|
orset.getIntElementsList.iterator.asScala ++
|
||||||
orset.getLongElementsList.iterator.asScala ++
|
orset.getLongElementsList.iterator.asScala ++
|
||||||
orset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto))
|
orset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto) ++
|
||||||
|
orset.getActorRefElementsList.iterator.asScala.map(resolveActorRef)
|
||||||
|
}
|
||||||
|
|
||||||
val dots = orset.getDotsList.asScala.map(versionVectorFromProto).iterator
|
val dots = orset.getDotsList.asScala.map(versionVectorFromProto).iterator
|
||||||
val elementsMap = elements.zip(dots).toMap
|
val elementsMap = elements.zip(dots).toMap
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,15 @@ package akka.cluster.ddata.protobuf
|
||||||
|
|
||||||
import java.util.Base64
|
import java.util.Base64
|
||||||
|
|
||||||
|
import akka.actor.ActorIdentity
|
||||||
|
import akka.actor.ActorRef
|
||||||
import org.scalatest.BeforeAndAfterAll
|
import org.scalatest.BeforeAndAfterAll
|
||||||
import org.scalatest.Matchers
|
import org.scalatest.Matchers
|
||||||
import org.scalatest.WordSpecLike
|
import org.scalatest.WordSpecLike
|
||||||
import akka.actor.ActorSystem
|
import akka.actor.ActorSystem
|
||||||
import akka.actor.Address
|
import akka.actor.Address
|
||||||
import akka.actor.ExtendedActorSystem
|
import akka.actor.ExtendedActorSystem
|
||||||
|
import akka.actor.Identify
|
||||||
import akka.cluster.ddata._
|
import akka.cluster.ddata._
|
||||||
import akka.cluster.ddata.Replicator.Internal._
|
import akka.cluster.ddata.Replicator.Internal._
|
||||||
import akka.testkit.TestKit
|
import akka.testkit.TestKit
|
||||||
|
|
@ -19,10 +22,14 @@ import akka.cluster.UniqueAddress
|
||||||
import akka.remote.RARP
|
import akka.remote.RARP
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.ConfigFactory
|
||||||
import akka.actor.Props
|
import akka.actor.Props
|
||||||
|
import akka.actor.RootActorPath
|
||||||
|
import akka.cluster.Cluster
|
||||||
|
import akka.testkit.TestActors
|
||||||
|
|
||||||
class ReplicatedDataSerializerSpec extends TestKit(ActorSystem(
|
class ReplicatedDataSerializerSpec extends TestKit(ActorSystem(
|
||||||
"ReplicatedDataSerializerSpec",
|
"ReplicatedDataSerializerSpec",
|
||||||
ConfigFactory.parseString("""
|
ConfigFactory.parseString("""
|
||||||
|
akka.loglevel = DEBUG
|
||||||
akka.actor.provider=cluster
|
akka.actor.provider=cluster
|
||||||
akka.remote.netty.tcp.port=0
|
akka.remote.netty.tcp.port=0
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
|
|
@ -109,6 +116,35 @@ class ReplicatedDataSerializerSpec extends TestKit(ActorSystem(
|
||||||
val s3 = ORSet().add(address1, "a").add(address2, 17).remove(address3, 17)
|
val s3 = ORSet().add(address1, "a").add(address2, 17).remove(address3, 17)
|
||||||
val s4 = ORSet().add(address2, 17).remove(address3, 17).add(address1, "a")
|
val s4 = ORSet().add(address2, 17).remove(address3, 17).add(address1, "a")
|
||||||
checkSameContent(s3.merge(s4), s4.merge(s3))
|
checkSameContent(s3.merge(s4), s4.merge(s3))
|
||||||
|
|
||||||
|
// ORSet with ActorRef
|
||||||
|
checkSerialization(ORSet().add(address1, ref1))
|
||||||
|
checkSerialization(ORSet().add(address1, ref1).add(address1, ref2))
|
||||||
|
checkSerialization(ORSet().add(address1, ref1).add(address1, "a").add(address2, ref2) add (address2, "b"))
|
||||||
|
|
||||||
|
val s5 = ORSet().add(address1, "a").add(address2, ref1)
|
||||||
|
val s6 = ORSet().add(address2, ref1).add(address1, "a")
|
||||||
|
checkSameContent(s5.merge(s6), s6.merge(s5))
|
||||||
|
}
|
||||||
|
|
||||||
|
"serialize ORSet with ActorRef message sent between two systems" in {
|
||||||
|
val system2 = ActorSystem(system.name, system.settings.config)
|
||||||
|
try {
|
||||||
|
val echo1 = system.actorOf(TestActors.echoActorProps, "echo1")
|
||||||
|
system2.actorOf(TestActors.echoActorProps, "echo2")
|
||||||
|
|
||||||
|
system.actorSelection(RootActorPath(Cluster(system2).selfAddress) / "user" / "echo2").tell(
|
||||||
|
Identify("2"), testActor)
|
||||||
|
val echo2 = expectMsgType[ActorIdentity].ref.get
|
||||||
|
|
||||||
|
val msg = ORSet.empty[ActorRef].add(Cluster(system), echo1).add(Cluster(system), echo2)
|
||||||
|
echo2.tell(msg, testActor)
|
||||||
|
val reply = expectMsgType[ORSet[ActorRef]]
|
||||||
|
reply.elements should ===(Set(echo1, echo2))
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
shutdown(system2)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"serialize ORSet delta" in {
|
"serialize ORSet delta" in {
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ lazy val benchJmh = akkaModule("akka-bench-jmh")
|
||||||
actor,
|
actor,
|
||||||
stream, streamTests,
|
stream, streamTests,
|
||||||
persistence, persistenceTyped,
|
persistence, persistenceTyped,
|
||||||
distributedData,
|
distributedData, clusterTyped,
|
||||||
testkit
|
testkit
|
||||||
).map(_ % "compile->compile;compile->test"): _*
|
).map(_ % "compile->compile;compile->test"): _*
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue