예제 #1
0
        public void TestReplaceOldCase2Event()
        {
            TransactionExecution texDelete = new TransactionExecution(null, this.versionDb);

            texDelete.DEBUG_MODE = true;
            while (texDelete.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.InitTx();
            }
            texDelete.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texDelete.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            texDelete.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            texDelete.Upload();
            while (texDelete.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texDelete.Upload();
            }
            Assert.AreEqual(new Procedure(texDelete.SetCommitTimestamp), texDelete.CurrentProc);

            TransactionExecution texUpdate = new TransactionExecution(null, this.versionDb);

            texUpdate.DEBUG_MODE = true;
            while (texUpdate.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.InitTx();
            }
            texUpdate.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Read(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            texUpdate.Update(TABLE_ID, DEFAULT_KEY, "value_update");
            texUpdate.Upload();
            while (texUpdate.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Upload();
            }
            Assert.AreEqual(new Procedure(texUpdate.Abort), texUpdate.CurrentProc);
        }
예제 #2
0
        // case1: upload new inserted entry successfully under event-driven senario.
        public void TestUploadNewCase1Event()
        {
            TransactionExecution texDelete = new TransactionExecution(null, this.versionDb);

            while (texDelete.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.InitTx();
            }
            texDelete.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texDelete.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            texDelete.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            texDelete.Commit();
            while (texDelete.Progress != TxProgress.Close)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.CurrentProc();
            }

            TransactionExecution texInsert = new TransactionExecution(null, this.versionDb);

            texInsert.DEBUG_MODE = true;
            while (texInsert.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texInsert.InitTx();
            }
            texInsert.ReadAndInitialize(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texInsert.ReadAndInitialize(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            texInsert.Insert(TABLE_ID, DEFAULT_KEY, "value_insert");
            texInsert.Upload();
            while (texInsert.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texInsert.Upload();
            }
            Assert.AreEqual(new Procedure(texInsert.SetCommitTimestamp), texInsert.CurrentProc);
        }
예제 #3
0
        public void TestReplaceOldCase9Event()
        {
            TransactionExecution texUpdate = new TransactionExecution(null, this.versionDb);

            texUpdate.DEBUG_MODE = true;
            while (texUpdate.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.InitTx();
            }
            texUpdate.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Read(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            texUpdate.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            texUpdate.Upload();
            while (texUpdate.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Upload();
            }
            Assert.AreEqual(new Procedure(texUpdate.SetCommitTimestamp), texUpdate.CurrentProc);

            TransactionExecution texUpdate1 = new TransactionExecution(null, this.versionDb);

            texUpdate1.DEBUG_MODE = true;
            while (texUpdate1.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate1.InitTx();
            }
            texUpdate1.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead1, out object payloadRead1);
            while (!receivedRead1)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate1.Read(TABLE_ID, DEFAULT_KEY, out receivedRead1, out payloadRead1);
            }

            texUpdate.SetCommitTimestamp();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.SetCommitTimestamp();
            }
            Assert.AreEqual(new Procedure(texUpdate.Validate), texUpdate.CurrentProc);
            texUpdate.Validate();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Validate();
            }
            Assert.AreEqual(new Procedure(texUpdate.WriteToLog), texUpdate.CurrentProc);
            texUpdate.WriteToLog();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.WriteToLog))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.WriteToLog();
            }
            Assert.AreEqual(new Procedure(texUpdate.PostProcessingAfterCommit), texUpdate.CurrentProc);
            texUpdate.PostProcessingAfterCommit();
            while (texUpdate.Progress != TxProgress.Close)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.PostProcessingAfterCommit();
            }

            texUpdate1.Update(TABLE_ID, DEFAULT_KEY, "value_update_1");
            texUpdate1.Upload();
            while (texUpdate1.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate1.Upload();
            }
            Assert.AreEqual(new Procedure(texUpdate1.Abort), texUpdate1.CurrentProc);
        }
