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);
            }
Example #2
0
        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);
        }
Example #3
0
        public async Task IsLeaseLocked_WhenBlobLeaseWasReleased_ReturnsFalse()
        {
            var leaseId = await Blob.AcquireLeaseAsync(TimeSpan.FromSeconds(15));

            await Blob.ReleaseLeaseAsync(leaseId);

            Assert.False(await Blob.IsLeaseLocked());
        }
Example #4
0
        public async Task BreakedLease_CanBeAcquired()
        {
            await Blob.AcquireLeaseAsync();

            await Blob.BreakLeaseAsync();

            Assert.NotNull(await Blob.AcquireLeaseAsync());
        }
Example #5
0
        public async Task IsLeaseLocked_WhenBlobLeaseWasAcquired_ReturnsTrue()
        {
            await Blob.AcquireLeaseAsync(TimeSpan.FromSeconds(15));

            Assert.True(await Blob.IsLeaseLocked());
        }