private async Task <AcquireLeaseResult> Acquire(string category, LeaseRequest leaseRequest) { try { var blobClient = GetBlobClient(category, leaseRequest.ResourceKey); //create this blob await blobClient.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("blob")), new BlobHttpHeaders { ContentType = "application/json" }); var leaseClient = blobClient.GetBlobLeaseClient(); var lease = await leaseClient.AcquireAsync(leaseRequest.Duration); return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey, leaseRequest.Duration, lease.Value.LeaseId, DateTime.UtcNow), ResponseCode.OK, null)); } catch (RequestFailedException e) { ResponseCode statusCode; //This mapping is based on references : https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes // https://docs.microsoft.com/en-us/rest/api/storageservices/Lease-Blob?redirectedfrom=MSDN switch (e.Status) { case 404: case 409: case 412: statusCode = ResponseCode.LeaseNotAvailable; break; default: statusCode = ResponseCode.TransientFailure; break; } return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey), statusCode, e)); } }
private async Task <AcquireLeaseResult> Acquire(string category, LeaseRequest leaseRequest) { try { var blob = this.container.GetBlockBlobReference(GetBlobName(category, leaseRequest.ResourceKey)); blob.Properties.ContentType = "application/json"; //create this blob await blob.UploadTextAsync("blob"); var leaseId = await blob.AcquireLeaseAsync(leaseRequest.Duration); return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey, leaseRequest.Duration, leaseId, DateTime.UtcNow), ResponseCode.OK, null)); } catch (StorageException e) { ResponseCode statusCode; //This mapping is based on references : https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes // https://docs.microsoft.com/en-us/rest/api/storageservices/Lease-Blob?redirectedfrom=MSDN switch (e.RequestInformation.HttpStatusCode) { case 404: case 409: case 412: statusCode = ResponseCode.LeaseNotAvailable; break; default: statusCode = ResponseCode.TransientFailure; break; } return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey), statusCode, e)); } }