Ejemplo n.º 1
0
        public void TestValidation1Event()
        {
            //Test the function of UpdateVersionMaxCommitTs() in the event-driven senario.

            UpdateVersionMaxCommitTsRequest req = new UpdateVersionMaxCommitTsRequest(TABLE_ID, DEFAULT_KEY, 1L, 5L);

            this.versionDb.GetVersionTable(TABLE_ID).EnqueueVersionEntryRequest(req);

            while (req.Result == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
            }
            VersionEntry versionEntry = req.Result as VersionEntry;

            Assert.AreEqual(5L, versionEntry.MaxCommitTs);

            req = new UpdateVersionMaxCommitTsRequest(TABLE_ID, DEFAULT_KEY, 1L, 3L);
            this.versionDb.GetVersionTable(TABLE_ID).EnqueueVersionEntryRequest(req);

            while (req.Result == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
            }
            this.versionDb.Visit(TABLE_ID, 0);
            versionEntry = req.Result as VersionEntry;
            Assert.AreEqual(5L, versionEntry.MaxCommitTs);
        }
Ejemplo n.º 2
0
        public void TestValidation3Event()
        {
            UpdateVersionMaxCommitTsRequest req = new UpdateVersionMaxCommitTsRequest(TABLE_ID, DEFAULT_KEY, 1L, 5L);

            this.versionDb.GetVersionTable(TABLE_ID).EnqueueVersionEntryRequest(req);

            while (req.Result == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
            }

            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();
            }
            tex.maxCommitTsOfWrites = 4L;
            tex.SetCommitTimestamp();
            while (tex.CurrentProc == new Procedure(tex.SetCommitTimestamp))
            {
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                tex.SetCommitTimestamp();
            }

            VersionEntry versionEntry =
                this.versionDb.ReplaceVersionEntry(TABLE_ID, DEFAULT_KEY, 1L, 0L, 4L, -1, -1, long.MaxValue);

            tex.Validate();
            while (tex.CurrentProc == new Procedure(tex.Validate))
            {
                this.versionDb.Visit(TABLE_ID, 0);
                tex.Validate();
            }
            Assert.AreEqual(new Procedure(tex.Abort), tex.CurrentProc);
        }
Ejemplo n.º 3
0
        public void TestSetGetCommitTs5Event()
        {
            UpdateVersionMaxCommitTsRequest req = new UpdateVersionMaxCommitTsRequest(TABLE_ID, DEFAULT_KEY, 1L, 5L);

            this.versionDb.GetVersionTable(TABLE_ID).EnqueueVersionEntryRequest(req);

            while (req.Result == null)
            {
                this.versionDb.Visit(TABLE_ID, 0);
            }

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

            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.Update(TABLE_ID, DEFAULT_KEY, "value_update_1");
            tex.Commit();
            while (tex.Progress != TxProgress.Close)
            {
                this.versionDb.Visit(TABLE_ID, 0);
                this.versionDb.Visit(RedisVersionDb.TX_TABLE, 0);
                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(6L, txEntry.CommitTime);
        }