|
Akka/Scala example source code file (SnapshotStore.scala)
The SnapshotStore.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
* Copyright (C) 2012-2013 Eligotech BV.
*/
package akka.persistence.snapshot
import scala.concurrent.Future
import akka.actor._
import akka.pattern.pipe
import akka.persistence._
/**
* Abstract snapshot store.
*/
trait SnapshotStore extends Actor {
import SnapshotProtocol._
import context.dispatcher
private val extension = Persistence(context.system)
private val publish = extension.settings.internal.publishPluginCommands
final def receive = {
case LoadSnapshot(persistenceId, criteria, toSequenceNr) ⇒
val p = sender()
loadAsync(persistenceId, criteria.limit(toSequenceNr)) map {
sso ⇒ LoadSnapshotResult(sso, toSequenceNr)
} recover {
case e ⇒ LoadSnapshotResult(None, toSequenceNr)
} pipeTo p
case SaveSnapshot(metadata, snapshot) ⇒
val p = sender()
val md = metadata.copy(timestamp = System.currentTimeMillis)
saveAsync(md, snapshot) map {
_ ⇒ SaveSnapshotSuccess(md)
} recover {
case e ⇒ SaveSnapshotFailure(metadata, e)
} to (self, p)
case evt @ SaveSnapshotSuccess(metadata) ⇒
saved(metadata)
sender() ! evt // sender is persistentActor
case evt @ SaveSnapshotFailure(metadata, _) ⇒
delete(metadata)
sender() ! evt // sender is persistentActor
case d @ DeleteSnapshot(metadata) ⇒
delete(metadata)
if (publish) context.system.eventStream.publish(d)
case d @ DeleteSnapshots(persistenceId, criteria) ⇒
delete(persistenceId, criteria)
if (publish) context.system.eventStream.publish(d)
}
//#snapshot-store-plugin-api
/**
* Plugin API: asynchronously loads a snapshot.
*
* @param persistenceId processor id.
* @param criteria selection criteria for loading.
*/
def loadAsync(persistenceId: String, criteria: SnapshotSelectionCriteria): Future[Option[SelectedSnapshot]]
/**
* Plugin API: asynchronously saves a snapshot.
*
* @param metadata snapshot metadata.
* @param snapshot snapshot.
*/
def saveAsync(metadata: SnapshotMetadata, snapshot: Any): Future[Unit]
/**
* Plugin API: called after successful saving of a snapshot.
*
* @param metadata snapshot metadata.
*/
def saved(metadata: SnapshotMetadata)
/**
* Plugin API: deletes the snapshot identified by `metadata`.
*
* @param metadata snapshot metadata.
*/
def delete(metadata: SnapshotMetadata)
/**
* Plugin API: deletes all snapshots matching `criteria`.
*
* @param persistenceId processor id.
* @param criteria selection criteria for deleting.
*/
def delete(persistenceId: String, criteria: SnapshotSelectionCriteria)
//#snapshot-store-plugin-api
}
Other Akka source code examplesHere is a short list of links related to this Akka SnapshotStore.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.