/// <summary>
 /// Construct a new FullCheckpointStateMachine to use the given checkpoint backend (either fold-over or snapshot),
 /// drawing boundary at targetVersion.
 /// </summary>
 /// <param name="checkpointBackend">A task that encapsulates the logic to persist the checkpoint</param>
 /// <param name="targetVersion">upper limit (inclusive) of the version included</param>
 public FullCheckpointStateMachine(ISynchronizationTask checkpointBackend, long targetVersion = -1) : base(
         targetVersion, new VersionChangeTask(), new FullCheckpointOrchestrationTask(), checkpointBackend,
         new IndexSnapshotTask())
 {
 }
 /// <summary>
 /// Construct a new HybridLogCheckpointStateMachine to use the given checkpoint backend (either fold-over or
 /// snapshot), drawing boundary at targetVersion.
 /// </summary>
 /// <param name="checkpointBackend">A task that encapsulates the logic to persist the checkpoint</param>
 /// <param name="targetVersion">upper limit (inclusive) of the version included</param>
 public HybridLogCheckpointStateMachine(ISynchronizationTask checkpointBackend, long targetVersion = -1)
     : base(targetVersion, new VersionChangeTask(), checkpointBackend)
 {
 }