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