per #15423 Remove deprecated features from akka-persistence
* remove channels * remove View * remove Processor * collapse the complicated internal state management that was spread out between Processor, Eventsourced and Recovery * remove Recovery trait, this caused some duplication between Eventsourced and PersistentView, but but the enhanced PersistentView will not be based on recovery infrastructure, and therefore PersistentView code will be replaced anyway * remove PersistentBatch * remove LoopMessage * remove deleteMessages of individual messages * remove Persistent, PersistentRepr and PersistentImpl are kept * remove processorId * update doc sample code * note in migration guide about persistenceId * rename Resequencable to PersistentEnvelope
This commit is contained in:
parent
86a5b3d9d7
commit
c566d5a106
84 changed files with 2162 additions and 9560 deletions
|
|
@ -21,18 +21,13 @@ import scala.collection.immutable.VectorBuilder
|
|||
trait Message extends Serializable
|
||||
|
||||
/**
|
||||
* Protobuf serializer for [[PersistentBatch]], [[PersistentRepr]] and [[Deliver]] messages.
|
||||
* Protobuf serializer for [[PersistentRepr]] and [[AtLeastOnceDelivery]] messages.
|
||||
*/
|
||||
class MessageSerializer(val system: ExtendedActorSystem) extends Serializer {
|
||||
import PersistentRepr.Undefined
|
||||
|
||||
val PersistentBatchClass = classOf[PersistentBatch]
|
||||
val PersistentReprClass = classOf[PersistentRepr]
|
||||
val PersistentImplClass = classOf[PersistentImpl]
|
||||
val ConfirmablePersistentImplClass = classOf[ConfirmablePersistentImpl]
|
||||
val DeliveredByTransientChannelClass = classOf[DeliveredByChannel]
|
||||
val DeliveredByPersistentChannelClass = classOf[DeliveredByPersistentChannel]
|
||||
val DeliverClass = classOf[Deliver]
|
||||
val AtLeastOnceDeliverySnapshotClass = classOf[AtLeastOnceDeliverySnap]
|
||||
|
||||
def identifier: Int = 7
|
||||
|
|
@ -45,35 +40,26 @@ class MessageSerializer(val system: ExtendedActorSystem) extends Serializer {
|
|||
}
|
||||
|
||||
/**
|
||||
* Serializes [[PersistentBatch]], [[PersistentRepr]] and [[Deliver]] messages. Delegates
|
||||
* serialization of a persistent message's payload to a matching `akka.serialization.Serializer`.
|
||||
* Serializes persistent messages. Delegates serialization of a persistent
|
||||
* message's payload to a matching `akka.serialization.Serializer`.
|
||||
*/
|
||||
def toBinary(o: AnyRef): Array[Byte] = o match {
|
||||
case b: PersistentBatch ⇒ persistentMessageBatchBuilder(b).build().toByteArray
|
||||
case p: PersistentRepr ⇒ persistentMessageBuilder(p).build().toByteArray
|
||||
case c: DeliveredByChannel ⇒ deliveredMessageBuilder(c).build().toByteArray
|
||||
case c: DeliveredByPersistentChannel ⇒ deliveredMessageBuilder(c).build().toByteArray
|
||||
case d: Deliver ⇒ deliverMessageBuilder(d).build.toByteArray
|
||||
case a: AtLeastOnceDeliverySnap ⇒ atLeastOnceDeliverySnapshotBuilder(a).build.toByteArray
|
||||
case _ ⇒ throw new IllegalArgumentException(s"Can't serialize object of type ${o.getClass}")
|
||||
case p: PersistentRepr ⇒ persistentMessageBuilder(p).build().toByteArray
|
||||
case a: AtLeastOnceDeliverySnap ⇒ atLeastOnceDeliverySnapshotBuilder(a).build.toByteArray
|
||||
case _ ⇒ throw new IllegalArgumentException(s"Can't serialize object of type ${o.getClass}")
|
||||
}
|
||||
|
||||
/**
|
||||
* Deserializes [[PersistentBatch]], [[PersistentRepr]] and [[Deliver]] messages. Delegates
|
||||
* deserialization of a persistent message's payload to a matching `akka.serialization.Serializer`.
|
||||
* Deserializes persistent messages. Delegates deserialization of a persistent
|
||||
* message's payload to a matching `akka.serialization.Serializer`.
|
||||
*/
|
||||
def fromBinary(bytes: Array[Byte], manifest: Option[Class[_]]): Message = manifest match {
|
||||
case None ⇒ persistent(PersistentMessage.parseFrom(bytes))
|
||||
case Some(c) ⇒ c match {
|
||||
case PersistentImplClass ⇒ persistent(PersistentMessage.parseFrom(bytes))
|
||||
case ConfirmablePersistentImplClass ⇒ persistent(PersistentMessage.parseFrom(bytes))
|
||||
case PersistentReprClass ⇒ persistent(PersistentMessage.parseFrom(bytes))
|
||||
case PersistentBatchClass ⇒ persistentBatch(PersistentMessageBatch.parseFrom(bytes))
|
||||
case DeliveredByTransientChannelClass ⇒ delivered(DeliveredMessage.parseFrom(bytes))
|
||||
case DeliveredByPersistentChannelClass ⇒ delivered(DeliveredMessage.parseFrom(bytes))
|
||||
case DeliverClass ⇒ deliver(DeliverMessage.parseFrom(bytes))
|
||||
case AtLeastOnceDeliverySnapshotClass ⇒ atLeastOnceDeliverySnapshot(AtLeastOnceDeliverySnapshot.parseFrom(bytes))
|
||||
case _ ⇒ throw new IllegalArgumentException(s"Can't deserialize object of type ${c}")
|
||||
case PersistentImplClass ⇒ persistent(PersistentMessage.parseFrom(bytes))
|
||||
case PersistentReprClass ⇒ persistent(PersistentMessage.parseFrom(bytes))
|
||||
case AtLeastOnceDeliverySnapshotClass ⇒ atLeastOnceDeliverySnapshot(AtLeastOnceDeliverySnapshot.parseFrom(bytes))
|
||||
case _ ⇒ throw new IllegalArgumentException(s"Can't deserialize object of type ${c}")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -81,13 +67,6 @@ class MessageSerializer(val system: ExtendedActorSystem) extends Serializer {
|
|||
// toBinary helpers
|
||||
//
|
||||
|
||||
private def deliverMessageBuilder(deliver: Deliver) = {
|
||||
val builder = DeliverMessage.newBuilder
|
||||
builder.setPersistent(persistentMessageBuilder(deliver.persistent.asInstanceOf[PersistentRepr]))
|
||||
builder.setDestination(deliver.destination.toString)
|
||||
builder
|
||||
}
|
||||
|
||||
def atLeastOnceDeliverySnapshotBuilder(snap: AtLeastOnceDeliverySnap): AtLeastOnceDeliverySnapshot.Builder = {
|
||||
val builder = AtLeastOnceDeliverySnapshot.newBuilder
|
||||
builder.setCurrentDeliveryId(snap.currentDeliveryId)
|
||||
|
|
@ -115,29 +94,15 @@ class MessageSerializer(val system: ExtendedActorSystem) extends Serializer {
|
|||
unconfirmedDeliveries.result())
|
||||
}
|
||||
|
||||
private def persistentMessageBatchBuilder(persistentBatch: PersistentBatch) = {
|
||||
val builder = PersistentMessageBatch.newBuilder
|
||||
persistentBatch.batch.
|
||||
filter(_.isInstanceOf[PersistentRepr]).
|
||||
foreach(p ⇒ builder.addBatch(persistentMessageBuilder(p.asInstanceOf[PersistentRepr])))
|
||||
builder
|
||||
}
|
||||
|
||||
private def persistentMessageBuilder(persistent: PersistentRepr) = {
|
||||
val builder = PersistentMessage.newBuilder
|
||||
|
||||
if (persistent.persistenceId != Undefined) builder.setPersistenceId(persistent.persistenceId)
|
||||
if (persistent.confirmMessage != null) builder.setConfirmMessage(deliveredMessageBuilder(persistent.confirmMessage))
|
||||
if (persistent.confirmTarget != null) builder.setConfirmTarget(Serialization.serializedActorPath(persistent.confirmTarget))
|
||||
if (persistent.sender != null) builder.setSender(Serialization.serializedActorPath(persistent.sender))
|
||||
|
||||
persistent.confirms.foreach(builder.addConfirms)
|
||||
|
||||
builder.setPayload(persistentPayloadBuilder(persistent.payload.asInstanceOf[AnyRef]))
|
||||
builder.setSequenceNr(persistent.sequenceNr)
|
||||
builder.setDeleted(persistent.deleted)
|
||||
builder.setRedeliveries(persistent.redeliveries)
|
||||
builder.setConfirmable(persistent.confirmable)
|
||||
builder
|
||||
}
|
||||
|
||||
|
|
@ -153,52 +118,23 @@ class MessageSerializer(val system: ExtendedActorSystem) extends Serializer {
|
|||
builder
|
||||
}
|
||||
|
||||
// serialize actor references with full address information (defaultAddress)
|
||||
// serialize actor references with full address information (defaultAddress)
|
||||
transportInformation match {
|
||||
case Some(ti) ⇒ Serialization.currentTransportInformation.withValue(ti) { payloadBuilder() }
|
||||
case None ⇒ payloadBuilder()
|
||||
}
|
||||
}
|
||||
|
||||
private def deliveredMessageBuilder(delivered: Delivered) = {
|
||||
val builder = DeliveredMessage.newBuilder
|
||||
|
||||
if (delivered.channel != null) builder.setChannel(Serialization.serializedActorPath(delivered.channel))
|
||||
|
||||
builder.setChannelId(delivered.channelId)
|
||||
builder.setPersistentSequenceNr(delivered.persistentSequenceNr)
|
||||
builder.setDeliverySequenceNr(delivered.deliverySequenceNr)
|
||||
|
||||
delivered match {
|
||||
case c: DeliveredByChannel ⇒ builder.setPersistenceId(c.persistenceId)
|
||||
case _ ⇒ builder
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// fromBinary helpers
|
||||
//
|
||||
|
||||
private def deliver(deliverMessage: DeliverMessage): Deliver = {
|
||||
Deliver(
|
||||
persistent(deliverMessage.getPersistent),
|
||||
ActorPath.fromString(deliverMessage.getDestination))
|
||||
}
|
||||
|
||||
private def persistentBatch(persistentMessageBatch: PersistentMessageBatch): PersistentBatch =
|
||||
PersistentBatch(immutableSeq(persistentMessageBatch.getBatchList).map(persistent))
|
||||
|
||||
private def persistent(persistentMessage: PersistentMessage): PersistentRepr = {
|
||||
PersistentRepr(
|
||||
payload(persistentMessage.getPayload),
|
||||
persistentMessage.getSequenceNr,
|
||||
if (persistentMessage.hasPersistenceId) persistentMessage.getPersistenceId else Undefined,
|
||||
persistentMessage.getDeleted,
|
||||
persistentMessage.getRedeliveries,
|
||||
immutableSeq(persistentMessage.getConfirmsList),
|
||||
persistentMessage.getConfirmable,
|
||||
if (persistentMessage.hasConfirmMessage) delivered(persistentMessage.getConfirmMessage) else null,
|
||||
if (persistentMessage.hasConfirmTarget) system.provider.resolveActorRef(persistentMessage.getConfirmTarget) else null,
|
||||
if (persistentMessage.hasSender) system.provider.resolveActorRef(persistentMessage.getSender) else null)
|
||||
}
|
||||
|
||||
|
|
@ -212,22 +148,4 @@ class MessageSerializer(val system: ExtendedActorSystem) extends Serializer {
|
|||
payloadClass).get
|
||||
}
|
||||
|
||||
private def delivered(deliveredMessage: DeliveredMessage): Delivered = {
|
||||
val channel = if (deliveredMessage.hasChannel) system.provider.resolveActorRef(deliveredMessage.getChannel) else null
|
||||
|
||||
if (deliveredMessage.hasPersistenceId) {
|
||||
DeliveredByChannel(
|
||||
deliveredMessage.getPersistenceId,
|
||||
deliveredMessage.getChannelId,
|
||||
deliveredMessage.getPersistentSequenceNr,
|
||||
deliveredMessage.getDeliverySequenceNr,
|
||||
channel)
|
||||
} else {
|
||||
DeliveredByPersistentChannel(
|
||||
deliveredMessage.getChannelId,
|
||||
deliveredMessage.getPersistentSequenceNr,
|
||||
deliveredMessage.getDeliverySequenceNr,
|
||||
channel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue