public override void Execute() { if (string.IsNullOrEmpty(this._bucketName)) { throw new ArgumentNullException("bucketName", "The bucketName Specified is null or empty!"); } ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse(); do { ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest() .WithBucketName(this._bucketName) .WithKeyMarker(listResponse.KeyMarker) .WithUploadIdMarker(listResponse.NextUploadIdMarker); listResponse = this._s3Client.ListMultipartUploads(listRequest); foreach (MultipartUpload upload in listResponse.MultipartUploads) { if (upload.Initiated < this._initiatedDate) { this._s3Client.AbortMultipartUpload(new AbortMultipartUploadRequest() .WithBucketName(this._bucketName) .WithKey(upload.Key) .WithUploadId(upload.UploadId)); } } } while (listResponse.IsTruncated); }
public override async Task ExecuteAsync(CancellationToken cancellationToken) { if (string.IsNullOrEmpty(this._bucketName)) { throw new InvalidOperationException("The bucketName specified is null or empty!"); } SemaphoreSlim asyncThrottler = null; CancellationTokenSource internalCts = null; try { asyncThrottler = new SemaphoreSlim(_config.ConcurrentServiceRequests); internalCts = new CancellationTokenSource(); var internalCancellationToken = internalCts.Token; ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse(); var pendingTasks = new List<Task<AbortMultipartUploadResponse>>(); do { ListMultipartUploadsRequest listRequest = ConstructListMultipartUploadsRequest(listResponse); listResponse = await this._s3Client.ListMultipartUploadsAsync(listRequest, cancellationToken) .ConfigureAwait(continueOnCapturedContext: false); foreach (MultipartUpload upload in listResponse.MultipartUploads) { cancellationToken.ThrowIfCancellationRequested(); if (internalCancellationToken.IsCancellationRequested) { // Operation cancelled as one of the AbortMultipartUpload requests failed with an exception, // don't schedule any more AbortMultipartUpload tasks. // Don't throw an OperationCanceledException here as we want to process the // responses and throw the original exception. break; } if (upload.Initiated < this._initiatedDate) { await asyncThrottler.WaitAsync(cancellationToken) .ConfigureAwait(continueOnCapturedContext: false); var abortRequest = ConstructAbortMultipartUploadRequest(upload); var task = AbortAsync(abortRequest, internalCts, cancellationToken, asyncThrottler); pendingTasks.Add(task); } } } while (listResponse.IsTruncated); await WhenAllOrFirstExceptionAsync(pendingTasks,cancellationToken) .ConfigureAwait(continueOnCapturedContext: false); } finally { if (internalCts != null) internalCts.Dispose(); if (asyncThrottler!=null) asyncThrottler.Dispose(); } }
private ListMultipartUploadsRequest ConstructListMultipartUploadsRequest(ListMultipartUploadsResponse listResponse) { ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest() { BucketName = this._bucketName, KeyMarker = listResponse.KeyMarker, UploadIdMarker = listResponse.NextUploadIdMarker, }; ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)listRequest).AddBeforeRequestHandler(this.RequestEventHandler); return listRequest; }
private ListMultipartUploadsRequest ConstructListMultipartUploadsRequest(ListMultipartUploadsResponse listResponse) { ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest() { BucketName = this._bucketName, KeyMarker = listResponse.KeyMarker, UploadIdMarker = listResponse.NextUploadIdMarker, }; listRequest.BeforeRequestEvent += this.RequestEventHandler; return listRequest; }
public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { ListMultipartUploadsResponse response = new ListMultipartUploadsResponse(); while (context.Read()) { if (context.IsStartElement) { UnmarshallResult(context,response); continue; } } return response; }
public override void Execute() { if (string.IsNullOrEmpty(this._bucketName)) { throw new InvalidOperationException("The bucketName Specified is null or empty!"); } ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse(); do { ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest() { BucketName = this._bucketName, KeyMarker = listResponse.KeyMarker, UploadIdMarker = listResponse.NextUploadIdMarker, }; listRequest.BeforeRequestEvent += this.RequestEventHandler; listResponse = this._s3Client.ListMultipartUploads(listRequest); foreach (MultipartUpload upload in listResponse.MultipartUploads) { if (upload.Initiated < this._initiatedDate) { var abortRequest = new AbortMultipartUploadRequest() { BucketName = this._bucketName, Key = upload.Key, UploadId = upload.UploadId, }; abortRequest.BeforeRequestEvent += this.RequestEventHandler; this._s3Client.AbortMultipartUpload(abortRequest); } } } while (listResponse.IsTruncated); }
public override void Execute() { if (string.IsNullOrEmpty(this._bucketName)) { throw new InvalidOperationException("The bucketName Specified is null or empty!"); } ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse(); do { ListMultipartUploadsRequest listRequest = ConstructListMultipartUploadsRequest(listResponse); listResponse = this._s3Client.ListMultipartUploads(listRequest); foreach (MultipartUpload upload in listResponse.MultipartUploads) { if (upload.Initiated < this._initiatedDate) { var abortRequest = ConstructAbortMultipartUploadRequest(upload); this._s3Client.AbortMultipartUpload(abortRequest); } } } while (listResponse.IsTruncated); }
private static void UnmarshallResult(XmlUnmarshallerContext context,ListMultipartUploadsResponse response) { int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) targetDepth += 2; while (context.Read()) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("Bucket", targetDepth)) { response.BucketName = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("KeyMarker", targetDepth)) { response.KeyMarker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("UploadIdMarker", targetDepth)) { response.UploadIdMarker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("NextKeyMarker", targetDepth)) { response.NextKeyMarker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("NextUploadIdMarker", targetDepth)) { response.NextUploadIdMarker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("MaxUploads", targetDepth)) { response.MaxUploads = IntUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("IsTruncated", targetDepth)) { response.IsTruncated = BoolUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("Upload", targetDepth)) { response.MultipartUploads.Add(MultipartUploadUnmarshaller.GetInstance().Unmarshall(context)); continue; } if (context.TestExpression("Delimiter", targetDepth)) { response.Delimiter = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("Prefix", targetDepth)) { response.Prefix = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("CommonPrefixes", targetDepth)) { var prefix = CommonPrefixesItemUnmarshaller.GetInstance().Unmarshall(context); if (prefix != null) response.CommonPrefixes.Add(prefix); continue; } } else if (context.IsEndElement && context.CurrentDepth < originalDepth) { return; } } return; }