コード例 #1
0
        private async Task StorePendingObjects(PendingBucketObjectKeyCollection pendingObjectKeyCollection, CancellationToken cancellationToken)
        {
            foreach (var pendingObjectKey in pendingObjectKeyCollection)
            {
                pendingObjectKey.Status = (int)BucketObjectStatus.Detected;
                pendingObjectKey.CurrentStatusErrorCount = 0;
                pendingObjectKey.CurrentStatusLastError  = null;
            }

            await this.repository.SaveItemBatchInternalAsync(pendingObjectKeyCollection, cancellationToken);
        }
コード例 #2
0
        protected async Task <PendingBucketObjectKeyCollection> GetPendingObjectKeyCollectionInternal(string lastObjectMarkerKey, StockMarket sourceBucketType, int maxNumberOfPendingObject, CancellationToken cancellationToken)
        {
            var pendingObjectKeyCollection = new PendingBucketObjectKeyCollection();

            pendingObjectKeyCollection.LastMarker = await this.repository.GetApplicationProperty(lastObjectMarkerKey, cancellationToken);

            var bucketName = this.GetBucketName(sourceBucketType);

            var listObjectResponse = default(ListObjectsResponse);

            var maxLoop     = 100;
            var currentLoop = 0;

            do
            {
                var listObjectRequest = new ListObjectsRequest
                {
                    BucketName = bucketName,
                    MaxKeys    = maxNumberOfPendingObject,
                    Marker     = pendingObjectKeyCollection.LastMarker
                };

                listObjectResponse = await amazonS3.ListObjectsAsync(listObjectRequest, cancellationToken);

                var bucketObjectStatusCollection = await this.GetBucketObjectStatusCollection(sourceBucketType, listObjectResponse.S3Objects, cancellationToken);

                pendingObjectKeyCollection.AddRange(bucketObjectStatusCollection.Where(e => e.Status == (int)BucketObjectStatus.Unknown));

                pendingObjectKeyCollection.IsTruncated = listObjectResponse.IsTruncated;

                if (listObjectResponse.IsTruncated)
                {
                    pendingObjectKeyCollection.LastMarker = listObjectResponse.NextMarker;
                }

                currentLoop += 1;
            } while (
                pendingObjectKeyCollection.Count < maxNumberOfPendingObject &&
                listObjectResponse.S3Objects.Any() &&
                listObjectResponse.IsTruncated &&
                currentLoop < maxLoop);

            return(pendingObjectKeyCollection);
        }