/// <inheritdoc /> public virtual void OnThreadState <Key, Value, Input, Output, Context, FasterSession>( SystemState current, SystemState prev, FasterKV <Key, Value> faster, FasterKV <Key, Value> .FasterExecutionContext <Input, Output, Context> ctx, FasterSession fasterSession, List <ValueTask> valueTasks, CancellationToken token = default) where FasterSession : IFasterSession { if (current.Phase != Phase.PERSISTENCE_CALLBACK) { return; } if (ctx != null) { if (!ctx.prevCtx.markers[EpochPhaseIdx.CheckpointCompletionCallback]) { faster.IssueCompletionCallback(ctx, fasterSession); ctx.prevCtx.markers[EpochPhaseIdx.CheckpointCompletionCallback] = true; } } faster.epoch.Mark(EpochPhaseIdx.CheckpointCompletionCallback, current.Version); if (faster.epoch.CheckIsComplete(EpochPhaseIdx.CheckpointCompletionCallback, current.Version)) { faster.GlobalStateMachineStep(current); } }