예제 #4
0
        public void TestPostProcessing4Event()
        {
            TransactionExecution texUpdate = new TransactionExecution(null, this.versionDb);

            texUpdate.DEBUG_MODE = true;
            while (texUpdate.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.InitTx();
            }
            texUpdate.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            texUpdate.Update(TABLE_ID, DEFAULT_KEY, "value_update");
            texUpdate.maxCommitTsOfWrites = 4L;
            texUpdate.Upload();
            while (texUpdate.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Upload();
            }
            texUpdate.SetCommitTimestamp();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.SetCommitTimestamp();
            }
            texUpdate.Validate();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Validate();
            }
            Assert.AreEqual(new Procedure(texUpdate.WriteToLog), texUpdate.CurrentProc);
            texUpdate.WriteToLog();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.WriteToLog))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.WriteToLog();
            }

            TransactionExecution texDelete = new TransactionExecution(null, this.versionDb);

            texDelete.DEBUG_MODE = true;
            while (texDelete.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.InitTx();
            }
            texDelete.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.Read(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            texDelete.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            texDelete.Upload();
            while (texDelete.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.Upload();
            }

            texUpdate.PostProcessingAfterCommit();
            while (texUpdate.Progress != TxProgress.Close)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.PostProcessingAfterCommit();
            }

            VersionEntry newVersionEntry = this.GetVersionByKey(2L);

            Assert.AreEqual(5L, newVersionEntry.BeginTimestamp);
            Assert.AreEqual(long.MaxValue, newVersionEntry.EndTimestamp);
            Assert.AreEqual(texDelete.txId, newVersionEntry.TxId);

            VersionEntry oldVersionEntry = this.GetVersionByKey(1L);

            Assert.AreEqual(0L, oldVersionEntry.BeginTimestamp);
            Assert.AreEqual(5L, oldVersionEntry.EndTimestamp);
            Assert.AreEqual(-1L, oldVersionEntry.TxId);
        }
예제 #5
0
        public void TestPostProcessing2Event()
        {
            TransactionExecution texUpdate = new TransactionExecution(null, this.versionDb);

            texUpdate.DEBUG_MODE = true;
            while (texUpdate.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.InitTx();
            }
            texUpdate.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            texUpdate.Update(TABLE_ID, DEFAULT_KEY, "value_update");
            texUpdate.Upload();
            while (texUpdate.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Upload();
            }
            texUpdate.Abort();
            while (texUpdate.CurrentProc != new Procedure(texUpdate.PostProcessingAfterAbort))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Abort();
            }

            TransactionExecution texDelete = new TransactionExecution(null, this.versionDb);

            texDelete.DEBUG_MODE = true;
            while (texDelete.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.InitTx();
            }
            texDelete.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.Read(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            texDelete.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            texDelete.Upload();
            while (texDelete.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texDelete.Upload();
            }

            texUpdate.PostProcessingAfterAbort();
            while (texUpdate.Progress != TxProgress.Close)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.PostProcessingAfterAbort();
            }

            Assert.AreEqual(null, this.GetVersionByKey(2L));
            VersionEntry versionEntry = this.GetVersionByKey(1L);

            Assert.AreEqual(0L, versionEntry.BeginTimestamp);
            Assert.AreEqual(long.MaxValue, versionEntry.EndTimestamp);
            Assert.AreEqual(texDelete.txId, versionEntry.TxId);
        }
