Example #1
0
        private async Task CleanIndexFromNonExistentBucketsAsync(IEnumerable <Uri> buckets, ILogger logger, CancellationToken cancellationToken)
        {
            var allBucketsFromIndex = await _indexer.GetBucketsAsync(cancellationToken);

            var deletedBuckets = allBucketsFromIndex.Except(buckets).ToArray();

            logger.LogInformation($"{deletedBuckets.Length} buckets to remove from the index.");

            await Parallel.ForEachAsync(
                deletedBuckets.TakeWhile(x => !cancellationToken.IsCancellationRequested),
                new ParallelOptions()
            {
                MaxDegreeOfParallelism = MaxDegreeOfParallelism, CancellationToken = cancellationToken
            },
                async (deletedBucket, cancellationToken) =>
            {
                var manifests = (await _indexer.GetExistingManifestsAsync(deletedBucket, cancellationToken)).ToArray();
                logger.LogDebug($"Deleting {manifests.Length} manifests from bucket {deletedBucket}.");
                await _indexer.DeleteManifestsAsync(manifests, cancellationToken);
            });
        }