summaryrefslogtreecommitdiff
path: root/test/scr037/DatabaseEnvironmentTest.cs
diff options
context:
space:
mode:
Diffstat (limited to 'test/scr037/DatabaseEnvironmentTest.cs')
-rw-r--r--test/scr037/DatabaseEnvironmentTest.cs1778
1 files changed, 0 insertions, 1778 deletions
diff --git a/test/scr037/DatabaseEnvironmentTest.cs b/test/scr037/DatabaseEnvironmentTest.cs
deleted file mode 100644
index 570bdc2..0000000
--- a/test/scr037/DatabaseEnvironmentTest.cs
+++ /dev/null
@@ -1,1778 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 2009 Oracle. All rights reserved.
- *
- */
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Text;
-using System.Threading;
-using System.Xml;
-using NUnit.Framework;
-using BerkeleyDB;
-
-namespace CsharpAPITest
-{
- [TestFixture]
- public class DatabaseEnvironmentTest
- {
- private string testFixtureHome;
- private string testFixtureName;
- private string testName;
- private string testHome;
-
- private DatabaseEnvironment testBeginTransactionEnv;
- private BTreeDatabase testBeginTransactionDB;
-
- private DatabaseEnvironment testCheckpointEnv;
- private BTreeDatabase testCheckpointDB;
-
- private DatabaseEnvironment testDetectDeadlocksEnv;
- private BTreeDatabase testDetectDeadlocksDB;
-
- private DatabaseEnvironment testFailCheckEnv;
-
- private EventWaitHandle signal;
-
- [TestFixtureSetUp]
- public void SetUp()
- {
- testFixtureName = "DatabaseEnvironmentTest";
- testFixtureHome = "./TestOut/" + testFixtureName;
- try
- {
- Configuration.ClearDir(testFixtureHome);
- }
- catch (Exception)
- {
- throw new TestException(
- "Please clean the directory");
- }
- }
-
- [Test]
- public void TestArchivableDatabaseFiles()
- {
- testName = "TestArchivableDatabaseFiles";
- testHome = testFixtureHome + "/" + testName;
- string dbFileName1 = testName + "1.db";
- string dbFileName2 = testName + "2.db";
-
- Configuration.ClearDir(testHome);
-
- // Open an environment.
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.AutoCommit = true;
- envConfig.Create = true;
- envConfig.UseMPool = true;
- envConfig.UseLogging = true;
- envConfig.UseTxns = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConfig);
-
- // Open two databases.
- BTreeDatabaseConfig dbConfig =
- new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase db1 = BTreeDatabase.Open(dbFileName1, dbConfig);
- db1.Close();
- BTreeDatabase db2 = BTreeDatabase.Open(dbFileName2, dbConfig);
- db2.Close();
-
- /*
- * Get all database files name in the environment.
- * Two database file name should be returned and
- * the same as the ones when opening the databases.
- */
- List<string> dbFiles = env.ArchivableDatabaseFiles(false);
- Assert.AreEqual(2, dbFiles.Count);
- Assert.IsTrue(dbFiles.Contains(dbFileName1));
- Assert.IsTrue(dbFiles.Contains(dbFileName2));
-
- /*
- * Get all database file's abosolute path in the
- * environment. Confirm those files exist.
- */
- List<string> dbFilesPath = env.ArchivableDatabaseFiles(true);
- Assert.IsTrue(File.Exists(dbFilesPath[0]));
- Assert.IsTrue(File.Exists(dbFilesPath[1]));
-
- env.Close();
- }
-
- [Test]
- public void TestArchivableLogFiles()
- {
- testName = "TestArchivableLogFiles";
- testHome = testFixtureHome + "/" + testName;
- string dbFileName = testName + ".db";
-
- Configuration.ClearDir(testHome);
-
- // Open an environment.
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.AutoCommit = true;
- envConfig.Create = true;
- envConfig.UseMPool = true;
- envConfig.UseLogging = true;
- envConfig.UseTxns = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConfig);
-
- // Open a databases.
- BTreeDatabaseConfig dbConfig =
- new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase db = BTreeDatabase.Open(
- dbFileName, dbConfig);
-
- /*
- * Put 1000 records into the database to generate
- * more than one log files.
- */
- byte[] byteArr = new byte[1024];
- for (int i = 0; i < 1000; i++)
- db.Put(new DatabaseEntry(
- BitConverter.GetBytes(i)),
- new DatabaseEntry(byteArr));
-
- db.Close();
-
- List<string> logFiles = env.ArchivableLogFiles(false);
-
- List<string> logFilesPath =
- env.ArchivableLogFiles(true);
- for (int i = 0; i < logFilesPath.Count; i++)
- Assert.IsTrue(File.Exists(logFilesPath[i]));
-
- env.Close();
- }
-
- [Test]
- public void TestBeginCDSGroup()
- {
- testName = "TestBeginCDSGroup";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseCDB = true;
- cfg.UseMPool = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg);
- Transaction txn = env.BeginCDSGroup();
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase db = BTreeDatabase.Open(
- testName + ".db", dbConfig, txn);
- db.Put(new DatabaseEntry(
- ASCIIEncoding.ASCII.GetBytes("key")),
- new DatabaseEntry(
- ASCIIEncoding.ASCII.GetBytes("data")), txn);
- db.Close();
- txn.Commit();
- env.Close();
- }
-
- [Test]
- public void TestBeginTransaction()
- {
- testName = "TestBeginTransaction";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open an environment.
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseTxns = true;
- cfg.UseMPool = true;
- cfg.UseLogging = true;
- cfg.UseLocking = true;
- cfg.NoLocking = false;
- cfg.FreeThreaded = true;
- testBeginTransactionEnv = DatabaseEnvironment.Open(testHome, cfg);
- testBeginTransactionEnv.DeadlockResolution = DeadlockPolicy.OLDEST;
-
- // Open btree database.
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.AutoCommit = true;
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = testBeginTransactionEnv;
- dbConfig.Duplicates = DuplicatesPolicy.NONE;
- dbConfig.FreeThreaded = true;
- testBeginTransactionDB = BTreeDatabase.Open(
- testName + ".db", dbConfig);
-
- testBeginTransactionDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("key")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("data")));
-
- // Begin two threads to run dead lock detection.
- Thread thread1 = new Thread(new ThreadStart(
- DeadLockThreadWithLockTimeOut));
- Thread thread2 = new Thread(new ThreadStart(
- DeadLockThreadWithTxnTimeout));
- signal = new EventWaitHandle(false, EventResetMode.ManualReset);
- thread1.Start();
- thread2.Start();
- Thread.Sleep(1000);
- signal.Set();
- thread1.Join();
- thread2.Join();
-
- // Close all.
- testBeginTransactionDB.Close();
- testBeginTransactionEnv.Close();
- }
-
- public void DeadLockThreadWithLockTimeOut()
- {
- // Configure and begin a transaction.
- TransactionConfig txnConfig = new TransactionConfig();
- txnConfig.LockTimeout = 5000;
- txnConfig.Name = "DeadLockThreadWithLockTimeOut";
- Transaction txn =
- testBeginTransactionEnv.BeginTransaction(txnConfig, null);
- try
- {
- testBeginTransactionDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("key")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("data")));
- signal.WaitOne();
- testBeginTransactionDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("newkey")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("newdata")),
- txn);
- txn.Commit();
- }
- catch (DeadlockException)
- {
- try
- {
- txn.Abort();
- }
- catch (DatabaseException)
- {
- throw new TestException();
- }
- }
- catch (DatabaseException)
- {
- try
- {
- txn.Abort();
- }
- catch (DatabaseException)
- {
- throw new TestException();
- }
- }
- }
-
- public void DeadLockThreadWithTxnTimeout()
- {
- // Configure and begin a transaction.
- TransactionConfig txnConfig = new TransactionConfig();
- txnConfig.TxnTimeout = 5000;
- txnConfig.Name = "DeadLockThreadWithTxnTimeout";
- Transaction txn =
- testBeginTransactionEnv.BeginTransaction(txnConfig, null);
- try
- {
- testBeginTransactionDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("key")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("data")));
- signal.WaitOne();
- testBeginTransactionDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("newkey")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("newdata")),
- txn);
- txn.Commit();
- }
- catch (DeadlockException)
- {
- try
- {
- txn.Abort();
- }
- catch (DatabaseException)
- {
- throw new TestException();
- }
- }
- catch (DatabaseException)
- {
- try
- {
- txn.Abort();
- }
- catch (DatabaseException)
- {
- throw new TestException();
- }
- }
- }
-
- [Test]
- public void TestCheckpoint()
- {
- testName = "TestCheckpoint";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open an environment.
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseTxns = true;
- cfg.UseMPool = true;
- cfg.UseLogging = true;
- cfg.UseLocking = true;
- cfg.NoLocking = false;
- cfg.FreeThreaded = true;
- testCheckpointEnv = DatabaseEnvironment.Open(testHome, cfg);
-
- // Open btree database.
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.AutoCommit = true;
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = testCheckpointEnv;
- dbConfig.FreeThreaded = true;
- testCheckpointDB = BTreeDatabase.Open(testName + ".db", dbConfig);
-
-
- // Run a thread to put records into database.
- Thread thread1 = new Thread(new ThreadStart(PutRecordsThread));
-
- /*
- * Run a thread to do checkpoint periodically and
- * finally do a checkpoint to flush all in memory pool
- * to log files.
- */
- Thread thread2 = new Thread(new ThreadStart(CheckpointThread));
-
- thread1.Start();
- thread2.Start();
- thread1.Join();
- thread2.Join();
-
- // Close all.
- testCheckpointDB.Close();
- testCheckpointEnv.Close();
- }
-
- public void PutRecordsThread()
- {
- Transaction txn = testCheckpointEnv.BeginTransaction();
- byte[] byteArr = new byte[1024];
- for (int i = 0; i < 1000; i++)
- testCheckpointDB.Put(
- new DatabaseEntry(BitConverter.GetBytes(i)),
- new DatabaseEntry(byteArr), txn);
- txn.Commit();
- }
-
- public void CheckpointThread()
- {
- uint bytes = 64;
- uint minutes = 1;
- uint count = 1;
- while (count < 3)
- {
- testCheckpointEnv.Checkpoint(bytes, minutes);
- count++;
- }
- Thread.Sleep(500);
- testCheckpointEnv.Checkpoint();
- }
-
- [Test]
- public void TestClose()
- {
- testName = "TestClose";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, cfg);
- env.Close();
- }
-
- [Test]
- public void TestConfigAll()
- {
- testName = "TestConfigAll";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- XmlElement xmlElem = Configuration.TestSetUp(
- testFixtureName, testName);
-
- /*
- * Open a new environment with all properties,
- * fields and subsystems configured.
- */
- DatabaseEnvironmentConfig envConig =
- new DatabaseEnvironmentConfig();
- Config(xmlElem, ref envConig, true, true, true,
- true, true, true);
-
- // Configure with methods.
- ReplicationHostAddress address =
- new ReplicationHostAddress("127.0.0.0", 11111);
- envConig.RepSystemCfg.Clockskew(102, 100);
- envConig.RepSystemCfg.RetransmissionRequest(10, 100);
- envConig.RepSystemCfg.TransmitLimit(1, 1024);
-
- // Open the environment.
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConig);
-
- // Confirm environment status with its configuration.
- Confirm(xmlElem, env, true, true, true, true, true, true);
-
- // Print statistics of the current environment.
- env.PrintStats(true, true);
-
- // Print statistics of all subsytems.
- env.PrintSubsystemStats(true, true);
-
- env.Close();
- }
-
- [Test]
- public void TestDeadlockPolicy()
- {
- testName = "TestDeadlockPolicy";
- testHome = testFixtureHome + "/" + testName;
-
- DetectDeadlockPolicy(testHome + "_DEFAULT",
- DeadlockPolicy.DEFAULT);
-
- DetectDeadlockPolicy(testHome + "_EXPIRE",
- DeadlockPolicy.EXPIRE);
- DetectDeadlockPolicy(testHome + "_MAX_LOCKS",
- DeadlockPolicy.MAX_LOCKS);
- DetectDeadlockPolicy(testHome + "_MAX_WRITE",
- DeadlockPolicy.MAX_WRITE);
- DetectDeadlockPolicy(testHome + "_MIN_LOCKS",
- DeadlockPolicy.MIN_LOCKS);
- DetectDeadlockPolicy(testHome + "_MIN_WRITE",
- DeadlockPolicy.MIN_WRITE);
- DetectDeadlockPolicy(testHome + "_OLDEST",
- DeadlockPolicy.OLDEST);
- DetectDeadlockPolicy(testHome + "_RANDOM",
- DeadlockPolicy.RANDOM);
- DetectDeadlockPolicy(testHome + "_YOUNGEST",
- DeadlockPolicy.YOUNGEST);
- }
-
- public void DetectDeadlockPolicy(
- string home, DeadlockPolicy deadlock)
- {
- Configuration.ClearDir(home);
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.Create = true;
- envConfig.UseLocking = true;
- envConfig.UseLogging = true;
- envConfig.UseMPool = true;
- envConfig.UseTxns = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- home, envConfig);
- env.DeadlockResolution = deadlock;
- Assert.AreEqual(deadlock, env.DeadlockResolution);
- env.DetectDeadlocks(deadlock);
- env.Close();
- }
-
- [Test]
- public void TestDetectDeadlocks()
- {
- testName = "TestDetectDeadlocks";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open an environment.
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseTxns = true;
- cfg.UseMPool = true;
- cfg.UseLogging = true;
- cfg.UseLocking = true;
- cfg.FreeThreaded = true;
- testDetectDeadlocksEnv = DatabaseEnvironment.Open(
- testHome, cfg);
-
- // Open btree database.
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.AutoCommit = true;
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = testDetectDeadlocksEnv;
- dbConfig.Duplicates = DuplicatesPolicy.NONE;
- dbConfig.FreeThreaded = true;
- testDetectDeadlocksDB = BTreeDatabase.Open(
- testName + ".db", dbConfig);
-
- // Put one record("key", "data") into database.
- testDetectDeadlocksDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("key")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("data")));
-
- // Begin two threads to read and write record.
- Thread thread1 = new Thread(new ThreadStart(ReadAndPutRecordThread));
- Thread thread2 = new Thread(new ThreadStart(ReadAndPutRecordThread));
- signal = new EventWaitHandle(false, EventResetMode.ManualReset);
- thread1.Start();
- thread2.Start();
-
- // Give enough time for threads to read record.
- Thread.Sleep(1000);
-
- /*
- * Let the two threads apply for write lock
- * synchronously.
- */
- signal.Set();
-
- // Confirm that there is deadlock in the environment.
- Thread.Sleep(1000);
- uint deadlockNum = testDetectDeadlocksEnv.DetectDeadlocks(
- DeadlockPolicy.DEFAULT);
- Assert.Less(0, deadlockNum);
-
- thread1.Join();
- thread2.Join();
-
- // Close all.
- testDetectDeadlocksDB.Close(false);
- testDetectDeadlocksEnv.Close();
- }
-
- public void ReadAndPutRecordThread()
- {
- Transaction txn =
- testDetectDeadlocksEnv.BeginTransaction();
- try
- {
- testDetectDeadlocksDB.GetBoth(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("key")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("data")), txn);
- signal.WaitOne();
- testDetectDeadlocksDB.Put(
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("newKey")),
- new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("newData")),
- txn);
- txn.Commit();
- }
- catch (DeadlockException)
- {
- txn.Abort();
- }
- }
-
- [Test]
- public void TestFailCheck()
- {
- testName = "TestFailCheck";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseTxns = true;
- cfg.UseMPool = true;
- cfg.UseLogging = true;
- cfg.UseLocking = true;
- cfg.FreeThreaded = true;
- cfg.ThreadIsAlive = new ThreadIsAliveDelegate(ThrdAlive);
- cfg.SetThreadID = new SetThreadIDDelegate(SetThrdID);
- cfg.ThreadCount = 10;
- testFailCheckEnv = DatabaseEnvironment.Open(testHome, cfg);
-
- Thread thread = new Thread(new ThreadStart(WriteThreadWithoutTxnCommit));
- thread.Start();
- thread.Join();
- testFailCheckEnv.FailCheck();
- testFailCheckEnv.Close();
- }
-
- public void WriteThreadWithoutTxnCommit()
- {
- Transaction txn = testFailCheckEnv.BeginTransaction();
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = testFailCheckEnv;
- BTreeDatabase db = BTreeDatabase.Open("TestFailCheck.db", dbConfig, txn);
- db.Close();
- txn.Commit();
- }
-
- public bool ThrdAlive(DbThreadID info, bool procOnly)
- {
- Process pcs = Process.GetProcessById(info.processID);
- if (pcs.HasExited == true)
- return false;
- else if (procOnly)
- return true;
- ProcessThreadCollection thrds = pcs.Threads;
- foreach (ProcessThread pcsThrd in thrds)
- {
- if (pcsThrd.Id == info.threadID)
- {
- /*
- * We have to use the fully qualified name, ThreadState
- * defaults to System.Threading.ThreadState.
- */
- return (pcsThrd.ThreadState !=
- System.Diagnostics.ThreadState.Terminated);
- }
- }
- // If we can't find the thread, we say it's not alive
- return false;
- }
-
- public DbThreadID SetThrdID()
- {
- DbThreadID threadID;
-
- int pid = Process.GetCurrentProcess().Id;
- uint tid = (uint)AppDomain.GetCurrentThreadId();
- threadID = new DbThreadID(pid, tid);
- return threadID;
- }
-
- [Test]
- public void TestFeedback()
- {
- testName = "TestFeedback";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open the environment.
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.AutoCommit = true;
- cfg.UseLocking = true;
- cfg.UseLogging = true;
- cfg.UseMPool = true;
- cfg.UseTxns = true;
- cfg.Create = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg);
-
- env.Feedback = new EnvironmentFeedbackDelegate(
- EnvRecovery10PercentFeedback);
- env.Feedback(EnvironmentFeedbackEvent.RECOVERY, 10);
-
- env.Close();
- }
-
- public void EnvRecovery10PercentFeedback(
- EnvironmentFeedbackEvent opcode, int percent)
- {
- Assert.AreEqual(opcode, EnvironmentFeedbackEvent.RECOVERY);
- Assert.AreEqual(10, percent);
- }
-
- [Test]
- public void TestMutexSystemStats()
- {
- testName = "TestMutexSystemStats";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseLogging = true;
- cfg.UseLocking = true;
- cfg.UseMPool = true;
- cfg.UseTxns = true;
- cfg.MutexSystemCfg = new MutexConfig();
- cfg.MutexSystemCfg.Alignment = 512;
- cfg.MutexSystemCfg.Increment = 128;
- cfg.MutexSystemCfg.MaxMutexes = 150;
- cfg.MutexSystemCfg.NumTestAndSetSpins = 10;
- DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg);
-
- MutexStats stats = env.MutexSystemStats();
- env.PrintMutexSystemStats(true, true);
- Assert.AreEqual(512, stats.Alignment);
- Assert.AreEqual(stats.Count, stats.Available + stats.InUse);
- Assert.LessOrEqual(stats.InUse, stats.MaxInUse);
- Assert.AreNotEqual(0, stats.RegionSize);
- Assert.AreEqual(0, stats.RegionWait);
- Assert.AreEqual(10, stats.TASSpins);
- ulong regionNoWait = stats.RegionNoWait;
-
- BTreeDatabaseConfig dbCfg = new BTreeDatabaseConfig();
- dbCfg.Creation = CreatePolicy.IF_NEEDED;
- dbCfg.Env = env;
- BTreeDatabase db = BTreeDatabase.Open(testName + ".db", dbCfg);
- for (int i = 0; i < 1000; i++)
- {
- db.Put(new DatabaseEntry(BitConverter.GetBytes(i)),
- new DatabaseEntry(BitConverter.GetBytes(i)));
- stats = env.MutexSystemStats();
- }
- Assert.LessOrEqual(regionNoWait, stats.RegionNoWait);
- regionNoWait = stats.RegionNoWait;
-
- stats = env.MutexSystemStats(true);
- env.PrintMutexSystemStats();
- stats = env.MutexSystemStats();
- Assert.GreaterOrEqual(regionNoWait, stats.RegionNoWait);
-
- db.Close();
- env.Close();
- }
-
- [Test]
- public void TestLogFile()
- {
- testName = "TestLogFile";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open environment and configure logging subsystem.
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- cfg.UseTxns = true;
- cfg.AutoCommit = true;
- cfg.UseLocking = true;
- cfg.UseMPool = true;
- cfg.UseLogging = true;
- cfg.MPoolSystemCfg = new MPoolConfig();
- cfg.MPoolSystemCfg.CacheSize =
- new CacheInfo(0, 1048576, 1);
- cfg.LogSystemCfg = new LogConfig();
- cfg.LogSystemCfg.AutoRemove = false;
- cfg.LogSystemCfg.BufferSize = 10240;
- cfg.LogSystemCfg.Dir = "./";
- cfg.LogSystemCfg.FileMode = 755;
- cfg.LogSystemCfg.ForceSync = true;
- cfg.LogSystemCfg.InMemory = false;
- cfg.LogSystemCfg.MaxFileSize = 1048576;
- cfg.LogSystemCfg.NoBuffer = false;
- cfg.LogSystemCfg.RegionSize = 204800;
- cfg.LogSystemCfg.ZeroOnCreate = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg);
-
- // Open database.
- Transaction allTxn = env.BeginTransaction();
- TransactionConfig txnConfig = new TransactionConfig();
- txnConfig.Name = "OpenTransaction";
- Transaction openTxn = env.BeginTransaction(txnConfig, allTxn);
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase db = BTreeDatabase.Open(
- testName + ".db", dbConfig, openTxn);
-
- List<ActiveTransaction> activeTxns =
- env.TransactionSystemStats().Transactions;
- for (int i = 0; i < activeTxns.Count; i++)
- if (activeTxns[i].Name == "OpenTransaction")
- {
- LSN lsn = new LSN(
- activeTxns[i].Begun.LogFileNumber,
- activeTxns[i].Begun.Offset);
- env.LogFlush(lsn);
- string fileName = env.LogFile(lsn);
- }
-
- openTxn.Commit();
-
- // Write "##" to log before putting data into database.
- env.WriteToLog("##");
-
- // Write 1000 records into database.
- TransactionConfig writeTxnConfig = new TransactionConfig();
- writeTxnConfig.Name = "WriteTxn";
- Transaction writeTxn = env.BeginTransaction(writeTxnConfig);
- byte[] byteArr = new byte[1024];
- for (int i = 0; i < 1000; i++)
- {
- db.Put(new DatabaseEntry(BitConverter.GetBytes(i)),
- new DatabaseEntry(byteArr), writeTxn);
- env.LogFlush();
- env.WriteToLog("#" + i.ToString(), writeTxn);
- }
-
- activeTxns = env.TransactionSystemStats().Transactions;
- for (int i = 0; i < activeTxns.Count; i++)
- if (activeTxns[i].Name == "WriteTxn")
- {
- LSN lsn = new LSN(
- activeTxns[i].Begun.LogFileNumber,
- activeTxns[i].Begun.Offset);
- env.LogFlush(lsn);
- string fileName = env.LogFile(lsn);
- }
-
-
- writeTxn.Commit();
- db.Close();
-
- // Write "##" after data has been put.
- env.WriteToLog("##");
-
- List<string> logFiles = env.LogFiles(true);
-
- env.LogWrite(new DatabaseEntry(), true);
-
- env.RemoveUnusedLogFiles();
-
- allTxn.Commit();
- env.Close();
- }
-
- [Test]
- public void TestOpen()
- {
- testName = "TestOpen";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig cfg =
- new DatabaseEnvironmentConfig();
- cfg.Create = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg);
-
- // Confirm that the environment is initialized.
- Assert.IsNotNull(env);
-
- // Confirm the environment home directory.
- Assert.AreEqual(testHome, env.Home);
-
- // Print statistics of the current environment.
- env.PrintStats();
-
- // Print statistics of all subsytems.
- env.PrintSubsystemStats();
-
- env.Close();
- }
-
- [Test]
- public void TestMPoolSystemStats()
- {
- testName = "TestMPoolSystemStats";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.AutoCommit = true;
- envConfig.MPoolSystemCfg = new MPoolConfig();
- envConfig.MPoolSystemCfg.CacheSize =
- new CacheInfo(0, 1048576, 3);
- envConfig.Create = true;
- envConfig.UseLocking = true;
- envConfig.UseLogging = true;
- envConfig.UseMPool = true;
- envConfig.UseTxns = true;
- envConfig.UseLogging = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConfig);
-
- MPoolStats stats = env.MPoolSystemStats();
- env.PrintMPoolSystemStats();
-
- Assert.AreEqual(0, stats.BlockedOperations);
- Assert.AreEqual(0, stats.BucketsCheckedDuringAlloc);
- Assert.AreEqual(3, stats.CacheRegions);
- Assert.LessOrEqual(1048576, stats.CacheSettings.Bytes);
- Assert.AreEqual(0, stats.CacheSettings.Gigabytes);
- Assert.AreEqual(3, stats.CacheSettings.NCaches);
- Assert.AreEqual(0, stats.CleanPages);
- Assert.AreEqual(0, stats.CleanPagesEvicted);
- Assert.AreEqual(0, stats.DirtyPages);
- Assert.AreEqual(0, stats.DirtyPagesEvicted);
- Assert.IsNotNull(stats.Files);
- Assert.AreEqual(0, stats.FrozenBuffers);
- Assert.AreEqual(0, stats.FrozenBuffersFreed);
- Assert.LessOrEqual(37, stats.HashBuckets);
- Assert.LessOrEqual(0, stats.HashChainSearches);
- Assert.AreEqual(0, stats.HashEntriesSearched);
- Assert.AreEqual(0, stats.HashLockNoWait);
- Assert.AreEqual(0, stats.HashLockWait);
- Assert.AreEqual(0, stats.LongestHashChainSearch);
- Assert.AreEqual(0, stats.MappedPages);
- Assert.AreEqual(0, stats.MaxBucketsCheckedDuringAlloc);
- Assert.AreEqual(0, stats.MaxBufferWrites);
- Assert.AreEqual(0, stats.MaxBufferWritesSleep);
- Assert.AreEqual(0, stats.MaxHashLockNoWait);
- Assert.AreEqual(0, stats.MaxHashLockWait);
- Assert.AreEqual(0, stats.MaxMMapSize);
- Assert.AreEqual(0, stats.MaxOpenFileDescriptors);
- Assert.AreEqual(0, stats.MaxPagesCheckedDuringAlloc);
- Assert.AreEqual(0, stats.PageAllocations);
- Assert.AreEqual(0, stats.Pages);
- Assert.AreEqual(0, stats.PagesCheckedDuringAlloc);
- Assert.LessOrEqual(0, stats.PagesCreatedInCache);
- Assert.AreEqual(0, stats.PagesInCache);
- Assert.AreEqual(0, stats.PagesNotInCache);
- Assert.AreEqual(0, stats.PagesRead);
- Assert.AreEqual(0, stats.PagesTrickled);
- Assert.AreEqual(0, stats.PagesWritten);
- Assert.AreNotEqual(0, stats.RegionLockNoWait);
- Assert.AreEqual(0, stats.RegionLockWait);
- Assert.LessOrEqual(0, stats.RegionSize);
- Assert.AreEqual(0, stats.ThawedBuffers);
-
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- dbConfig.PageSize = 4096;
- BTreeDatabase db = BTreeDatabase.Open(
- testName + ".db", dbConfig);
-
- byte[] largeByte = new byte[1088576];
- for (int i = 0; i < 10; i++)
- db.Put(new DatabaseEntry(BitConverter.GetBytes(i)),
- new DatabaseEntry(largeByte));
- db.Put(new DatabaseEntry(largeByte), new DatabaseEntry(largeByte));
-
- db.Close();
-
- // Clean the stats after printing.
- stats = env.MPoolSystemStats(true);
- env.PrintMPoolSystemStats(true, true);
- stats = env.MPoolSystemStats();
- env.PrintMPoolSystemStats(true, true, true);
-
- env.Close();
- }
-
- [Test]
- public void TestRemove()
- {
- testName = "TestRemove";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open new environment.
- DatabaseEnvironmentConfig envConig =
- new DatabaseEnvironmentConfig();
- envConig.Create = true;
- envConig.ErrorPrefix = testFixtureName + ":" + testName;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConig);
- env.Close();
-
- // Remove the existing environment.
- DatabaseEnvironment.Remove(testHome);
-
- // Confirm that the __db.001 is removed.
- Assert.IsFalse(File.Exists(testHome + "__db.001"));
- }
-
- [Test]
- public void TestRemoveCorruptedEnv()
- {
- testName = "TestRemoveCorruptedEnv";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- // Open new environment.
- DatabaseEnvironmentConfig envConig =
- new DatabaseEnvironmentConfig();
- envConig.Create = true;
- envConig.ErrorPrefix = testFixtureName + ":" + testName;
- DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, envConig);
-
- // Panic the environment.
- env.Panic();
-
- // Remove the corrupted environment.
- DatabaseEnvironment.Remove(testHome, true);
-
- // Confirm that the __db.001 is removed.
- Assert.IsFalse(File.Exists(testHome + "__db.001"));
- }
-
- [Test, ExpectedException(typeof(ExpectedTestException))]
- public void TestRenameDB()
- {
- testName = "TestRenameDB";
- testHome = testFixtureHome + "/" + testName;
-
- RenameDB(testHome, testName, false);
- }
-
- [Test, ExpectedException(typeof(ExpectedTestException))]
- public void TestRenameDBWithTxn()
- {
- testName = "TestRenameDBWithTxn";
- testHome = testFixtureHome + "/" + testName;
-
- RenameDB(testHome, testName, true);
- }
-
- public void RenameDB(string home, string name, bool ifTxn)
- {
- string dbFileName = name + ".db";
- string dbName = "db1";
- string dbNewName = "db2";
-
- Configuration.ClearDir(home);
-
- DatabaseEnvironmentConfig envConig =
- new DatabaseEnvironmentConfig();
- envConig.Create = true;
- envConig.UseTxns = true;
- envConig.UseLogging = true;
- envConig.UseMPool = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- home, envConig);
-
- Transaction openTxn = env.BeginTransaction();
- BTreeDatabaseConfig dbConfig =
- new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase db = BTreeDatabase.Open(
- dbFileName, dbName, dbConfig, openTxn);
- db.Close();
- openTxn.Commit();
-
- // Open the database.
- if (ifTxn == false)
- env.RenameDB(dbFileName, dbName, dbNewName, true);
- else
- {
- Transaction renameTxn = env.BeginTransaction();
- env.RenameDB(dbFileName, dbName, dbNewName, false, renameTxn);
- renameTxn.Commit();
- }
-
- // Confirm that the database are renamed.
- Transaction reopenTxn = env.BeginTransaction();
- try
- {
- Database db1 = Database.Open(
- dbFileName, new DatabaseConfig());
- db1.Close();
- }
- catch (DatabaseException)
- {
- throw new ExpectedTestException();
- }
- finally
- {
- reopenTxn.Commit();
- env.Close();
- }
- }
-
- [Test]
- public void TestResetFileID()
- {
- testName = "TestResetFileID";
- testHome = testFixtureHome + "/" + testName;
- string dbFileName = testName + ".db";
- string dbNewFileName = testName + "_new.db";
-
- Configuration.ClearDir(testHome);
-
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.Create = true;
- envConfig.UseMPool = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConfig);
-
- // Opening a new database.
- BTreeDatabaseConfig dbConfig =
- new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase db = BTreeDatabase.Open(
- dbFileName, dbConfig);
- db.Close();
-
- // Copy the physical database file.
- File.Copy(testHome + "/" + dbFileName,
- testHome + "/" + dbNewFileName);
-
- // Reset the file ID.
- env.ResetFileID(dbNewFileName, false);
-
- // Open the exisiting database in copied database file.
- BTreeDatabaseConfig cfg = new BTreeDatabaseConfig();
- cfg.Creation = CreatePolicy.NEVER;
- cfg.Env = env;
- BTreeDatabase newDB = BTreeDatabase.Open(
- dbNewFileName, cfg);
- newDB.Close();
- env.Close();
- }
-
- [Test, ExpectedException(typeof(ExpectedTestException))]
- public void TestRemoveDB()
- {
- testName = "TestRemoveDB";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- RmDBWithoutTxn(testHome, testName, false);
- }
-
- [Test, ExpectedException(typeof(ExpectedTestException))]
- public void TestRemoveDBWithAutoCommit()
- {
- testName = "TestRemoveDBWithAutoCommit";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- RmDBWithoutTxn(testHome, testName, true);
- }
-
- [Test, ExpectedException(typeof(ExpectedTestException))]
- public void TestRemoveDBWithinTxn()
- {
- testName = "TestRemoveDBWithinTxn";
- testHome = testFixtureHome + "/" + testName;
- string dbFileName = testName + ".db";
- string dbName1 = testName + "1";
- string dbName2 = testName + "2";
-
- Configuration.ClearDir(testHome);
-
- // Open environment.
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.Create = true;
- envConfig.UseMPool = true;
- envConfig.UseTxns = true;
- envConfig.UseLogging = true;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConfig);
- Transaction txn = env.BeginTransaction();
-
- // Create two databases in the environment.
- BTreeDatabaseConfig dbConfig =
- new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase btreeDB1 = BTreeDatabase.Open(
- dbFileName, dbName1, dbConfig, txn);
- btreeDB1.Close();
- BTreeDatabase btreeDB2 = BTreeDatabase.Open(
- dbFileName, dbName2, dbConfig, txn);
- btreeDB2.Close();
-
- // Remove one database from the environment.
- env.RemoveDB(dbFileName, dbName2, false, txn);
-
- // Try to open the existing database.
- DatabaseConfig cfg = new DatabaseConfig();
- cfg.Env = env;
- Database db1 = Database.Open(dbFileName, dbName1, cfg, txn);
- db1.Close();
-
- /*
- * Attempting to open the removed database should
- * cause error.
- */
- try
- {
- Database db2 = Database.Open(
- dbFileName, dbName2, cfg, txn);
- db2.Close();
- }
- catch (DatabaseException)
- {
- throw new ExpectedTestException();
- }
- finally
- {
- txn.Commit();
- env.Close();
- }
- }
-
- public void RmDBWithoutTxn(string home, string dbName,
- bool ifAutoCommit)
- {
- string dbFileName = dbName + ".db";
- string dbName1 = dbName + "1";
- string dbName2 = dbName + "2";
-
- // Open environment.
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.Create = true;
- envConfig.UseMPool = true;
- if (ifAutoCommit == true)
- {
- envConfig.AutoCommit = true;
- envConfig.UseTxns = true;
- }
-
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- home, envConfig);
-
- // Create two databases in the environment.
- BTreeDatabaseConfig dbConfig =
- new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- BTreeDatabase btreeDB1 = BTreeDatabase.Open(
- dbFileName, dbName1, dbConfig);
- btreeDB1.Close();
- BTreeDatabase btreeDB2 = BTreeDatabase.Open(
- dbFileName, dbName2, dbConfig);
- btreeDB2.Close();
-
- // Remove one database from the environment.
- env.RemoveDB(dbFileName, dbName2, false);
-
- // Try to open the existing database.
- DatabaseConfig cfg = new DatabaseConfig();
- cfg.Env = env;
- Database db1 = Database.Open(dbFileName, dbName1, cfg);
- db1.Close();
-
- /*
- * Attempting to open the removed database should
- * cause error.
- */
- try
- {
- Database db2 = Database.Open(
- dbFileName, dbName2, cfg);
- db2.Close();
- }
- catch (DatabaseException)
- {
- throw new ExpectedTestException();
- }
- finally
- {
- env.Close();
- }
- }
-
-
- [Test]
- public void TestTransactionSystemStats()
- {
- testName = "TestTransactionSystemStats";
- testHome = testFixtureHome + "/" + testName;
-
- Configuration.ClearDir(testHome);
-
- TransactionStats stats;
- BTreeDatabase db;
- Transaction openTxn = null;
-
- // Open an environment.
- long dateTime;
- DatabaseEnvironmentConfig envConfig =
- new DatabaseEnvironmentConfig();
- envConfig.Create = true;
- envConfig.MaxTransactions = 50;
- envConfig.UseLogging = true;
- envConfig.UseMPool = true;
- envConfig.UseTxns = true;
- envConfig.TxnNoSync = false;
- envConfig.TxnNoWait = true;
- envConfig.TxnSnapshot = true;
- envConfig.TxnTimestamp = DateTime.Now;
- envConfig.TxnWriteNoSync = false;
- DatabaseEnvironment env = DatabaseEnvironment.Open(
- testHome, envConfig);
-
- try
- {
- try
- {
- // Confirm initial transaction subsystem statistics.
- stats = env.TransactionSystemStats();
- env.PrintTransactionSystemStats(true, true);
- Assert.AreEqual(0, stats.Aborted);
- Assert.AreEqual(0, stats.Active);
- Assert.AreEqual(0, stats.Begun);
- Assert.AreEqual(0, stats.Committed);
- Assert.AreEqual(0, stats.LastCheckpoint.LogFileNumber);
- Assert.AreEqual(0, stats.LastCheckpoint.Offset);
- Assert.AreEqual(50, stats.MaxTransactions);
- Assert.AreNotEqual(0, stats.RegionSize);
- Assert.AreEqual(0, stats.Transactions.Count);
- }
- catch (AssertionException e)
- {
- throw e;
- }
-
- try
- {
- //Begin a transaction called openTxn and open a database.
- TransactionConfig openTxnCfg = new TransactionConfig();
- openTxnCfg.Name = "openTxn";
- openTxn = env.BeginTransaction(openTxnCfg);
- BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig();
- dbConfig.Creation = CreatePolicy.IF_NEEDED;
- dbConfig.Env = env;
- db = BTreeDatabase.Open(testName + ".db", dbConfig, openTxn);
- }
- catch (DatabaseException e)
- {
- if (openTxn != null)
- openTxn.Abort();
- throw e;
- }
-
- try
- {
- // At least there is one transaction that is alive.
- env.Checkpoint();
- stats = env.TransactionSystemStats();
- env.PrintTransactionSystemStats();
- Assert.AreNotEqual(0, stats.Active);
- Assert.AreNotEqual(0, stats.Transactions.Count);
- Assert.AreNotEqual(0, stats.Transactions.Capacity);
- Assert.AreNotEqual(0, stats.RegionLockNoWait);
- dateTime = stats.LastCheckpointTime;
-
- // Begin an embedded transaction called putTxn.
- TransactionConfig putTxnCfg =
- new TransactionConfig();
- putTxnCfg.Name = "putTxn";
- putTxnCfg.NoWait = false;
- Transaction putTxn = env.BeginTransaction(
- putTxnCfg, openTxn);
-
- try
- {
- // Put some records into database within putTxn.
- for (int i = 0; i < 50; i++)
- db.Put(new DatabaseEntry(BitConverter.GetBytes(i)),
- new DatabaseEntry(BitConverter.GetBytes(i)), putTxn);
- stats = env.TransactionSystemStats();
- Assert.AreNotEqual(0, stats.MaxActive);
- Assert.AreNotEqual(0, stats.MaxTransactions);
- Assert.AreEqual(0, stats.MaxSnapshot);
- Assert.AreEqual(0, stats.Snapshot);
- Assert.AreEqual(stats.Begun,
- stats.Aborted + stats.Active + stats.Committed);
- Assert.AreEqual(2, stats.Transactions.Count);
-
- /*
- * Both of LogFileNumber and Offset in active transaction
- * couldn't be 0.
- */
- uint logFileNumbers = 0;
- uint offSets = 0;
- for (int i = 0; i < stats.Transactions.Count;i++)
- {
- logFileNumbers += stats.Transactions[i].Begun.LogFileNumber;
- offSets += stats.Transactions[i].Begun.Offset;
- }
- Assert.AreNotEqual(0, logFileNumbers);
- Assert.AreNotEqual(0, offSets);
-
- // All active transactions are run by the same process and thread.
-
- Assert.AreEqual(stats.Transactions[0].ThreadID,
- stats.Transactions[1].ThreadID);
- Assert.AreEqual(stats.Transactions[0].ProcessID,
- stats.Transactions[1].ProcessID);
-
- // All transactions are alive.
- Assert.AreEqual(ActiveTransaction.TransactionStatus.RUNNING,
- stats.Transactions[0].Status);
- Assert.AreEqual(ActiveTransaction.TransactionStatus.RUNNING,
- stats.Transactions[1].Status);
-
- /*
- * Find the openTxn in active transactions, which is the
- * parent transaction of putTxn.
- */
- int parentPos = 0;
- if (stats.Transactions[0].Name == "putTxn")
- parentPos = 1;
-
- // putTxn's parent id should be the openTxn.
- Assert.AreEqual(stats.Transactions[parentPos].ID,
- stats.Transactions[1 - parentPos].ParentID);
-
- // Other stats should be an positive integer.
- for (int i = 0; i < stats.Transactions.Count - 1; i++)
- {
- Assert.LessOrEqual(0,
- stats.Transactions[i].BufferCopiesInCache);
- Assert.LessOrEqual(0,
- stats.Transactions[i].SnapshotReads.LogFileNumber);
- Assert.LessOrEqual(0,
- stats.Transactions[i].SnapshotReads.Offset);
- Assert.IsNotNull(stats.Transactions[i].GlobalID);
- }
-
- // Commit putTxn.
- putTxn.Commit();
- }
- catch (DatabaseException e)
- {
- putTxn.Abort();
- throw e;
- }
-
- stats = env.TransactionSystemStats();
- Assert.AreNotEqual(0, stats.LastCheckpoint.LogFileNumber);
- Assert.AreNotEqual(0, stats.LastCheckpoint.Offset);
- Assert.AreEqual(dateTime, stats.LastCheckpointTime);
-
- openTxn.Commit();
- }
- catch (DatabaseException e)
- {
- openTxn.Abort();
- throw e;
- }
- finally
- {
- db.Close();
- }
- }
- finally
- {
- env.Close();
- }
- }
-
- /*
- * Configure an environment. Here only configure those that could be
- * set before environment open.
- */
- public void Config(XmlElement xmlElem,
- ref DatabaseEnvironmentConfig envConfig, bool compulsory,
- bool logging, bool locking, bool mutex, bool mpool, bool replication)
- {
- XmlNode childNode;
-
- // Configure environment without any subsystems.
- DatabaseEnvironmentConfigTest.Config(xmlElem, ref envConfig, compulsory);
-
- // Configure environment with logging subsystem.
- if (logging == true)
- {
- childNode = XMLReader.GetNode(xmlElem, "LogConfig");
- envConfig.LogSystemCfg = new LogConfig();
- LogConfigTest.Config((XmlElement)childNode,
- ref envConfig.LogSystemCfg, compulsory);
- }
-
- // Configure environment with locking subsystem.
- if (locking == true)
- {
- childNode = XMLReader.GetNode(xmlElem, "LockingConfig");
- envConfig.LockSystemCfg = new LockingConfig();
- LockingConfigTest.Config((XmlElement)childNode,
- ref envConfig.LockSystemCfg, compulsory);
- }
-
- // Configure environment with mutex subsystem.
- if (mutex == true)
- {
- childNode = XMLReader.GetNode(xmlElem, "MutexConfig");
- envConfig.MutexSystemCfg = new MutexConfig();
- MutexConfigTest.Config((XmlElement)childNode,
- ref envConfig.MutexSystemCfg, compulsory);
- }
-
- if (mpool == true)
- {
- childNode = XMLReader.GetNode(xmlElem, "MPoolConfig");
- envConfig.MPoolSystemCfg = new MPoolConfig();
- MPoolConfigTest.Config((XmlElement)childNode,
- ref envConfig.MPoolSystemCfg, compulsory);
- }
-
- // Configure environment with replication.
- if (replication == true)
- {
- childNode = XMLReader.GetNode(xmlElem, "ReplicationConfig");
- envConfig.RepSystemCfg = new ReplicationConfig();
- ReplicationConfigTest.Config((XmlElement)childNode,
- ref envConfig.RepSystemCfg, compulsory);
- }
- }
-
- /*
- * Confirm the fields/properties in the environment.
- * Those set by setting functions are not checked here.
- */
- public static void Confirm(XmlElement xmlElement,
- DatabaseEnvironment env, bool compulsory,
- bool logging, bool locking, bool mutex, bool mpool,
- bool replication)
- {
- XmlElement childElem;
- CacheInfo cacheInfo = new CacheInfo(0, 0, 0);
-
- // Confirm environment configuration.
- Configuration.ConfirmBool(xmlElement, "AutoCommit",
- env.AutoCommit, compulsory);
- Configuration.ConfirmBool(xmlElement, "CDB_ALLDB",
- env.CDB_ALLDB, compulsory);
- Configuration.ConfirmBool(xmlElement, "Create",
- env.Create, compulsory);
- Configuration.ConfirmStringList(xmlElement, "DataDirs",
- env.DataDirs, compulsory);
- Configuration.ConfirmString(xmlElement, "ErrorPrefix",
- env.ErrorPrefix, compulsory);
- Configuration.ConfirmBool(xmlElement, "ForceFlush",
- env.ForceFlush, compulsory);
- Configuration.ConfirmBool(xmlElement, "FreeThreaded",
- env.FreeThreaded, compulsory);
- Configuration.ConfirmBool(xmlElement, "InitRegions",
- env.InitRegions, compulsory);
- Configuration.ConfirmString(xmlElement, "IntermediateDirMode",
- env.IntermediateDirMode, compulsory);
- Configuration.ConfirmBool(xmlElement, "Lockdown",
- env.Lockdown, compulsory);
- Configuration.ConfirmUint(xmlElement, "LockTimeout",
- env.LockTimeout, compulsory);
- Configuration.ConfirmUint(xmlElement, "MaxTransactions",
- env.MaxTransactions, compulsory);
- Configuration.ConfirmBool(xmlElement, "NoBuffer",
- env.NoBuffer, compulsory);
- Configuration.ConfirmBool(xmlElement, "NoLocking",
- env.NoLocking, compulsory);
- Configuration.ConfirmBool(xmlElement, "NoMMap",
- env.NoMMap, compulsory);
- Configuration.ConfirmBool(xmlElement, "NoPanic",
- env.NoPanic, compulsory);
- Configuration.ConfirmBool(xmlElement, "Overwrite",
- env.Overwrite, compulsory);
- Configuration.ConfirmBool(xmlElement, "Private",
- env.Private, compulsory);
- Configuration.ConfirmBool(xmlElement, "Register",
- env.Register, compulsory);
- Configuration.ConfirmBool(xmlElement, "RunFatalRecovery",
- env.RunFatalRecovery, compulsory);
- Configuration.ConfirmBool(xmlElement, "RunRecovery",
- env.RunRecovery, compulsory);
- Configuration.ConfirmBool(xmlElement, "SystemMemory",
- env.SystemMemory, compulsory);
- Configuration.ConfirmString(xmlElement, "TempDir",
- env.TempDir, compulsory);
- Configuration.ConfirmBool(xmlElement, "TimeNotGranted",
- env.TimeNotGranted, compulsory);
- Configuration.ConfirmBool(xmlElement, "TxnNoSync",
- env.TxnNoSync, compulsory);
- Configuration.ConfirmBool(xmlElement, "TxnNoWait",
- env.TxnNoWait, compulsory);
- Configuration.ConfirmBool(xmlElement, "TxnSnapshot",
- env.TxnSnapshot, compulsory);
- Configuration.ConfirmDateTime(xmlElement, "TxnTimestamp",
- env.TxnTimestamp, compulsory);
- Configuration.ConfirmBool(xmlElement, "TxnWriteNoSync",
- env.TxnWriteNoSync, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseMVCC",
- env.UseMVCC, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseCDB",
- env.UsingCDB, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseLocking",
- env.UsingLocking, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseLogging",
- env.UsingLogging, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseMPool",
- env.UsingMPool, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseReplication",
- env.UsingReplication, compulsory);
- Configuration.ConfirmBool(xmlElement, "UseTxns",
- env.UsingTxns, compulsory);
- env.Verbosity = new VerboseMessages();
- Configuration.ConfirmVerboseMessages(xmlElement,
- "Verbosity", env.Verbosity, compulsory);
- Configuration.ConfirmBool(xmlElement, "YieldCPU",
- env.YieldCPU, compulsory);
-
- /*
- * If the locking subsystem is set, check the
- * field/properties set in LockingConfig.
- */
- if (locking == true)
- {
- childElem = (XmlElement)XMLReader.GetNode(
- xmlElement, "LockingConfig");
- Configuration.ConfirmByteMatrix(childElem,
- "Conflicts", env.LockConflictMatrix,
- compulsory);
- Configuration.ConfirmDeadlockPolicy(
- childElem, "DeadlockResolution",
- env.DeadlockResolution, compulsory);
- Configuration.ConfirmUint(childElem,
- "Partitions", env.LockPartitions,
- compulsory);
- Configuration.ConfirmUint(childElem,
- "MaxLockers", env.MaxLockers, compulsory);
- Configuration.ConfirmUint(childElem,
- "MaxLocks", env.MaxLocks, compulsory);
- Configuration.ConfirmUint(childElem,
- "MaxObjects", env.MaxObjects, compulsory);
- }
-
- /*
- * If the locking subsystem is set, check the
- * field/properties set in LogConfig.
- */
- if (logging == true)
- {
- childElem = (XmlElement)XMLReader.GetNode(
- xmlElement, "LogConfig");
- Configuration.ConfirmBool(childElem,
- "AutoRemove", env.LogAutoRemove,
- compulsory);
- Configuration.ConfirmUint(childElem,
- "BufferSize", env.LogBufferSize,
- compulsory);
- Configuration.ConfirmString(childElem,
- "Dir", env.LogDir, compulsory);
- Configuration.ConfirmInt(childElem,
- "FileMode", env.LogFileMode, compulsory);
- Configuration.ConfirmBool(childElem,
- "ForceSync", env.LogForceSync, compulsory);
- Configuration.ConfirmBool(childElem,
- "InMemory", env.LogInMemory, compulsory);
- Configuration.ConfirmBool(childElem,
- "NoBuffer", env.LogNoBuffer, compulsory);
- Configuration.ConfirmUint(childElem,
- "RegionSize", env.LogRegionSize,
- compulsory);
- Configuration.ConfirmBool(childElem,
- "ZeroOnCreate", env.LogZeroOnCreate,
- compulsory);
- Configuration.ConfirmUint(childElem,
- "MaxFileSize", env.MaxLogFileSize,
- compulsory);
- }
-
- /*
- * If the locking subsystem is set, check the
- * field/properties set in MutexConfig.
- */
- if (mutex == true)
- {
- childElem = (XmlElement)XMLReader.GetNode(
- xmlElement, "MutexConfig");
- Configuration.ConfirmUint(childElem,
- "Alignment", env.MutexAlignment,
- compulsory);
- Configuration.ConfirmUint(childElem,
- "MaxMutexes", env.MaxMutexes, compulsory);
- try
- {
- Configuration.ConfirmUint(childElem,
- "Increment", env.MutexIncrement,
- compulsory);
- }
- catch (AssertionException)
- {
- Assert.AreEqual(0, env.MutexIncrement);
- }
-
- Configuration.ConfirmUint(childElem,
- "NumTestAndSetSpins",
- env.NumTestAndSetSpins, compulsory);
- }
-
- if (mpool == true)
- {
- childElem = (XmlElement)XMLReader.GetNode(
- xmlElement, "MPoolConfig");
- Configuration.ConfirmCacheSize(childElem,
- "CacheSize", env.CacheSize, compulsory);
- if (env.UsingMPool == false)
- Configuration.ConfirmCacheSize(childElem,
- "MaxCacheSize", env.MaxCacheSize, compulsory);
- Configuration.ConfirmInt(childElem,
- "MaxOpenFiles", env.MaxOpenFiles, compulsory);
- Configuration.ConfirmMaxSequentialWrites(childElem,
- "MaxSequentialWrites", env.SequentialWritePause,
- env.MaxSequentialWrites, compulsory);
- Configuration.ConfirmUint(childElem,
- "MMapSize", env.MMapSize, compulsory);
- }
-
- if (replication == true)
- {
- childElem = (XmlElement)XMLReader.GetNode(
- xmlElement, "ReplicationConfig");
- Configuration.ConfirmUint(childElem,
- "AckTimeout", env.RepAckTimeout, compulsory);
- Configuration.ConfirmBool(childElem,
- "BulkTransfer", env.RepBulkTransfer, compulsory);
- Configuration.ConfirmUint(childElem,
- "CheckpointDelay", env.RepCheckpointDelay, compulsory);
- Configuration.ConfirmUint(childElem,
- "ConnectionRetry", env.RepConnectionRetry, compulsory);
- Configuration.ConfirmBool(childElem,
- "DelayClientSync", env.RepDelayClientSync, compulsory);
- Configuration.ConfirmUint(childElem,
- "ElectionRetry", env.RepElectionRetry, compulsory);
- Configuration.ConfirmUint(childElem,
- "ElectionTimeout", env.RepElectionTimeout, compulsory);
- Configuration.ConfirmUint(childElem,
- "FullElectionTimeout", env.RepFullElectionTimeout,compulsory);
- Configuration.ConfirmUint(childElem,
- "HeartbeatMonitor", env.RepHeartbeatMonitor, compulsory);
- Configuration.ConfirmUint(childElem,
- "HeartbeatSend", env.RepHeartbeatSend, compulsory);
- Configuration.ConfirmUint(childElem,
- "LeaseTimeout", env.RepLeaseTimeout, compulsory);
- Configuration.ConfirmBool(childElem,
- "NoAutoInit", env.RepNoAutoInit, compulsory);
- Configuration.ConfirmBool(childElem,
- "NoBlocking", env.RepNoBlocking, compulsory);
- Configuration.ConfirmUint(childElem,
- "NSites", env.RepNSites, compulsory);
- Configuration.ConfirmUint(childElem,
- "Priority", env.RepPriority, compulsory);
- Configuration.ConfirmAckPolicy(childElem,
- "RepMgrAckPolicy", env.RepMgrAckPolicy, compulsory);
- Configuration.ConfirmBool(childElem,
- "Strict2Site", env.RepStrict2Site, compulsory);
- Configuration.ConfirmBool(childElem,
- "UseMasterLeases", env.RepUseMasterLeases, compulsory);
- }
- }
- }
-}