public void ReleaseLock(PessimisticConcurrencyContext lockContext) { if (string.IsNullOrWhiteSpace(lockContext.LockId)) { throw new ArgumentNullException("lockContext.LockId", "LockId cannot be null or empty"); } CloudBlockBlob blob = this.Container.GetBlockBlobReference(lockContext.ObjectId);//here var accessCondition = AccessCondition.GenerateLeaseCondition(lockContext.LockId); blob.ReleaseLease(accessCondition); }
public bool AcquireLock(PessimisticConcurrencyContext lockContext) { var request = BlobRequest.Lease(this.GetUri(lockContext.ObjectId), BlobRequestTimeout, LeaseAction.Acquire, null); this.Account.Credentials.SignRequest(request); // add extra headers not supported by SDK - not supported by emulator yet (SDK 1.7) ////request.Headers["x-ms-version"] = "2012-02-12"; ////request.Headers.Add("x-ms-lease-duration", lockContext.Duration.TotalSeconds.ToString()); try { using (var response = request.GetResponse()) { if (response is HttpWebResponse && HttpStatusCode.Created.Equals((response as HttpWebResponse).StatusCode)) { lockContext.LockId = response.Headers["x-ms-lease-id"]; return(true); } else { return(false); } } } catch (WebException e) { TraceHelper.TraceWarning("Warning acquiring blob '{0}' lease: {1}", lockContext.ObjectId, e.Message); if (WebExceptionStatus.ProtocolError.Equals(e.Status)) { if (e.Response is HttpWebResponse) { if (HttpStatusCode.NotFound.Equals((e.Response as HttpWebResponse).StatusCode)) { lockContext.LockId = null; return(true); } else if (HttpStatusCode.Conflict.Equals((e.Response as HttpWebResponse).StatusCode)) { lockContext.LockId = null; return(false); } } throw; } return(false); } catch (Exception e) { TraceHelper.TraceError("Error acquiring blob '{0}' lease: {1}", lockContext.ObjectId, e.Message); throw; } }
public void ReleaseLock(PessimisticConcurrencyContext lockContext) { if (string.IsNullOrWhiteSpace(lockContext.LockId)) { throw new ArgumentNullException("lockContext.LockId", "LockId cannot be null or empty"); } var request = BlobRequest.Lease(this.GetUri(lockContext.ObjectId), BlobRequestTimeout, LeaseAction.Release, lockContext.LockId); this.Account.Credentials.SignRequest(request); using (var response = request.GetResponse()) { if (response is HttpWebResponse && !HttpStatusCode.OK.Equals((response as HttpWebResponse).StatusCode)) { TraceHelper.TraceError("Error releasing blob '{0}' lease: {1}", lockContext.ObjectId, (response as HttpWebResponse).StatusDescription); throw new InvalidOperationException((response as HttpWebResponse).StatusDescription); } } }
public bool AcquireLock(PessimisticConcurrencyContext lockContext) { CloudBlockBlob blob = this.Container.GetBlockBlobReference(lockContext.ObjectId); TimeSpan?leaseTime = TimeSpan.FromSeconds(BlobRequestTimeout); //Acquire a 15 second lease on the blob. Leave it null for infinite lease. Otherwise it should be between 15 and 60 seconds. try { lockContext.LockId = blob.AcquireLease(leaseTime, null); return(true); } catch (StorageException e) { TraceHelper.TraceWarning("Warning acquiring blob '{0}' lease: {1}", lockContext.ObjectId, e.Message); var requestInformation = e.RequestInformation; var statusCode = (System.Net.HttpStatusCode)requestInformation.HttpStatusCode;//request if (statusCode == HttpStatusCode.NotFound) { lockContext.LockId = null; TraceHelper.TraceWarning(e.TraceInformation()); return(true); } else if (HttpStatusCode.Conflict.Equals(statusCode)) { lockContext.LockId = null; return(false); } TraceHelper.TraceError(e.TraceInformation()); return(false); } catch (Exception e) { TraceHelper.TraceError("Error acquiring blob '{0}' lease: {1}", lockContext.ObjectId, e.Message); throw; } }