Update Persistence Snapshot documentation (#22419)
* Update Persistence Snapshot documentation (#22233) * Use copy of ExampleState as it is mutable
This commit is contained in:
parent
e77c3c3e8a
commit
ea9617aa25
4 changed files with 31 additions and 16 deletions
|
|
@ -234,13 +234,14 @@ public class LambdaPersistenceDocTest {
|
|||
static Object o4 = new Object() {
|
||||
class MyPersistentActor extends AbstractPersistentActor {
|
||||
|
||||
private void updateState(String evt){}
|
||||
|
||||
//#save-snapshot
|
||||
private Object state;
|
||||
private int snapShotInterval = 1000;
|
||||
|
||||
@Override public Receive createReceive() {
|
||||
return receiveBuilder().
|
||||
match(String.class, s -> s.equals("snap"),
|
||||
s -> saveSnapshot(state)).
|
||||
match(SaveSnapshotSuccess.class, ss -> {
|
||||
SnapshotMetadata metadata = ss.metadata();
|
||||
// ...
|
||||
|
|
@ -248,6 +249,13 @@ public class LambdaPersistenceDocTest {
|
|||
match(SaveSnapshotFailure.class, sf -> {
|
||||
SnapshotMetadata metadata = sf.metadata();
|
||||
// ...
|
||||
}).
|
||||
match(String.class, cmd -> {
|
||||
persist( "evt-" + cmd, e -> {
|
||||
updateState(e);
|
||||
if (lastSequenceNr() % snapShotInterval == 0 && lastSequenceNr() != 0)
|
||||
saveSnapshot(state);
|
||||
});
|
||||
}).build();
|
||||
}
|
||||
//#save-snapshot
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ class ExampleState implements Serializable {
|
|||
class ExamplePersistentActor extends AbstractPersistentActor {
|
||||
|
||||
private ExampleState state = new ExampleState();
|
||||
private int snapShotInterval = 1000;
|
||||
|
||||
public int getNumEvents() {
|
||||
return state.size();
|
||||
|
|
@ -97,16 +98,15 @@ class ExamplePersistentActor extends AbstractPersistentActor {
|
|||
return receiveBuilder()
|
||||
.match(Cmd.class, c -> {
|
||||
final String data = c.getData();
|
||||
final Evt evt1 = new Evt(data + "-" + getNumEvents());
|
||||
final Evt evt2 = new Evt(data + "-" + (getNumEvents() + 1));
|
||||
persistAll(asList(evt1, evt2), (Evt evt) -> {
|
||||
state.update(evt);
|
||||
if (evt.equals(evt2)) {
|
||||
getContext().system().eventStream().publish(evt);
|
||||
}
|
||||
final Evt evt = new Evt(data + "-" + getNumEvents());
|
||||
persist(evt, (Evt e) -> {
|
||||
state.update(e);
|
||||
getContext().system().eventStream().publish(e);
|
||||
if (lastSequenceNr() % snapShotInterval == 0 && lastSequenceNr() != 0)
|
||||
// IMPORTANT: create a copy of snapshot because ExampleState is mutable
|
||||
saveSnapshot(state.copy());
|
||||
});
|
||||
})
|
||||
.matchEquals("snap", s -> saveSnapshot(state.copy()))
|
||||
.matchEquals("print", s -> System.out.println(state))
|
||||
.build();
|
||||
}
|
||||
|
|
@ -120,7 +120,6 @@ public class PersistentActorExample {
|
|||
persistentActor.tell(new Cmd("foo"), null);
|
||||
persistentActor.tell(new Cmd("baz"), null);
|
||||
persistentActor.tell(new Cmd("bar"), null);
|
||||
persistentActor.tell("snap", null);
|
||||
persistentActor.tell(new Cmd("buzz"), null);
|
||||
persistentActor.tell("print", null);
|
||||
|
||||
|
|
|
|||
|
|
@ -159,13 +159,21 @@ object PersistenceDocSpec {
|
|||
class MyPersistentActor extends PersistentActor {
|
||||
override def persistenceId = "my-stable-persistence-id"
|
||||
|
||||
def updateState(event: String): Unit = {}
|
||||
|
||||
//#save-snapshot
|
||||
var state: Any = _
|
||||
|
||||
val snapShotInterval = 1000
|
||||
override def receiveCommand: Receive = {
|
||||
case "snap" => saveSnapshot(state)
|
||||
case SaveSnapshotSuccess(metadata) => // ...
|
||||
case SaveSnapshotFailure(metadata, reason) => // ...
|
||||
case cmd: String =>
|
||||
persist(s"evt-$cmd") { e =>
|
||||
updateState(e)
|
||||
if (lastSequenceNr % snapShotInterval == 0 && lastSequenceNr != 0)
|
||||
saveSnapshot(state)
|
||||
}
|
||||
}
|
||||
//#save-snapshot
|
||||
|
||||
|
|
|
|||
|
|
@ -29,14 +29,15 @@ class ExamplePersistentActor extends PersistentActor {
|
|||
case SnapshotOffer(_, snapshot: ExampleState) => state = snapshot
|
||||
}
|
||||
|
||||
val snapShotInterval = 1000
|
||||
val receiveCommand: Receive = {
|
||||
case Cmd(data) =>
|
||||
persist(Evt(s"${data}-${numEvents}"))(updateState)
|
||||
persist(Evt(s"${data}-${numEvents + 1}")) { event =>
|
||||
persist(Evt(s"${data}-${numEvents}")) { event =>
|
||||
updateState(event)
|
||||
context.system.eventStream.publish(event)
|
||||
if (lastSequenceNr % snapShotInterval == 0 && lastSequenceNr != 0)
|
||||
saveSnapshot(state)
|
||||
}
|
||||
case "snap" => saveSnapshot(state)
|
||||
case "print" => println(state)
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +52,6 @@ object PersistentActorExample extends App {
|
|||
persistentActor ! Cmd("foo")
|
||||
persistentActor ! Cmd("baz")
|
||||
persistentActor ! Cmd("bar")
|
||||
persistentActor ! "snap"
|
||||
persistentActor ! Cmd("buzz")
|
||||
persistentActor ! "print"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue