!per #3704 Persistence improvements
- Channel enhancements (#3773): - Live read models (#3776): - Batch-oriented journal plugin API (#3804): - Batching of confirmations and deletions - Message deletion enhancements (more efficient range deletions)
This commit is contained in:
parent
32b76adb9a
commit
f327e1e357
55 changed files with 3474 additions and 2191 deletions
|
|
@ -13,117 +13,155 @@ import akka.persistence.serialization.Message
|
|||
/**
|
||||
* INTERNAL API.
|
||||
*
|
||||
* Defines messages exchanged between processors, channels and a journal.
|
||||
* Messages exchanged between processors, views, channels and a journal.
|
||||
*/
|
||||
private[persistence] object JournalProtocol {
|
||||
/**
|
||||
* Instructs a journal to delete all persistent messages with sequence numbers in
|
||||
* the range from `fromSequenceNr` to `toSequenceNr` (both inclusive). If `permanent`
|
||||
* is set to `false`, the persistent messages are marked as deleted in the journal,
|
||||
* otherwise they are permanently deleted from the journal.
|
||||
* Request to delete messages identified by `messageIds`. If `permanent` is set to `false`,
|
||||
* the persistent messages are marked as deleted, otherwise they are permanently deleted.
|
||||
*/
|
||||
case class Delete(processorId: String, fromSequenceNr: Long, toSequenceNr: Long, permanent: Boolean)
|
||||
case class DeleteMessages(messageIds: immutable.Seq[PersistentId], permanent: Boolean, requestor: Option[ActorRef] = None)
|
||||
|
||||
/**
|
||||
* Message sent after confirming the receipt of a [[ConfirmablePersistent]] message.
|
||||
* Reply message to a successful [[DeleteMessages]] request.
|
||||
*/
|
||||
case class DeleteMessagesSuccess(messageIds: immutable.Seq[PersistentId])
|
||||
|
||||
/**
|
||||
* Reply message to a failed [[DeleteMessages]] request.
|
||||
*/
|
||||
case class DeleteMessagesFailure(cause: Throwable)
|
||||
|
||||
/**
|
||||
* Request to delete all persistent messages with sequence numbers up to `toSequenceNr`
|
||||
* (inclusive). If `permanent` is set to `false`, the persistent messages are marked
|
||||
* as deleted in the journal, otherwise they are permanently deleted from the journal.
|
||||
*/
|
||||
case class DeleteMessagesTo(processorId: String, toSequenceNr: Long, permanent: Boolean)
|
||||
|
||||
/**
|
||||
* Request to write delivery confirmations.
|
||||
*/
|
||||
case class WriteConfirmations(confirmations: immutable.Seq[PersistentConfirmation], requestor: ActorRef)
|
||||
|
||||
/**
|
||||
* Reply message to a successful [[WriteConfirmations]] request.
|
||||
*/
|
||||
case class WriteConfirmationsSuccess(confirmations: immutable.Seq[PersistentConfirmation])
|
||||
|
||||
/**
|
||||
* Reply message to a failed [[WriteConfirmations]] request.
|
||||
*/
|
||||
case class WriteConfirmationsFailure(cause: Throwable)
|
||||
|
||||
/**
|
||||
* Request to write messages.
|
||||
*
|
||||
* @param processorId id of the processor that sent the message corresponding to
|
||||
* this confirmation to a channel.
|
||||
* @param messageSequenceNr sequence number of the sent message.
|
||||
* @param channelId id of the channel that delivered the message corresponding to
|
||||
* this confirmation.
|
||||
* @param wrapperSequenceNr sequence number of the message stored by a persistent
|
||||
* channel. This message contains the [[Deliver]] request
|
||||
* with the message identified by `processorId` and
|
||||
* `messageSequenceNumber`.
|
||||
* @param channelEndpoint actor reference that sent the the message corresponding to
|
||||
* this confirmation. This is a child actor of the sending
|
||||
* [[Channel]] or [[PersistentChannel]].
|
||||
* @param messages messages to be written.
|
||||
* @param processor write requestor.
|
||||
*/
|
||||
case class Confirm(processorId: String, messageSequenceNr: Long, channelId: String, wrapperSequenceNr: Long = 0L, channelEndpoint: ActorRef = null) extends Message
|
||||
case class WriteMessages(messages: immutable.Seq[PersistentRepr], processor: ActorRef)
|
||||
|
||||
/**
|
||||
* Instructs a journal to persist a sequence of messages.
|
||||
*
|
||||
* @param persistentBatch batch of messages to be persisted.
|
||||
* @param processor requesting processor.
|
||||
* Reply message to a successful [[WriteMessages]] request. This reply is sent to the requestor
|
||||
* before all subsequent [[WriteMessageSuccess]] replies.
|
||||
*/
|
||||
case class WriteBatch(persistentBatch: immutable.Seq[PersistentRepr], processor: ActorRef)
|
||||
case object WriteMessagesSuccess
|
||||
|
||||
/**
|
||||
* Reply message to a processor if a batch write succeeded. This message is received before
|
||||
* all subsequent [[WriteSuccess]] messages.
|
||||
*/
|
||||
case object WriteBatchSuccess
|
||||
|
||||
/**
|
||||
* Reply message to a processor if a batch write failed. This message is received before
|
||||
* all subsequent [[WriteFailure]] messages.
|
||||
* Reply message to a failed [[WriteMessages]] request. This reply is sent to the requestor
|
||||
* before all subsequent [[WriteMessagFailure]] replies.
|
||||
*
|
||||
* @param cause failure cause.
|
||||
*/
|
||||
case class WriteBatchFailure(cause: Throwable)
|
||||
case class WriteMessagesFailure(cause: Throwable)
|
||||
|
||||
/**
|
||||
* Reply message to a processor that `persistent` message has been successfully journaled.
|
||||
* Reply message to a successful [[WriteMessages]] request. For each contained [[PersistentRepr]] message
|
||||
* in the request, a separate reply is sent to the requestor.
|
||||
*
|
||||
* @param persistent persistent message.
|
||||
* @param persistent successfully written message.
|
||||
*/
|
||||
case class WriteSuccess(persistent: PersistentRepr)
|
||||
case class WriteMessageSuccess(persistent: PersistentRepr)
|
||||
|
||||
/**
|
||||
* Reply message to a processor that `persistent` message could not be journaled.
|
||||
* Reply message to a failed [[WriteMessages]] request. For each contained [[PersistentRepr]] message
|
||||
* in the request, a separate reply is sent to the requestor.
|
||||
*
|
||||
* @param persistent persistent message.
|
||||
* @param message message failed to be written.
|
||||
* @param cause failure cause.
|
||||
*/
|
||||
case class WriteFailure(persistent: PersistentRepr, cause: Throwable)
|
||||
case class WriteMessageFailure(message: PersistentRepr, cause: Throwable)
|
||||
|
||||
/**
|
||||
* Instructs a journal to loop a `message` back to `processor`, without persisting the
|
||||
* message. Looping of messages through a journal is required to preserve message order
|
||||
* with persistent messages.
|
||||
* Request to loop a `message` back to `processor`, without persisting the message. Looping of messages
|
||||
* through a journal is required to preserve message order with persistent messages.
|
||||
*
|
||||
* @param message message to be looped through the journal.
|
||||
* @param processor requesting processor.
|
||||
* @param processor loop requestor.
|
||||
*/
|
||||
case class Loop(message: Any, processor: ActorRef)
|
||||
case class LoopMessage(message: Any, processor: ActorRef)
|
||||
|
||||
/**
|
||||
* Reply message to a processor that a `message` has been looped through the journal.
|
||||
* Reply message to a [[LoopMessage]] request.
|
||||
*
|
||||
* @param message looped message.
|
||||
*/
|
||||
case class LoopSuccess(message: Any)
|
||||
case class LoopMessageSuccess(message: Any)
|
||||
|
||||
/**
|
||||
* Instructs a journal to replay messages to `processor`.
|
||||
* Request to replay messages to `processor`.
|
||||
*
|
||||
* @param fromSequenceNr sequence number where replay should start.
|
||||
* @param fromSequenceNr sequence number where replay should start (inclusive).
|
||||
* @param toSequenceNr sequence number where replay should end (inclusive).
|
||||
* @param max maximum number of messages to be replayed.
|
||||
* @param processorId requesting processor id.
|
||||
* @param processor requesting processor.
|
||||
* @param replayDeleted `true` if messages marked as deleted shall be replayed.
|
||||
*/
|
||||
case class ReplayMessages(fromSequenceNr: Long, toSequenceNr: Long, max: Long, processorId: String, processor: ActorRef, replayDeleted: Boolean = false)
|
||||
|
||||
/**
|
||||
* Reply message to a [[ReplayMessages]] request. A separate reply is sent to the requestor for each
|
||||
* replayed message.
|
||||
*
|
||||
* @param persistent replayed message.
|
||||
*/
|
||||
case class ReplayedMessage(persistent: PersistentRepr)
|
||||
|
||||
/**
|
||||
* Reply message to a successful [[ReplayMessages]] request. This reply is sent to the requestor
|
||||
* after all [[ReplayedMessage]] have been sent (if any).
|
||||
*/
|
||||
case object ReplayMessagesSuccess
|
||||
|
||||
/**
|
||||
* Reply message to a failed [[ReplayMessages]] request. This reply is sent to the requestor
|
||||
* if a replay could not be successfully completed.
|
||||
*/
|
||||
case class ReplayMessagesFailure(cause: Throwable)
|
||||
|
||||
/**
|
||||
* Request to read the highest stored sequence number of a given processor.
|
||||
*
|
||||
* @param fromSequenceNr optional hint where to start searching for the maximum sequence number.
|
||||
* @param processorId requesting processor id.
|
||||
* @param processor requesting processor.
|
||||
*/
|
||||
case class Replay(fromSequenceNr: Long, toSequenceNr: Long, processorId: String, processor: ActorRef)
|
||||
case class ReadHighestSequenceNr(fromSequenceNr: Long = 1L, processorId: String, processor: ActorRef)
|
||||
|
||||
/**
|
||||
* Reply message to a processor that `persistent` message has been replayed.
|
||||
* Reply message to a successful [[ReadHighestSequenceNr]] request.
|
||||
*
|
||||
* @param persistent persistent message.
|
||||
* @param highestSequenceNr read highest sequence number.
|
||||
*/
|
||||
case class Replayed(persistent: PersistentRepr)
|
||||
case class ReadHighestSequenceNrSuccess(highestSequenceNr: Long)
|
||||
|
||||
/**
|
||||
* Reply message to a processor that all `persistent` messages have been replayed.
|
||||
* Reply message to a failed [[ReadHighestSequenceNr]] request.
|
||||
*
|
||||
* @param maxSequenceNr the highest stored sequence number (for a processor).
|
||||
* @param cause failure cause.
|
||||
*/
|
||||
case class ReplaySuccess(maxSequenceNr: Long)
|
||||
|
||||
/**
|
||||
* Reply message to a processor that not all `persistent` messages could have been
|
||||
* replayed.
|
||||
*/
|
||||
case class ReplayFailure(cause: Throwable)
|
||||
case class ReadHighestSequenceNrFailure(cause: Throwable)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue