Example #1
0
        private bool CheckTimeout(DbLuceneLock dbLock)
        {
            DateTime now = DateTime.UtcNow;

            if (dbLock.ExpireTimeUTC < now)
            {
                return(true);
            }
            return(false);
        }
Example #2
0
        public override void Release()
        {
            DbLuceneLock dbLock = _db.LuceneLockSet.SingleOrDefault(obj => obj.LockName.Equals(_lockName) && obj.LockSource.Equals(_srcGuid));

            if (dbLock == null)
            {
                return;
            }

            _db.LuceneLockSet.Remove(dbLock);
            _db.SaveChanges();
        }
Example #3
0
        public override bool IsLocked()
        {
            // Check lockName only. The lock may be from another source.
            DbLuceneLock dbLock = _db.LuceneLockSet.SingleOrDefault(obj => obj.LockName.Equals(_lockName));

            if (dbLock == null)
            {
                return(false);
            }

            // If the lock is timeout. Just release it.
            bool timeout = CheckTimeout(dbLock);

            if (timeout)
            {
                return(false);
            }

            return(true);
        }
Example #4
0
        /// <summary>
        /// DbLuceneLock啟用Optimistic Locking的機制。如果該lock object有多個人修改,會造成Exception。以此處理concurrency的問題。
        /// </summary>
        /// <returns></returns>
        public override bool Obtain()
        {
            DbLuceneLock dbLock = _db.LuceneLockSet.SingleOrDefault(obj => obj.LockName.Equals(_lockName));

            if (dbLock != null && CheckTimeout(dbLock) == false)
            {
                return(false);
            }

            if (dbLock == null)
            {
                dbLock               = new DbLuceneLock(_lockName);
                dbLock.LockSource    = _srcGuid;
                dbLock.ExpireTimeUTC = DateTime.UtcNow.Add(_expireOffset);
                _db.LuceneLockSet.Add(dbLock);
                _db.SaveChanges();
                return(true);
            }

            dbLock.LockSource    = _srcGuid;
            dbLock.ExpireTimeUTC = DateTime.UtcNow.Add(_expireOffset);
            _db.SaveChanges();
            return(true);
        }