public async Task AcquireInfiniteLeaseAsync() { _autoRenewLeaseThread.Abort(); // ... by taking an infinite lease (as long as the lease is there, no other job instance will be able to acquire a lease on it and attempt processing it) await Blob.AcquireLeaseAsync(null, LeaseId); }
public async Task <bool> AcquireAsync(BlobLease lease, string owner) { Blob leaseBlob = lease.Blob; try { string newLeaseId = Guid.NewGuid().ToString(); if (leaseBlob.IsLeased) { lease.Token = await leaseBlob.ChangeLeaseAsync(newLeaseId, currentLeaseId : lease.Token); } else { lease.Token = await leaseBlob.AcquireLeaseAsync(this.leaseInterval, newLeaseId); } lease.Owner = owner; // Increment Epoch each time lease is acquired or stolen by new host lease.Epoch += 1; await leaseBlob.UploadTextAsync(JsonConvert.SerializeObject(lease), leaseId : lease.Token); } catch (DurableTaskStorageException storageException) { throw HandleStorageException(lease, storageException); } return(true); }
public async Task IsLeaseLocked_WhenBlobLeaseWasReleased_ReturnsFalse() { var leaseId = await Blob.AcquireLeaseAsync(TimeSpan.FromSeconds(15)); await Blob.ReleaseLeaseAsync(leaseId); Assert.False(await Blob.IsLeaseLocked()); }
public async Task BreakedLease_CanBeAcquired() { await Blob.AcquireLeaseAsync(); await Blob.BreakLeaseAsync(); Assert.NotNull(await Blob.AcquireLeaseAsync()); }
public async Task IsLeaseLocked_WhenBlobLeaseWasAcquired_ReturnsTrue() { await Blob.AcquireLeaseAsync(TimeSpan.FromSeconds(15)); Assert.True(await Blob.IsLeaseLocked()); }