public void LockConversionTest1() { MyLM target = new MyLM(); target.setDeadlockTimeout(1000); Transaction context = new Transaction(); Lockable resource = new RID(RID.Type.CAR, "test"); target.LockForUpdate(context, resource); target.LockForWrite(context, resource); }
public void LM_DowngradeWriteLockToReadLock() { MyLM lm = new MyLM(); RID res1 = new RID(); Transaction t1 = new Transaction(); lm.LockForWrite(t1, res1); lm.LockForRead(t1, res1); }
/// <summary> /// Default constructor. /// </summary> protected StorageManager() { this.activeContextMap = new Dictionary <Transaction, StorageContext>(); this.preparedContextMap = new StorageTransactionTable(); this.pageManager = new StoragePageManager(); this.lockManager = new MyLM(); this.disposed = false; }
public void LM_GetReadLockForManyTransactions() { MyLM lm = new MyLM(); RID res1 = new RID(); Transaction t1 = new Transaction(); Transaction t2 = new Transaction(); lm.LockForRead(t1, res1); lm.LockForRead(t2, res1); }
public void LM_GetWritelockOnResLockedWithWriteLock() { MyLM lm = new MyLM(); RID res1 = new RID(); Transaction t1 = new Transaction(); Transaction t2 = new Transaction(); lm.setDeadlockTimeout(500); // Shorten deadlock timeout to speed up unit test lm.LockForWrite(t1, res1); lm.LockForWrite(t2, res1); }
public void LockConversionTest2() { MyLM target = new MyLM(); target.setDeadlockTimeout(1000); Transaction context = new Transaction(); Transaction context2 = new Transaction(); Lockable resource = new RID(RID.Type.CAR, "test"); target.setDeadlockTimeout(10); target.LockForUpdate(context, resource); target.LockForRead(context2, resource); target.LockForWrite(context, resource); Assert.Fail("shall not reach this line"); }
public void LockConversionTest3() { MyLM target = new MyLM(); target.setDeadlockTimeout(1000); Transaction context = new Transaction(); Transaction context2 = new Transaction(); Lockable resource = new RID(RID.Type.CAR, "test"); target.LockForUpdate(context, resource); target.LockForRead(context2, resource); ManualResetEvent e = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem((obj) => { Thread.Sleep(200); target.UnlockRead(context2, resource); e.Set(); }); target.LockForWrite(context, resource); if (!e.WaitOne(2000)) { Assert.Fail("Failed"); } }
public LM_Rid_Bundle(MyLM lm, RID rid) { this.lm = lm; this.rid = rid; status = 0; event1 = new AutoResetEvent(false); }
public void LM_UpgradeReadLockToWriteLock5() { MyLM lm = new MyLM(); RID res1 = new RID(); Transaction t1 = new Transaction(); lm.LockForRead(t1, res1); lm.LockForWrite(t1, res1); lm.LockForWrite(t1, res1); // This should be a noop since the transaction already has a write lock on the resource. }
public void LM_UpgradeReadLockToWriteLock4() { MyLM lm = new MyLM(); RID res1 = new RID(); Transaction t1 = new Transaction(); Transaction t2 = new Transaction(); lm.setDeadlockTimeout(500); // Shorten deadlock timeout to speed up unit test lm.LockForWrite(t2, res1); lm.LockForWrite(t1, res1); }
public void LM_UpgradeReadLockToWriteLock2() { MyLM lm = new MyLM(); RID res1 = new RID(); Transaction t1 = new Transaction(); LM_Rid_Bundle param = new LM_Rid_Bundle(lm, res1); Thread thread = new Thread(AttemptWriteLockOnResource); lm.setDeadlockTimeout(3000); // Shorten deadlock timeout to 3 seconds speed up unit test lm.LockForRead(t1, res1); thread.Start(param); Thread.Sleep(1000); lm.LockForWrite(t1, res1); thread.Join(); // Make sure that the second thread failed with deadlock exception. // This should happen because the first thread is still holding either the read lock or write lock // when the second thread trys to acquire a write lock. The second thread won't be able to steal the // lock from the first thread because two phase locking was used when the LM upgrades the read lock // to a write lock. Assert.AreEqual(param.status, 1); }
public MyRM() { this._lockManager = new MyLM(); _name = "MyRM"; }
public void UnlockWriteTest() { MyLM target = new MyLM(); Transaction context = new Transaction(); Transaction context2 = new Transaction(); Lockable resource = new RID(RID.Type.CAR, "test"); target.LockForWrite(context, resource); target.UnlockWrite(context, resource); target.LockForWrite(context2, resource); }
public void LockForReadTest2() { MyLM target = new MyLM(); target.setDeadlockTimeout(1000); Transaction context = new Transaction(); Transaction context2 = new Transaction(); Lockable resource = new RID(RID.Type.CAR, "test"); target.setDeadlockTimeout(10); target.LockForRead(context, resource); target.LockForWrite(context2, resource); target.LockForWrite(context2, resource); }