/// <inheritdoc /> public async Task <Checkpoint> CreateCheckpointIfNotExistsAsync(string partitionId) { CheckpointEntry checkpoint; using (_logger.BeginScope("Create checkpoint")) { _checkpointUpdateCounter.Increment(); _logger.LogDebug("Checkpoint partition {partitionId}", partitionId); checkpoint = await ReadCheckpointFromFileAsync(partitionId).ConfigureAwait(false); if (checkpoint == null) { _logger.LogInformation("Checkpoint not found for partition {partitionId}, creating", partitionId); var fileName = GetFileName(partitionId); var newCheckpoint = new CheckpointEntry { PartitionId = partitionId, Owner = _eventProcessorName }; var json = newCheckpoint.ToJson(); _logger.LogTrace("Checkpoint json: ", json); try { await File.WriteAllTextAsync(fileName, json, ContainerLifecycle.CancellationToken).ConfigureAwait(false); _logger.LogDebug("Checkpoint complete for file {fileName}", fileName); checkpoint = newCheckpoint; } catch (Exception e) { _logger?.LogError(e, "Error writing checkpoint file {fileName}", fileName); _checkpointErrorCounter.Increment(); } } else { _logger?.LogTrace("Checkpoint found for partition {partitionId}", partitionId); } } return(checkpoint); }