Esempio n. 1
0
        public void TestPostProcessing1Event()
        {
            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();
            }
            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(-1L, versionEntry.TxId);
        }