format source with scalafmt
This commit is contained in:
parent
0f40491d42
commit
ce404e4f53
1669 changed files with 43208 additions and 35404 deletions
|
|
@ -35,6 +35,7 @@ private object ReplicatedDataSerializer {
|
|||
* Generic superclass to allow to compare Entry types used in protobuf.
|
||||
*/
|
||||
abstract class KeyComparator[A <: GeneratedMessage] extends Comparator[A] {
|
||||
|
||||
/**
|
||||
* Get the key from the entry. The key may be a String, Integer, Long, or Any
|
||||
* @param entry The protobuf entry used with Map types
|
||||
|
|
@ -57,19 +58,36 @@ private object ReplicatedDataSerializer {
|
|||
}
|
||||
|
||||
implicit object ORMapEntryComparator extends KeyComparator[rd.ORMap.Entry] {
|
||||
override def getKey(e: rd.ORMap.Entry): Any = if (e.hasStringKey) e.getStringKey else if (e.hasIntKey) e.getIntKey else if (e.hasLongKey) e.getLongKey else e.getOtherKey
|
||||
override def getKey(e: rd.ORMap.Entry): Any =
|
||||
if (e.hasStringKey) e.getStringKey
|
||||
else if (e.hasIntKey) e.getIntKey
|
||||
else if (e.hasLongKey) e.getLongKey
|
||||
else e.getOtherKey
|
||||
}
|
||||
implicit object LWWMapEntryComparator extends KeyComparator[rd.LWWMap.Entry] {
|
||||
override def getKey(e: rd.LWWMap.Entry): Any = if (e.hasStringKey) e.getStringKey else if (e.hasIntKey) e.getIntKey else if (e.hasLongKey) e.getLongKey else e.getOtherKey
|
||||
override def getKey(e: rd.LWWMap.Entry): Any =
|
||||
if (e.hasStringKey) e.getStringKey
|
||||
else if (e.hasIntKey) e.getIntKey
|
||||
else if (e.hasLongKey) e.getLongKey
|
||||
else e.getOtherKey
|
||||
}
|
||||
implicit object PNCounterMapEntryComparator extends KeyComparator[rd.PNCounterMap.Entry] {
|
||||
override def getKey(e: rd.PNCounterMap.Entry): Any = if (e.hasStringKey) e.getStringKey else if (e.hasIntKey) e.getIntKey else if (e.hasLongKey) e.getLongKey else e.getOtherKey
|
||||
override def getKey(e: rd.PNCounterMap.Entry): Any =
|
||||
if (e.hasStringKey) e.getStringKey
|
||||
else if (e.hasIntKey) e.getIntKey
|
||||
else if (e.hasLongKey) e.getLongKey
|
||||
else e.getOtherKey
|
||||
}
|
||||
implicit object ORMultiMapEntryComparator extends KeyComparator[rd.ORMultiMap.Entry] {
|
||||
override def getKey(e: rd.ORMultiMap.Entry): Any = if (e.hasStringKey) e.getStringKey else if (e.hasIntKey) e.getIntKey else if (e.hasLongKey) e.getLongKey else e.getOtherKey
|
||||
override def getKey(e: rd.ORMultiMap.Entry): Any =
|
||||
if (e.hasStringKey) e.getStringKey
|
||||
else if (e.hasIntKey) e.getIntKey
|
||||
else if (e.hasLongKey) e.getLongKey
|
||||
else e.getOtherKey
|
||||
}
|
||||
|
||||
sealed trait ProtoMapEntryWriter[Entry <: GeneratedMessage, EntryBuilder <: GeneratedMessage.Builder[EntryBuilder], Value <: GeneratedMessage] {
|
||||
sealed trait ProtoMapEntryWriter[
|
||||
Entry <: GeneratedMessage, EntryBuilder <: GeneratedMessage.Builder[EntryBuilder], Value <: GeneratedMessage] {
|
||||
def setStringKey(builder: EntryBuilder, key: String, value: Value): Entry
|
||||
def setLongKey(builder: EntryBuilder, key: Long, value: Value): Entry
|
||||
def setIntKey(builder: EntryBuilder, key: Int, value: Value): Entry
|
||||
|
|
@ -88,11 +106,18 @@ private object ReplicatedDataSerializer {
|
|||
def getValue(entry: Entry): A
|
||||
}
|
||||
|
||||
implicit object ORMapEntry extends ProtoMapEntryWriter[rd.ORMap.Entry, rd.ORMap.Entry.Builder, dm.OtherMessage] with ProtoMapEntryReader[rd.ORMap.Entry, dm.OtherMessage] {
|
||||
override def setStringKey(builder: rd.ORMap.Entry.Builder, key: String, value: dm.OtherMessage): rd.ORMap.Entry = builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.ORMap.Entry.Builder, key: Long, value: dm.OtherMessage): rd.ORMap.Entry = builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.ORMap.Entry.Builder, key: Int, value: dm.OtherMessage): rd.ORMap.Entry = builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.ORMap.Entry.Builder, key: dm.OtherMessage, value: dm.OtherMessage): rd.ORMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
implicit object ORMapEntry
|
||||
extends ProtoMapEntryWriter[rd.ORMap.Entry, rd.ORMap.Entry.Builder, dm.OtherMessage]
|
||||
with ProtoMapEntryReader[rd.ORMap.Entry, dm.OtherMessage] {
|
||||
override def setStringKey(builder: rd.ORMap.Entry.Builder, key: String, value: dm.OtherMessage): rd.ORMap.Entry =
|
||||
builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.ORMap.Entry.Builder, key: Long, value: dm.OtherMessage): rd.ORMap.Entry =
|
||||
builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.ORMap.Entry.Builder, key: Int, value: dm.OtherMessage): rd.ORMap.Entry =
|
||||
builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.ORMap.Entry.Builder,
|
||||
key: dm.OtherMessage,
|
||||
value: dm.OtherMessage): rd.ORMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
override def hasStringKey(entry: rd.ORMap.Entry): Boolean = entry.hasStringKey
|
||||
override def getStringKey(entry: rd.ORMap.Entry): String = entry.getStringKey
|
||||
override def hasIntKey(entry: rd.ORMap.Entry): Boolean = entry.hasIntKey
|
||||
|
|
@ -104,11 +129,18 @@ private object ReplicatedDataSerializer {
|
|||
override def getValue(entry: rd.ORMap.Entry): dm.OtherMessage = entry.getValue
|
||||
}
|
||||
|
||||
implicit object LWWMapEntry extends ProtoMapEntryWriter[rd.LWWMap.Entry, rd.LWWMap.Entry.Builder, rd.LWWRegister] with ProtoMapEntryReader[rd.LWWMap.Entry, rd.LWWRegister] {
|
||||
override def setStringKey(builder: rd.LWWMap.Entry.Builder, key: String, value: rd.LWWRegister): rd.LWWMap.Entry = builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.LWWMap.Entry.Builder, key: Long, value: rd.LWWRegister): rd.LWWMap.Entry = builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.LWWMap.Entry.Builder, key: Int, value: rd.LWWRegister): rd.LWWMap.Entry = builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.LWWMap.Entry.Builder, key: OtherMessage, value: rd.LWWRegister): rd.LWWMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
implicit object LWWMapEntry
|
||||
extends ProtoMapEntryWriter[rd.LWWMap.Entry, rd.LWWMap.Entry.Builder, rd.LWWRegister]
|
||||
with ProtoMapEntryReader[rd.LWWMap.Entry, rd.LWWRegister] {
|
||||
override def setStringKey(builder: rd.LWWMap.Entry.Builder, key: String, value: rd.LWWRegister): rd.LWWMap.Entry =
|
||||
builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.LWWMap.Entry.Builder, key: Long, value: rd.LWWRegister): rd.LWWMap.Entry =
|
||||
builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.LWWMap.Entry.Builder, key: Int, value: rd.LWWRegister): rd.LWWMap.Entry =
|
||||
builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.LWWMap.Entry.Builder,
|
||||
key: OtherMessage,
|
||||
value: rd.LWWRegister): rd.LWWMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
override def hasStringKey(entry: rd.LWWMap.Entry): Boolean = entry.hasStringKey
|
||||
override def getStringKey(entry: rd.LWWMap.Entry): String = entry.getStringKey
|
||||
override def hasIntKey(entry: rd.LWWMap.Entry): Boolean = entry.hasIntKey
|
||||
|
|
@ -120,11 +152,24 @@ private object ReplicatedDataSerializer {
|
|||
override def getValue(entry: rd.LWWMap.Entry): rd.LWWRegister = entry.getValue
|
||||
}
|
||||
|
||||
implicit object PNCounterMapEntry extends ProtoMapEntryWriter[rd.PNCounterMap.Entry, rd.PNCounterMap.Entry.Builder, rd.PNCounter] with ProtoMapEntryReader[rd.PNCounterMap.Entry, rd.PNCounter] {
|
||||
override def setStringKey(builder: rd.PNCounterMap.Entry.Builder, key: String, value: rd.PNCounter): rd.PNCounterMap.Entry = builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.PNCounterMap.Entry.Builder, key: Long, value: rd.PNCounter): rd.PNCounterMap.Entry = builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.PNCounterMap.Entry.Builder, key: Int, value: rd.PNCounter): rd.PNCounterMap.Entry = builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.PNCounterMap.Entry.Builder, key: OtherMessage, value: rd.PNCounter): rd.PNCounterMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
implicit object PNCounterMapEntry
|
||||
extends ProtoMapEntryWriter[rd.PNCounterMap.Entry, rd.PNCounterMap.Entry.Builder, rd.PNCounter]
|
||||
with ProtoMapEntryReader[rd.PNCounterMap.Entry, rd.PNCounter] {
|
||||
override def setStringKey(builder: rd.PNCounterMap.Entry.Builder,
|
||||
key: String,
|
||||
value: rd.PNCounter): rd.PNCounterMap.Entry =
|
||||
builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.PNCounterMap.Entry.Builder,
|
||||
key: Long,
|
||||
value: rd.PNCounter): rd.PNCounterMap.Entry =
|
||||
builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.PNCounterMap.Entry.Builder,
|
||||
key: Int,
|
||||
value: rd.PNCounter): rd.PNCounterMap.Entry = builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.PNCounterMap.Entry.Builder,
|
||||
key: OtherMessage,
|
||||
value: rd.PNCounter): rd.PNCounterMap.Entry =
|
||||
builder.setOtherKey(key).setValue(value).build()
|
||||
override def hasStringKey(entry: rd.PNCounterMap.Entry): Boolean = entry.hasStringKey
|
||||
override def getStringKey(entry: rd.PNCounterMap.Entry): String = entry.getStringKey
|
||||
override def hasIntKey(entry: rd.PNCounterMap.Entry): Boolean = entry.hasIntKey
|
||||
|
|
@ -136,11 +181,18 @@ private object ReplicatedDataSerializer {
|
|||
override def getValue(entry: rd.PNCounterMap.Entry): rd.PNCounter = entry.getValue
|
||||
}
|
||||
|
||||
implicit object ORMultiMapEntry extends ProtoMapEntryWriter[rd.ORMultiMap.Entry, rd.ORMultiMap.Entry.Builder, rd.ORSet] with ProtoMapEntryReader[rd.ORMultiMap.Entry, rd.ORSet] {
|
||||
override def setStringKey(builder: rd.ORMultiMap.Entry.Builder, key: String, value: rd.ORSet): rd.ORMultiMap.Entry = builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.ORMultiMap.Entry.Builder, key: Long, value: rd.ORSet): rd.ORMultiMap.Entry = builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.ORMultiMap.Entry.Builder, key: Int, value: rd.ORSet): rd.ORMultiMap.Entry = builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.ORMultiMap.Entry.Builder, key: dm.OtherMessage, value: rd.ORSet): rd.ORMultiMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
implicit object ORMultiMapEntry
|
||||
extends ProtoMapEntryWriter[rd.ORMultiMap.Entry, rd.ORMultiMap.Entry.Builder, rd.ORSet]
|
||||
with ProtoMapEntryReader[rd.ORMultiMap.Entry, rd.ORSet] {
|
||||
override def setStringKey(builder: rd.ORMultiMap.Entry.Builder, key: String, value: rd.ORSet): rd.ORMultiMap.Entry =
|
||||
builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.ORMultiMap.Entry.Builder, key: Long, value: rd.ORSet): rd.ORMultiMap.Entry =
|
||||
builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.ORMultiMap.Entry.Builder, key: Int, value: rd.ORSet): rd.ORMultiMap.Entry =
|
||||
builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.ORMultiMap.Entry.Builder,
|
||||
key: dm.OtherMessage,
|
||||
value: rd.ORSet): rd.ORMultiMap.Entry = builder.setOtherKey(key).setValue(value).build()
|
||||
override def hasStringKey(entry: rd.ORMultiMap.Entry): Boolean = entry.hasStringKey
|
||||
override def getStringKey(entry: rd.ORMultiMap.Entry): String = entry.getStringKey
|
||||
override def hasIntKey(entry: rd.ORMultiMap.Entry): Boolean = entry.hasIntKey
|
||||
|
|
@ -152,11 +204,25 @@ private object ReplicatedDataSerializer {
|
|||
override def getValue(entry: rd.ORMultiMap.Entry): rd.ORSet = entry.getValue
|
||||
}
|
||||
|
||||
implicit object ORMapDeltaGroupEntry extends ProtoMapEntryWriter[rd.ORMapDeltaGroup.MapEntry, rd.ORMapDeltaGroup.MapEntry.Builder, dm.OtherMessage] with ProtoMapEntryReader[rd.ORMapDeltaGroup.MapEntry, dm.OtherMessage] {
|
||||
override def setStringKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder, key: String, value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry = builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder, key: Long, value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry = builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder, key: Int, value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry = builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder, key: dm.OtherMessage, value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry = builder.setOtherKey(key).setValue(value).build()
|
||||
implicit object ORMapDeltaGroupEntry
|
||||
extends ProtoMapEntryWriter[rd.ORMapDeltaGroup.MapEntry, rd.ORMapDeltaGroup.MapEntry.Builder, dm.OtherMessage]
|
||||
with ProtoMapEntryReader[rd.ORMapDeltaGroup.MapEntry, dm.OtherMessage] {
|
||||
override def setStringKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder,
|
||||
key: String,
|
||||
value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry =
|
||||
builder.setStringKey(key).setValue(value).build()
|
||||
override def setLongKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder,
|
||||
key: Long,
|
||||
value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry =
|
||||
builder.setLongKey(key).setValue(value).build()
|
||||
override def setIntKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder,
|
||||
key: Int,
|
||||
value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry =
|
||||
builder.setIntKey(key).setValue(value).build()
|
||||
override def setOtherKey(builder: rd.ORMapDeltaGroup.MapEntry.Builder,
|
||||
key: dm.OtherMessage,
|
||||
value: dm.OtherMessage): rd.ORMapDeltaGroup.MapEntry =
|
||||
builder.setOtherKey(key).setValue(value).build()
|
||||
override def hasStringKey(entry: rd.ORMapDeltaGroup.MapEntry): Boolean = entry.hasStringKey
|
||||
override def getStringKey(entry: rd.ORMapDeltaGroup.MapEntry): String = entry.getStringKey
|
||||
override def hasIntKey(entry: rd.ORMapDeltaGroup.MapEntry): Boolean = entry.hasIntKey
|
||||
|
|
@ -174,7 +240,9 @@ private object ReplicatedDataSerializer {
|
|||
* Protobuf serializer of ReplicatedData.
|
||||
*/
|
||||
class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
||||
extends SerializerWithStringManifest with SerializationSupport with BaseSerializer {
|
||||
extends SerializerWithStringManifest
|
||||
with SerializationSupport
|
||||
with BaseSerializer {
|
||||
|
||||
import ReplicatedDataSerializer._
|
||||
|
||||
|
|
@ -232,7 +300,6 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
ORMultiMapManifest -> multimapFromBinary,
|
||||
DeletedDataManifest -> (_ => DeletedData),
|
||||
VersionVectorManifest -> versionVectorFromBinary,
|
||||
|
||||
GSetKeyManifest -> (bytes => GSetKey(keyIdFromBinary(bytes))),
|
||||
ORSetKeyManifest -> (bytes => ORSetKey(keyIdFromBinary(bytes))),
|
||||
FlagKeyManifest -> (bytes => FlagKey(keyIdFromBinary(bytes))),
|
||||
|
|
@ -264,20 +331,20 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
case DeletedData => DeletedDataManifest
|
||||
case _: VersionVector => VersionVectorManifest
|
||||
|
||||
case _: ORSetKey[_] => ORSetKeyManifest
|
||||
case _: GSetKey[_] => GSetKeyManifest
|
||||
case _: GCounterKey => GCounterKeyManifest
|
||||
case _: PNCounterKey => PNCounterKeyManifest
|
||||
case _: FlagKey => FlagKeyManifest
|
||||
case _: LWWRegisterKey[_] => LWWRegisterKeyManifest
|
||||
case _: ORMapKey[_, _] => ORMapKeyManifest
|
||||
case _: LWWMapKey[_, _] => LWWMapKeyManifest
|
||||
case _: PNCounterMapKey[_] => PNCounterMapKeyManifest
|
||||
case _: ORMultiMapKey[_, _] => ORMultiMapKeyManifest
|
||||
case _: ORSetKey[_] => ORSetKeyManifest
|
||||
case _: GSetKey[_] => GSetKeyManifest
|
||||
case _: GCounterKey => GCounterKeyManifest
|
||||
case _: PNCounterKey => PNCounterKeyManifest
|
||||
case _: FlagKey => FlagKeyManifest
|
||||
case _: LWWRegisterKey[_] => LWWRegisterKeyManifest
|
||||
case _: ORMapKey[_, _] => ORMapKeyManifest
|
||||
case _: LWWMapKey[_, _] => LWWMapKeyManifest
|
||||
case _: PNCounterMapKey[_] => PNCounterMapKeyManifest
|
||||
case _: ORMultiMapKey[_, _] => ORMultiMapKeyManifest
|
||||
|
||||
case _: ORSet.DeltaGroup[_] => ORSetDeltaGroupManifest
|
||||
case _: ORMap.DeltaGroup[_, _] => ORMapDeltaGroupManifest
|
||||
case _: ORSet.FullStateDeltaOp[_] => ORSetFullManifest
|
||||
case _: ORSet.DeltaGroup[_] => ORSetDeltaGroupManifest
|
||||
case _: ORMap.DeltaGroup[_, _] => ORMapDeltaGroupManifest
|
||||
case _: ORSet.FullStateDeltaOp[_] => ORSetFullManifest
|
||||
|
||||
case _ =>
|
||||
throw new IllegalArgumentException(s"Can't serialize object of type ${obj.getClass} in [${getClass.getName}]")
|
||||
|
|
@ -313,8 +380,9 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
override def fromBinary(bytes: Array[Byte], manifest: String): AnyRef =
|
||||
fromBinaryMap.get(manifest) match {
|
||||
case Some(f) => f(bytes)
|
||||
case None => throw new NotSerializableException(
|
||||
s"Unimplemented deserialization of message with manifest [$manifest] in [${getClass.getName}]")
|
||||
case None =>
|
||||
throw new NotSerializableException(
|
||||
s"Unimplemented deserialization of message with manifest [$manifest] in [${getClass.getName}]")
|
||||
}
|
||||
|
||||
def gsetToProto(gset: GSet[_]): rd.GSet = {
|
||||
|
|
@ -361,10 +429,10 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
def gsetFromProto(gset: rd.GSet): GSet[Any] = {
|
||||
val elements: Iterator[Any] = {
|
||||
gset.getStringElementsList.iterator.asScala ++
|
||||
gset.getIntElementsList.iterator.asScala ++
|
||||
gset.getLongElementsList.iterator.asScala ++
|
||||
gset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto) ++
|
||||
gset.getActorRefElementsList.iterator.asScala.map(resolveActorRef)
|
||||
gset.getIntElementsList.iterator.asScala ++
|
||||
gset.getLongElementsList.iterator.asScala ++
|
||||
gset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto) ++
|
||||
gset.getActorRefElementsList.iterator.asScala.map(resolveActorRef)
|
||||
}
|
||||
GSet(elements.toSet)
|
||||
}
|
||||
|
|
@ -451,9 +519,7 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
private def orsetDeltaGroupToProto(deltaGroup: ORSet.DeltaGroup[_]): rd.ORSetDeltaGroup = {
|
||||
def createEntry(opType: rd.ORSetDeltaOp, u: ORSet[_]) = {
|
||||
rd.ORSetDeltaGroup.Entry.newBuilder()
|
||||
.setOperation(opType)
|
||||
.setUnderlying(orsetToProto(u))
|
||||
rd.ORSetDeltaGroup.Entry.newBuilder().setOperation(opType).setUnderlying(orsetToProto(u))
|
||||
}
|
||||
|
||||
val b = rd.ORSetDeltaGroup.newBuilder()
|
||||
|
|
@ -473,26 +539,28 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
private def orsetDeltaGroupFromBinary(bytes: Array[Byte]): ORSet.DeltaGroup[Any] = {
|
||||
val deltaGroup = rd.ORSetDeltaGroup.parseFrom(bytes)
|
||||
val ops: Vector[ORSet.DeltaOp] =
|
||||
deltaGroup.getEntriesList.asScala.iterator.map { entry =>
|
||||
if (entry.getOperation == rd.ORSetDeltaOp.Add)
|
||||
ORSet.AddDeltaOp(orsetFromProto(entry.getUnderlying))
|
||||
else if (entry.getOperation == rd.ORSetDeltaOp.Remove)
|
||||
ORSet.RemoveDeltaOp(orsetFromProto(entry.getUnderlying))
|
||||
else if (entry.getOperation == rd.ORSetDeltaOp.Full)
|
||||
ORSet.FullStateDeltaOp(orsetFromProto(entry.getUnderlying))
|
||||
else
|
||||
throw new NotSerializableException(s"Unknow ORSet delta operation ${entry.getOperation}")
|
||||
}.to(immutable.Vector)
|
||||
deltaGroup.getEntriesList.asScala.iterator
|
||||
.map { entry =>
|
||||
if (entry.getOperation == rd.ORSetDeltaOp.Add)
|
||||
ORSet.AddDeltaOp(orsetFromProto(entry.getUnderlying))
|
||||
else if (entry.getOperation == rd.ORSetDeltaOp.Remove)
|
||||
ORSet.RemoveDeltaOp(orsetFromProto(entry.getUnderlying))
|
||||
else if (entry.getOperation == rd.ORSetDeltaOp.Full)
|
||||
ORSet.FullStateDeltaOp(orsetFromProto(entry.getUnderlying))
|
||||
else
|
||||
throw new NotSerializableException(s"Unknow ORSet delta operation ${entry.getOperation}")
|
||||
}
|
||||
.to(immutable.Vector)
|
||||
ORSet.DeltaGroup(ops)
|
||||
}
|
||||
|
||||
def orsetFromProto(orset: rd.ORSet): ORSet[Any] = {
|
||||
val elements: Iterator[Any] = {
|
||||
orset.getStringElementsList.iterator.asScala ++
|
||||
orset.getIntElementsList.iterator.asScala ++
|
||||
orset.getLongElementsList.iterator.asScala ++
|
||||
orset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto) ++
|
||||
orset.getActorRefElementsList.iterator.asScala.map(resolveActorRef)
|
||||
orset.getIntElementsList.iterator.asScala ++
|
||||
orset.getLongElementsList.iterator.asScala ++
|
||||
orset.getOtherElementsList.iterator.asScala.map(otherMessageFromProto) ++
|
||||
orset.getActorRefElementsList.iterator.asScala.map(resolveActorRef)
|
||||
}
|
||||
|
||||
val dots = orset.getDotsList.asScala.map(versionVectorFromProto).iterator
|
||||
|
|
@ -511,26 +579,30 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
if (flag.getEnabled) Flag.Enabled else Flag.Disabled
|
||||
|
||||
def lwwRegisterToProto(lwwRegister: LWWRegister[_]): rd.LWWRegister =
|
||||
rd.LWWRegister.newBuilder().
|
||||
setTimestamp(lwwRegister.timestamp).
|
||||
setNode(uniqueAddressToProto(lwwRegister.node)).
|
||||
setState(otherMessageToProto(lwwRegister.value)).
|
||||
build()
|
||||
rd.LWWRegister
|
||||
.newBuilder()
|
||||
.setTimestamp(lwwRegister.timestamp)
|
||||
.setNode(uniqueAddressToProto(lwwRegister.node))
|
||||
.setState(otherMessageToProto(lwwRegister.value))
|
||||
.build()
|
||||
|
||||
def lwwRegisterFromBinary(bytes: Array[Byte]): LWWRegister[Any] =
|
||||
lwwRegisterFromProto(rd.LWWRegister.parseFrom(bytes))
|
||||
|
||||
def lwwRegisterFromProto(lwwRegister: rd.LWWRegister): LWWRegister[Any] =
|
||||
new LWWRegister(
|
||||
uniqueAddressFromProto(lwwRegister.getNode),
|
||||
otherMessageFromProto(lwwRegister.getState),
|
||||
lwwRegister.getTimestamp)
|
||||
new LWWRegister(uniqueAddressFromProto(lwwRegister.getNode),
|
||||
otherMessageFromProto(lwwRegister.getState),
|
||||
lwwRegister.getTimestamp)
|
||||
|
||||
def gcounterToProto(gcounter: GCounter): rd.GCounter = {
|
||||
val b = rd.GCounter.newBuilder()
|
||||
gcounter.state.toVector.sortBy { case (address, _) => address }.foreach {
|
||||
case (address, value) => b.addEntries(rd.GCounter.Entry.newBuilder().
|
||||
setNode(uniqueAddressToProto(address)).setValue(ByteString.copyFrom(value.toByteArray)))
|
||||
case (address, value) =>
|
||||
b.addEntries(
|
||||
rd.GCounter.Entry
|
||||
.newBuilder()
|
||||
.setNode(uniqueAddressToProto(address))
|
||||
.setValue(ByteString.copyFrom(value.toByteArray)))
|
||||
}
|
||||
b.build()
|
||||
}
|
||||
|
|
@ -539,82 +611,101 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
gcounterFromProto(rd.GCounter.parseFrom(bytes))
|
||||
|
||||
def gcounterFromProto(gcounter: rd.GCounter): GCounter = {
|
||||
new GCounter(state = gcounter.getEntriesList.asScala.iterator.map(entry =>
|
||||
uniqueAddressFromProto(entry.getNode) -> BigInt(entry.getValue.toByteArray)).toMap)
|
||||
new GCounter(
|
||||
state = gcounter.getEntriesList.asScala.iterator
|
||||
.map(entry => uniqueAddressFromProto(entry.getNode) -> BigInt(entry.getValue.toByteArray))
|
||||
.toMap)
|
||||
}
|
||||
|
||||
def pncounterToProto(pncounter: PNCounter): rd.PNCounter =
|
||||
rd.PNCounter.newBuilder().
|
||||
setIncrements(gcounterToProto(pncounter.increments)).
|
||||
setDecrements(gcounterToProto(pncounter.decrements)).
|
||||
build()
|
||||
rd.PNCounter
|
||||
.newBuilder()
|
||||
.setIncrements(gcounterToProto(pncounter.increments))
|
||||
.setDecrements(gcounterToProto(pncounter.decrements))
|
||||
.build()
|
||||
|
||||
def pncounterFromBinary(bytes: Array[Byte]): PNCounter =
|
||||
pncounterFromProto(rd.PNCounter.parseFrom(bytes))
|
||||
|
||||
def pncounterFromProto(pncounter: rd.PNCounter): PNCounter = {
|
||||
new PNCounter(
|
||||
increments = gcounterFromProto(pncounter.getIncrements),
|
||||
decrements = gcounterFromProto(pncounter.getDecrements))
|
||||
new PNCounter(increments = gcounterFromProto(pncounter.getIncrements),
|
||||
decrements = gcounterFromProto(pncounter.getDecrements))
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a Map[A, B] to an Iterable[Entry] where Entry is the protobuf map entry.
|
||||
*/
|
||||
private def getEntries[IKey, IValue, EntryBuilder <: GeneratedMessage.Builder[EntryBuilder], PEntry <: GeneratedMessage, PValue <: GeneratedMessage](input: Map[IKey, IValue], createBuilder: () => EntryBuilder, valueConverter: IValue => PValue)(implicit comparator: Comparator[PEntry], eh: ProtoMapEntryWriter[PEntry, EntryBuilder, PValue]): java.lang.Iterable[PEntry] = {
|
||||
private def getEntries[IKey,
|
||||
IValue,
|
||||
EntryBuilder <: GeneratedMessage.Builder[EntryBuilder],
|
||||
PEntry <: GeneratedMessage,
|
||||
PValue <: GeneratedMessage](input: Map[IKey, IValue],
|
||||
createBuilder: () => EntryBuilder,
|
||||
valueConverter: IValue => PValue)(
|
||||
implicit comparator: Comparator[PEntry],
|
||||
eh: ProtoMapEntryWriter[PEntry, EntryBuilder, PValue]): java.lang.Iterable[PEntry] = {
|
||||
// The resulting Iterable needs to be ordered deterministically in order to create same signature upon serializing same data
|
||||
val protoEntries = new TreeSet[PEntry](comparator)
|
||||
input.foreach {
|
||||
case (key: String, value) => protoEntries.add(eh.setStringKey(createBuilder(), key, valueConverter(value)))
|
||||
case (key: Int, value) => protoEntries.add(eh.setIntKey(createBuilder(), key, valueConverter(value)))
|
||||
case (key: Long, value) => protoEntries.add(eh.setLongKey(createBuilder(), key, valueConverter(value)))
|
||||
case (key, value) => protoEntries.add(eh.setOtherKey(createBuilder(), otherMessageToProto(key), valueConverter(value)))
|
||||
case (key, value) =>
|
||||
protoEntries.add(eh.setOtherKey(createBuilder(), otherMessageToProto(key), valueConverter(value)))
|
||||
}
|
||||
protoEntries
|
||||
}
|
||||
|
||||
def ormapToProto(ormap: ORMap[_, _]): rd.ORMap = {
|
||||
val ormapBuilder = rd.ORMap.newBuilder()
|
||||
val entries: jl.Iterable[rd.ORMap.Entry] = getEntries(ormap.values, rd.ORMap.Entry.newBuilder _, otherMessageToProto)
|
||||
val entries: jl.Iterable[rd.ORMap.Entry] =
|
||||
getEntries(ormap.values, rd.ORMap.Entry.newBuilder _, otherMessageToProto)
|
||||
ormapBuilder.setKeys(orsetToProto(ormap.keys)).addAllEntries(entries).build()
|
||||
}
|
||||
|
||||
def ormapFromBinary(bytes: Array[Byte]): ORMap[Any, ReplicatedData] =
|
||||
ormapFromProto(rd.ORMap.parseFrom(decompress(bytes)))
|
||||
|
||||
def mapTypeFromProto[PEntry <: GeneratedMessage, A <: GeneratedMessage, B <: ReplicatedData](input: util.List[PEntry], valueCreator: A => B)(implicit eh: ProtoMapEntryReader[PEntry, A]): Map[Any, B] = {
|
||||
def mapTypeFromProto[PEntry <: GeneratedMessage, A <: GeneratedMessage, B <: ReplicatedData](
|
||||
input: util.List[PEntry],
|
||||
valueCreator: A => B)(implicit eh: ProtoMapEntryReader[PEntry, A]): Map[Any, B] = {
|
||||
input.asScala.map { entry =>
|
||||
if (eh.hasStringKey(entry)) eh.getStringKey(entry) -> valueCreator(eh.getValue(entry))
|
||||
else if (eh.hasIntKey(entry)) eh.getIntKey(entry) -> valueCreator(eh.getValue(entry))
|
||||
else if (eh.hasLongKey(entry)) eh.getLongKey(entry) -> valueCreator(eh.getValue(entry))
|
||||
else if (eh.hasOtherKey(entry)) otherMessageFromProto(eh.getOtherKey(entry)) -> valueCreator(eh.getValue(entry))
|
||||
else throw new IllegalArgumentException(s"Can't deserialize ${entry.getClass} because it does not have any key in the serialized message.")
|
||||
else
|
||||
throw new IllegalArgumentException(
|
||||
s"Can't deserialize ${entry.getClass} because it does not have any key in the serialized message.")
|
||||
}.toMap
|
||||
}
|
||||
|
||||
def ormapFromProto(ormap: rd.ORMap): ORMap[Any, ReplicatedData] = {
|
||||
val entries = mapTypeFromProto(ormap.getEntriesList, (v: dm.OtherMessage) => otherMessageFromProto(v).asInstanceOf[ReplicatedData])
|
||||
new ORMap(
|
||||
keys = orsetFromProto(ormap.getKeys),
|
||||
entries,
|
||||
ORMap.VanillaORMapTag)
|
||||
val entries = mapTypeFromProto(ormap.getEntriesList,
|
||||
(v: dm.OtherMessage) => otherMessageFromProto(v).asInstanceOf[ReplicatedData])
|
||||
new ORMap(keys = orsetFromProto(ormap.getKeys), entries, ORMap.VanillaORMapTag)
|
||||
}
|
||||
|
||||
def singleMapEntryFromProto[PEntry <: GeneratedMessage, A <: GeneratedMessage, B <: ReplicatedData](input: util.List[PEntry], valueCreator: A => B)(implicit eh: ProtoMapEntryReader[PEntry, A]): Map[Any, B] = {
|
||||
def singleMapEntryFromProto[PEntry <: GeneratedMessage, A <: GeneratedMessage, B <: ReplicatedData](
|
||||
input: util.List[PEntry],
|
||||
valueCreator: A => B)(implicit eh: ProtoMapEntryReader[PEntry, A]): Map[Any, B] = {
|
||||
val map = mapTypeFromProto(input, valueCreator)
|
||||
if (map.size > 1)
|
||||
throw new IllegalArgumentException(s"Can't deserialize the key/value pair in the ORMap delta - too many pairs on the wire")
|
||||
throw new IllegalArgumentException(
|
||||
s"Can't deserialize the key/value pair in the ORMap delta - too many pairs on the wire")
|
||||
else
|
||||
map
|
||||
}
|
||||
|
||||
def singleKeyEntryFromProto[PEntry <: GeneratedMessage, A <: GeneratedMessage](entryOption: Option[PEntry])(implicit eh: ProtoMapEntryReader[PEntry, A]): Any =
|
||||
def singleKeyEntryFromProto[PEntry <: GeneratedMessage, A <: GeneratedMessage](entryOption: Option[PEntry])(
|
||||
implicit eh: ProtoMapEntryReader[PEntry, A]): Any =
|
||||
entryOption match {
|
||||
case Some(entry) => if (eh.hasStringKey(entry)) eh.getStringKey(entry)
|
||||
else if (eh.hasIntKey(entry)) eh.getIntKey(entry)
|
||||
else if (eh.hasLongKey(entry)) eh.getLongKey(entry)
|
||||
else if (eh.hasOtherKey(entry)) otherMessageFromProto(eh.getOtherKey(entry))
|
||||
else throw new IllegalArgumentException(s"Can't deserialize the key in the ORMap delta")
|
||||
case Some(entry) =>
|
||||
if (eh.hasStringKey(entry)) eh.getStringKey(entry)
|
||||
else if (eh.hasIntKey(entry)) eh.getIntKey(entry)
|
||||
else if (eh.hasLongKey(entry)) eh.getLongKey(entry)
|
||||
else if (eh.hasOtherKey(entry)) otherMessageFromProto(eh.getOtherKey(entry))
|
||||
else throw new IllegalArgumentException(s"Can't deserialize the key in the ORMap delta")
|
||||
case _ => throw new IllegalArgumentException(s"Can't deserialize the key in the ORMap delta")
|
||||
}
|
||||
|
||||
|
|
@ -656,12 +747,12 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
// this can be made client-extendable in the same way as Http codes in Spray are
|
||||
private def zeroTagFromCode(code: Int) = code match {
|
||||
case ORMap.VanillaORMapTag.value => ORMap.VanillaORMapTag
|
||||
case PNCounterMap.PNCounterMapTag.value => PNCounterMap.PNCounterMapTag
|
||||
case ORMultiMap.ORMultiMapTag.value => ORMultiMap.ORMultiMapTag
|
||||
case ORMap.VanillaORMapTag.value => ORMap.VanillaORMapTag
|
||||
case PNCounterMap.PNCounterMapTag.value => PNCounterMap.PNCounterMapTag
|
||||
case ORMultiMap.ORMultiMapTag.value => ORMultiMap.ORMultiMapTag
|
||||
case ORMultiMap.ORMultiMapWithValueDeltasTag.value => ORMultiMap.ORMultiMapWithValueDeltasTag
|
||||
case LWWMap.LWWMapTag.value => LWWMap.LWWMapTag
|
||||
case _ => throw new IllegalArgumentException("Invalid ZeroTag code")
|
||||
case LWWMap.LWWMapTag.value => LWWMap.LWWMapTag
|
||||
case _ => throw new IllegalArgumentException("Invalid ZeroTag code")
|
||||
}
|
||||
|
||||
private def ormapDeltaGroupFromBinary(bytes: Array[Byte]): ORMap.DeltaGroup[Any, ReplicatedData] = {
|
||||
|
|
@ -671,21 +762,33 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
private def ormapDeltaGroupOpsFromBinary(bytes: Array[Byte]): scala.collection.immutable.IndexedSeq[ORMap.DeltaOp] = {
|
||||
val deltaGroup = rd.ORMapDeltaGroup.parseFrom(bytes)
|
||||
val ops: Vector[ORMap.DeltaOp] =
|
||||
deltaGroup.getEntriesList.asScala.iterator.map { entry =>
|
||||
if (entry.getOperation == rd.ORMapDeltaOp.ORMapPut) {
|
||||
val map = singleMapEntryFromProto(entry.getEntryDataList, (v: dm.OtherMessage) => otherMessageFromProto(v).asInstanceOf[ReplicatedData])
|
||||
ORMap.PutDeltaOp(ORSet.AddDeltaOp(orsetFromProto(entry.getUnderlying)), map.head, zeroTagFromCode(entry.getZeroTag))
|
||||
} else if (entry.getOperation == rd.ORMapDeltaOp.ORMapRemove) {
|
||||
ORMap.RemoveDeltaOp(ORSet.RemoveDeltaOp(orsetFromProto(entry.getUnderlying)), zeroTagFromCode(entry.getZeroTag))
|
||||
} else if (entry.getOperation == rd.ORMapDeltaOp.ORMapRemoveKey) {
|
||||
val elem = singleKeyEntryFromProto(entry.getEntryDataList.asScala.headOption)
|
||||
ORMap.RemoveKeyDeltaOp(ORSet.RemoveDeltaOp(orsetFromProto(entry.getUnderlying)), elem, zeroTagFromCode(entry.getZeroTag))
|
||||
} else if (entry.getOperation == rd.ORMapDeltaOp.ORMapUpdate) {
|
||||
val map = mapTypeFromProto(entry.getEntryDataList, (v: dm.OtherMessage) => otherMessageFromProto(v).asInstanceOf[ReplicatedDelta])
|
||||
ORMap.UpdateDeltaOp(ORSet.AddDeltaOp(orsetFromProto(entry.getUnderlying)), map, zeroTagFromCode(entry.getZeroTag))
|
||||
} else
|
||||
throw new NotSerializableException(s"Unknown ORMap delta operation ${entry.getOperation}")
|
||||
}.to(immutable.Vector)
|
||||
deltaGroup.getEntriesList.asScala.iterator
|
||||
.map { entry =>
|
||||
if (entry.getOperation == rd.ORMapDeltaOp.ORMapPut) {
|
||||
val map =
|
||||
singleMapEntryFromProto(entry.getEntryDataList,
|
||||
(v: dm.OtherMessage) => otherMessageFromProto(v).asInstanceOf[ReplicatedData])
|
||||
ORMap.PutDeltaOp(ORSet.AddDeltaOp(orsetFromProto(entry.getUnderlying)),
|
||||
map.head,
|
||||
zeroTagFromCode(entry.getZeroTag))
|
||||
} else if (entry.getOperation == rd.ORMapDeltaOp.ORMapRemove) {
|
||||
ORMap.RemoveDeltaOp(ORSet.RemoveDeltaOp(orsetFromProto(entry.getUnderlying)),
|
||||
zeroTagFromCode(entry.getZeroTag))
|
||||
} else if (entry.getOperation == rd.ORMapDeltaOp.ORMapRemoveKey) {
|
||||
val elem = singleKeyEntryFromProto(entry.getEntryDataList.asScala.headOption)
|
||||
ORMap.RemoveKeyDeltaOp(ORSet.RemoveDeltaOp(orsetFromProto(entry.getUnderlying)),
|
||||
elem,
|
||||
zeroTagFromCode(entry.getZeroTag))
|
||||
} else if (entry.getOperation == rd.ORMapDeltaOp.ORMapUpdate) {
|
||||
val map = mapTypeFromProto(entry.getEntryDataList,
|
||||
(v: dm.OtherMessage) => otherMessageFromProto(v).asInstanceOf[ReplicatedDelta])
|
||||
ORMap.UpdateDeltaOp(ORSet.AddDeltaOp(orsetFromProto(entry.getUnderlying)),
|
||||
map,
|
||||
zeroTagFromCode(entry.getZeroTag))
|
||||
} else
|
||||
throw new NotSerializableException(s"Unknown ORMap delta operation ${entry.getOperation}")
|
||||
}
|
||||
.to(immutable.Vector)
|
||||
ops
|
||||
}
|
||||
|
||||
|
|
@ -714,15 +817,25 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
if (m.size > 1 && opType != rd.ORMapDeltaOp.ORMapUpdate)
|
||||
throw new IllegalArgumentException("Invalid size of ORMap delta map")
|
||||
else {
|
||||
val builder = rd.ORMapDeltaGroup.Entry.newBuilder()
|
||||
.setOperation(opType)
|
||||
.setUnderlying(orsetToProto(u))
|
||||
.setZeroTag(zt)
|
||||
val builder =
|
||||
rd.ORMapDeltaGroup.Entry.newBuilder().setOperation(opType).setUnderlying(orsetToProto(u)).setZeroTag(zt)
|
||||
m.foreach {
|
||||
case (key: String, value) => builder.addEntryData(rd.ORMapDeltaGroup.MapEntry.newBuilder().setStringKey(key).setValue(otherMessageToProto(value)).build())
|
||||
case (key: Int, value) => builder.addEntryData(rd.ORMapDeltaGroup.MapEntry.newBuilder().setIntKey(key).setValue(otherMessageToProto(value)).build())
|
||||
case (key: Long, value) => builder.addEntryData(rd.ORMapDeltaGroup.MapEntry.newBuilder().setLongKey(key).setValue(otherMessageToProto(value)).build())
|
||||
case (key, value) => builder.addEntryData(rd.ORMapDeltaGroup.MapEntry.newBuilder().setOtherKey(otherMessageToProto(key)).setValue(otherMessageToProto(value)).build())
|
||||
case (key: String, value) =>
|
||||
builder.addEntryData(
|
||||
rd.ORMapDeltaGroup.MapEntry.newBuilder().setStringKey(key).setValue(otherMessageToProto(value)).build())
|
||||
case (key: Int, value) =>
|
||||
builder.addEntryData(
|
||||
rd.ORMapDeltaGroup.MapEntry.newBuilder().setIntKey(key).setValue(otherMessageToProto(value)).build())
|
||||
case (key: Long, value) =>
|
||||
builder.addEntryData(
|
||||
rd.ORMapDeltaGroup.MapEntry.newBuilder().setLongKey(key).setValue(otherMessageToProto(value)).build())
|
||||
case (key, value) =>
|
||||
builder.addEntryData(
|
||||
rd.ORMapDeltaGroup.MapEntry
|
||||
.newBuilder()
|
||||
.setOtherKey(otherMessageToProto(key))
|
||||
.setValue(otherMessageToProto(value))
|
||||
.build())
|
||||
}
|
||||
builder
|
||||
}
|
||||
|
|
@ -736,10 +849,8 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
case key: Long => entryDataBuilder.setLongKey(key)
|
||||
case key => entryDataBuilder.setOtherKey(otherMessageToProto(key))
|
||||
}
|
||||
val builder = rd.ORMapDeltaGroup.Entry.newBuilder()
|
||||
.setOperation(opType)
|
||||
.setUnderlying(orsetToProto(u))
|
||||
.setZeroTag(zt)
|
||||
val builder =
|
||||
rd.ORMapDeltaGroup.Entry.newBuilder().setOperation(opType).setUnderlying(orsetToProto(u)).setZeroTag(zt)
|
||||
builder.addEntryData(entryDataBuilder.build())
|
||||
builder
|
||||
}
|
||||
|
|
@ -747,13 +858,23 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
val b = rd.ORMapDeltaGroup.newBuilder()
|
||||
deltaGroupOps.foreach {
|
||||
case ORMap.PutDeltaOp(op, pair, zt) =>
|
||||
b.addEntries(createEntry(rd.ORMapDeltaOp.ORMapPut, op.asInstanceOf[ORSet.AddDeltaOp[_]].underlying, Map(pair), zt.value))
|
||||
b.addEntries(
|
||||
createEntry(rd.ORMapDeltaOp.ORMapPut, op.asInstanceOf[ORSet.AddDeltaOp[_]].underlying, Map(pair), zt.value))
|
||||
case ORMap.RemoveDeltaOp(op, zt) =>
|
||||
b.addEntries(createEntry(rd.ORMapDeltaOp.ORMapRemove, op.asInstanceOf[ORSet.RemoveDeltaOp[_]].underlying, Map.empty, zt.value))
|
||||
b.addEntries(
|
||||
createEntry(rd.ORMapDeltaOp.ORMapRemove,
|
||||
op.asInstanceOf[ORSet.RemoveDeltaOp[_]].underlying,
|
||||
Map.empty,
|
||||
zt.value))
|
||||
case ORMap.RemoveKeyDeltaOp(op, k, zt) =>
|
||||
b.addEntries(createEntryWithKey(rd.ORMapDeltaOp.ORMapRemoveKey, op.asInstanceOf[ORSet.RemoveDeltaOp[_]].underlying, k, zt.value))
|
||||
b.addEntries(
|
||||
createEntryWithKey(rd.ORMapDeltaOp.ORMapRemoveKey,
|
||||
op.asInstanceOf[ORSet.RemoveDeltaOp[_]].underlying,
|
||||
k,
|
||||
zt.value))
|
||||
case ORMap.UpdateDeltaOp(op, m, zt) =>
|
||||
b.addEntries(createEntry(rd.ORMapDeltaOp.ORMapUpdate, op.asInstanceOf[ORSet.AddDeltaOp[_]].underlying, m, zt.value))
|
||||
b.addEntries(
|
||||
createEntry(rd.ORMapDeltaOp.ORMapUpdate, op.asInstanceOf[ORSet.AddDeltaOp[_]].underlying, m, zt.value))
|
||||
case ORMap.DeltaGroup(u) =>
|
||||
throw new IllegalArgumentException("ORMap.DeltaGroup should not be nested")
|
||||
}
|
||||
|
|
@ -762,7 +883,8 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
def lwwmapToProto(lwwmap: LWWMap[_, _]): rd.LWWMap = {
|
||||
val lwwmapBuilder = rd.LWWMap.newBuilder()
|
||||
val entries: jl.Iterable[rd.LWWMap.Entry] = getEntries(lwwmap.underlying.entries, rd.LWWMap.Entry.newBuilder _, lwwRegisterToProto)
|
||||
val entries: jl.Iterable[rd.LWWMap.Entry] =
|
||||
getEntries(lwwmap.underlying.entries, rd.LWWMap.Entry.newBuilder _, lwwRegisterToProto)
|
||||
lwwmapBuilder.setKeys(orsetToProto(lwwmap.underlying.keys)).addAllEntries(entries).build()
|
||||
}
|
||||
|
||||
|
|
@ -771,14 +893,13 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
def lwwmapFromProto(lwwmap: rd.LWWMap): LWWMap[Any, Any] = {
|
||||
val entries = mapTypeFromProto(lwwmap.getEntriesList, lwwRegisterFromProto)
|
||||
new LWWMap(new ORMap(
|
||||
keys = orsetFromProto(lwwmap.getKeys),
|
||||
entries, LWWMap.LWWMapTag))
|
||||
new LWWMap(new ORMap(keys = orsetFromProto(lwwmap.getKeys), entries, LWWMap.LWWMapTag))
|
||||
}
|
||||
|
||||
def pncountermapToProto(pncountermap: PNCounterMap[_]): rd.PNCounterMap = {
|
||||
val pncountermapBuilder = rd.PNCounterMap.newBuilder()
|
||||
val entries: jl.Iterable[rd.PNCounterMap.Entry] = getEntries(pncountermap.underlying.entries, rd.PNCounterMap.Entry.newBuilder _, pncounterToProto)
|
||||
val entries: jl.Iterable[rd.PNCounterMap.Entry] =
|
||||
getEntries(pncountermap.underlying.entries, rd.PNCounterMap.Entry.newBuilder _, pncounterToProto)
|
||||
pncountermapBuilder.setKeys(orsetToProto(pncountermap.underlying.keys)).addAllEntries(entries).build()
|
||||
}
|
||||
|
||||
|
|
@ -787,14 +908,13 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
def pncountermapFromProto(pncountermap: rd.PNCounterMap): PNCounterMap[_] = {
|
||||
val entries = mapTypeFromProto(pncountermap.getEntriesList, pncounterFromProto)
|
||||
new PNCounterMap(new ORMap(
|
||||
keys = orsetFromProto(pncountermap.getKeys),
|
||||
entries, PNCounterMap.PNCounterMapTag))
|
||||
new PNCounterMap(new ORMap(keys = orsetFromProto(pncountermap.getKeys), entries, PNCounterMap.PNCounterMapTag))
|
||||
}
|
||||
|
||||
def multimapToProto(multimap: ORMultiMap[_, _]): rd.ORMultiMap = {
|
||||
val ormultimapBuilder = rd.ORMultiMap.newBuilder()
|
||||
val entries: jl.Iterable[rd.ORMultiMap.Entry] = getEntries(multimap.underlying.entries, rd.ORMultiMap.Entry.newBuilder _, orsetToProto)
|
||||
val entries: jl.Iterable[rd.ORMultiMap.Entry] =
|
||||
getEntries(multimap.underlying.entries, rd.ORMultiMap.Entry.newBuilder _, orsetToProto)
|
||||
ormultimapBuilder.setKeys(orsetToProto(multimap.underlying.keys)).addAllEntries(entries)
|
||||
if (multimap.withValueDeltas)
|
||||
ormultimapBuilder.setWithValueDeltas(true)
|
||||
|
|
@ -806,18 +926,17 @@ class ReplicatedDataSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
def multimapFromProto(multimap: rd.ORMultiMap): ORMultiMap[Any, Any] = {
|
||||
val entries = mapTypeFromProto(multimap.getEntriesList, orsetFromProto)
|
||||
val withValueDeltas = if (multimap.hasWithValueDeltas)
|
||||
multimap.getWithValueDeltas
|
||||
else false
|
||||
new ORMultiMap(
|
||||
new ORMap(
|
||||
keys = orsetFromProto(multimap.getKeys),
|
||||
entries,
|
||||
if (withValueDeltas)
|
||||
ORMultiMap.ORMultiMapWithValueDeltasTag
|
||||
else
|
||||
ORMultiMap.ORMultiMapTag),
|
||||
withValueDeltas)
|
||||
val withValueDeltas =
|
||||
if (multimap.hasWithValueDeltas)
|
||||
multimap.getWithValueDeltas
|
||||
else false
|
||||
new ORMultiMap(new ORMap(keys = orsetFromProto(multimap.getKeys),
|
||||
entries,
|
||||
if (withValueDeltas)
|
||||
ORMultiMap.ORMultiMapWithValueDeltasTag
|
||||
else
|
||||
ORMultiMap.ORMultiMapTag),
|
||||
withValueDeltas)
|
||||
}
|
||||
|
||||
def keyIdToBinary(id: String): Array[Byte] =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue