+ context.getSnapshotManager().apply(message);
+ }
+
+ private void onGetSnapshot(final ActorRef sender, final GetSnapshot getSnapshot) {
+ log.debug("{}: onGetSnapshot", context.getId());
+
+
+ if (context.getPersistenceProvider().isRecoveryApplicable()) {
+ CaptureSnapshot captureSnapshot = context.getSnapshotManager().newCaptureSnapshot(
+ context.getReplicatedLog().lastMeta(), -1, true);
+
+ final FiniteDuration timeout =
+ getSnapshot.getTimeout().map(Timeout::duration).orElse(snapshotReplyActorTimeout);
+
+ ActorRef snapshotReplyActor = context.actorOf(GetSnapshotReplyActor.props(captureSnapshot,
+ ImmutableElectionTerm.copyOf(context.getTermInformation()), sender, timeout, context.getId(),
+ context.getPeerServerInfo(true)));
+
+ cohort.createSnapshot(snapshotReplyActor, Optional.empty());
+ } else {
+ Snapshot snapshot = Snapshot.create(
+ EmptyState.INSTANCE, Collections.<ReplicatedLogEntry>emptyList(),
+ -1, -1, -1, -1,
+ context.getTermInformation().getCurrentTerm(), context.getTermInformation().getVotedFor(),
+ context.getPeerServerInfo(true));
+
+ sender.tell(new GetSnapshotReply(context.getId(), snapshot), context.getActor());
+ }
+ }