private async Task <SourceFilter> CreateIterativeFilterAsync(IterativeTransitOptions iterOpts, CancellationToken token)
        {
            var(checkpointField, offset, forcedCheckpoint) = iterOpts;

            if (forcedCheckpoint != null)
            {
                _logger.Information("Forced to use checkpoint {ForcedCheckpoint} for collection {Collection}",
                                    iterOpts.ForcedCheckpoint, _collectionName);
                return(new SourceFilter(checkpointField, iterOpts.ForcedCheckpoint));
            }

            _logger.Debug("Fetching last checkpoint for collection {Collection}", _collectionName);
            var lastCheckpoint = await _destination.FindLastCheckpointAsync(checkpointField, token);

            if (lastCheckpoint != null)
            {
#pragma warning disable CS8620
                lastCheckpoint -= offset;
#pragma warning restore CS8620
                _logger.Debug("Collection {Collection} will be transferred from checkpoint {LastCheckpoint}",
                              _collectionName, lastCheckpoint);
            }
            else
            {
                _logger.Warning("Collection {Collection} doesn't have checkpoint", _collectionName);
            }

            return(new SourceFilter(checkpointField, lastCheckpoint));
        }