예제 #6
0
        public void TestValidation7_2Event()
        {
            TransactionExecution tex1 = new TransactionExecution(null, this.versionDb);

            tex1.DEBUG_MODE = true;
            while (tex1.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex1.InitTx();
            }
            tex1.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex1.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            tex1.Upload();
            while (tex1.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex1.Upload();
            }

            TransactionExecution tex = new TransactionExecution(null, this.versionDb);

            tex.DEBUG_MODE = true;
            while (tex.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.InitTx();
            }
            tex.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Read(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            tex.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            tex.Upload();
            while (tex.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Upload();
            }
            tex.maxCommitTsOfWrites = 4L;
            tex.SetCommitTimestamp();
            while (tex.CurrentProc == new Procedure(tex.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.SetCommitTimestamp();
            }
            tex.Validate();
            while (tex.CurrentProc == new Procedure(tex.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.Validate();
            }
            Assert.AreEqual(new Procedure(tex.WriteToLog), tex.CurrentProc);

            tex1.maxCommitTsOfWrites = 5L;
            tex1.SetCommitTimestamp();
            while (tex1.CurrentProc == new Procedure(tex1.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex1.SetCommitTimestamp();
            }
            tex1.Validate();
            while (tex1.CurrentProc == new Procedure(tex1.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex1.Validate();
            }
            Assert.AreEqual(new Procedure(tex1.Abort), tex1.CurrentProc);
        }
예제 #7
0
        public void TestValidation6Event()
        {
            TransactionExecution tex1 = new TransactionExecution(null, this.versionDb);

            tex1.DEBUG_MODE = true;
            while (tex1.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex1.InitTx();
            }
            tex1.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex1.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            tex1.Upload();
            while (tex1.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex1.Upload();
            }

            TransactionExecution tex = new TransactionExecution(null, this.versionDb);

            tex.DEBUG_MODE = true;
            while (tex.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.InitTx();
            }
            tex.Read(TABLE_ID, DEFAULT_KEY, out bool receivedRead, out object payloadRead);
            while (!receivedRead)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Read(TABLE_ID, DEFAULT_KEY, out receivedRead, out payloadRead);
            }
            tex.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            tex.Upload();
            while (tex.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Upload();
            }

            tex1.maxCommitTsOfWrites = 3L;
            tex1.SetCommitTimestamp();
            while (tex1.CurrentProc == new Procedure(tex1.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex1.SetCommitTimestamp();
            }
            tex1.Validate();
            while (tex1.CurrentProc == new Procedure(tex1.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex1.Validate();
            }
            Assert.AreEqual(new Procedure(tex1.WriteToLog), tex1.CurrentProc);

            tex.SetCommitTimestamp();
            while (tex.CurrentProc == new Procedure(tex.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.SetCommitTimestamp();
            }
            tex.Validate();
            while (tex.CurrentProc == new Procedure(tex.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.Validate();
            }
            Assert.AreEqual(new Procedure(tex.WriteToLog), tex.CurrentProc);

            GetTxEntryRequest getTxReq = new GetTxEntryRequest(tex.txId);

            this.versionDb.EnqueueTxEntryRequest(tex.txId, getTxReq);
            this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
            while (getTxReq.Result == null)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
            }
            TxTableEntry txEntry = getTxReq.Result as TxTableEntry;

            Assert.AreEqual(5L, txEntry.CommitTime);
        }
예제 #8
0
        public void TestValidation4Event()
        {
            TransactionExecution tex = new TransactionExecution(null, this.versionDb);

            tex.DEBUG_MODE = true;
            while (tex.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.InitTx();
            }
            tex.Read(TABLE_ID, DEFAULT_KEY, out bool received, out object payload);
            while (!received)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Read(TABLE_ID, DEFAULT_KEY, out received, out payload);
            }
            tex.Upload();
            while (tex.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Upload();
            }

            TransactionExecution texUpdate = new TransactionExecution(null, this.versionDb);

            texUpdate.DEBUG_MODE = true;
            while (texUpdate.Progress == TxProgress.Initi)
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.InitTx();
            }
            texUpdate.Read(TABLE_ID, DEFAULT_KEY, out bool receivedUpdate, out object payloadUpdate);
            while (!receivedUpdate)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Read(TABLE_ID, DEFAULT_KEY, out receivedUpdate, out payloadUpdate);
            }
            texUpdate.Delete(TABLE_ID, DEFAULT_KEY, out object payloadDelete);
            texUpdate.Upload();
            while (texUpdate.CurrentProc == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                texUpdate.Upload();
            }
            Assert.AreEqual(new Procedure(texUpdate.SetCommitTimestamp), texUpdate.CurrentProc);
            texUpdate.SetCommitTimestamp();
            while (texUpdate.CurrentProc == new Procedure(texUpdate.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.SetCommitTimestamp();
            }
            Assert.AreEqual(new Procedure(texUpdate.Validate), texUpdate.CurrentProc);
            texUpdate.Abort();
            while (texUpdate.CurrentProc != new Procedure(texUpdate.PostProcessingAfterAbort))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                texUpdate.Abort();
            }

            tex.SetCommitTimestamp();
            while (tex.CurrentProc == new Procedure(tex.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.SetCommitTimestamp();
            }
            Assert.AreEqual(new Procedure(tex.Validate), tex.CurrentProc);
            tex.Validate();
            while (tex.CurrentProc == new Procedure(tex.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.Validate();
            }
            Assert.AreEqual(new Procedure(tex.WriteToLog), tex.CurrentProc);
        }