private void AcquireLock() { ulong cas; var lockPOCO = Get(LockKey, out cas); if (lockPOCO != null) { CheckLockPocoIsMyLock(lockPOCO); } var storeKeyLock = new StoreKeyLock() { Expiry = Expires, WorkerId = WorkerId, IsConfirmed = true }; Set(LockKey, storeKeyLock, cas); }
private void CheckLockPocoIsMyLock(StoreKeyLock lockPOCO, bool isMyLock = false) { if (lockPOCO != null) { if (lockPOCO.Expiry >= DateTime.UtcNow) { if (WorkerId != lockPOCO.WorkerId) { throw new LockException("This worker " + WorkerId + " has already locked key " + LockKey); } else if (!isMyLock) { throw new LockException("Cannot acquire lock for " + LockKey + " as it has already been locked by " + WorkerId); } } //otherwise the lock has expired so continue } else { throw new ArgumentNullException("Lock POCO is null"); } }
private void Set(string key, StoreKeyLock value, ulong cas) { Provider.Set(key, Serializer.Serialize(value), cas); }
private void Set(string key, StoreKeyLock value) { Provider.Set(key, Serializer.Serialize(value)); }