summaryrefslogtreecommitdiff
path: root/db-4.8.30/test/txn010.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'db-4.8.30/test/txn010.tcl')
-rw-r--r--db-4.8.30/test/txn010.tcl143
1 files changed, 143 insertions, 0 deletions
diff --git a/db-4.8.30/test/txn010.tcl b/db-4.8.30/test/txn010.tcl
new file mode 100644
index 0000000..f9b1d59
--- /dev/null
+++ b/db-4.8.30/test/txn010.tcl
@@ -0,0 +1,143 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996-2009 Oracle. All rights reserved.
+#
+# $Id$
+#
+# TEST txn010
+# TEST Test DB_ENV->txn_checkpoint arguments/flags
+proc txn010 { } {
+ source ./include.tcl
+
+ puts "Txn010: test DB_ENV->txn_checkpoint arguments/flags."
+ env_cleanup $testdir
+
+ # Open an environment and database.
+ puts "\tTxn010.a: open the environment and a database, checkpoint."
+ set env [berkdb_env -create -home $testdir -txn]
+ error_check_good envopen [is_valid_env $env] TRUE
+ set db [berkdb_open \
+ -env $env -create -mode 0644 -btree -auto_commit a.db]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Insert some data and do a checkpoint.
+ for { set count 0 } { $count < 100 } { incr count } {
+ set t [$env txn]
+ error_check_good "init: put" \
+ [$db put -txn $t "key_a_$count" "data"] 0
+ error_check_good "init: commit" [$t commit] 0
+ }
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint] 0
+
+ # Test that checkpoint calls are ignored in quiescent systems.
+ puts "\tTxn010.b: test for checkpoints when system is quiescent"
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 5 } {incr count } {
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "quiescent: checkpoint time changed" \
+ [expr $test_chkpt == $chkpt] 1
+ }
+
+ # Add a single record, and test that checkpoint does something.
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ set t [$env txn]
+ error_check_good \
+ "quiescent: put" [$db put -txn $t "key_b_$count" "data"] 0
+ error_check_good "quiescent: commit" [$t commit] 0
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "quiescent: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+
+ # Test that -force causes a checkpoint.
+ puts "\tTxn010.c: test checkpoint -force"
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 5 } {incr count } {
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -force] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "force: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+ set chkpt $test_chkpt
+ }
+
+ # Test that -kbyte doesn't cause a checkpoint unless there's
+ # enough activity.
+ puts "\tTxn010.d: test checkpoint -kbyte"
+
+ # Put in lots of data, and verify that -kbyte causes a checkpoint
+ for { set count 0 } { $count < 1000 } { incr count } {
+ set t [$env txn]
+ error_check_good "kbyte: put" \
+ [$db put -txn $t "key_c_$count" "data"] 0
+ error_check_good "kbyte: commit" [$t commit] 0
+ }
+
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -kbyte 2] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "kbytes: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+
+ # Put in a little data and verify that -kbyte doesn't cause a
+ # checkpoint
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 20 } { incr count } {
+ set t [$env txn]
+ error_check_good "kbyte: put" \
+ [$db put -txn $t "key_d_$count" "data"] 0
+ error_check_good "kbyte: commit" [$t commit] 0
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -kbyte 20] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "kbytes: checkpoint time changed" \
+ [expr $test_chkpt == $chkpt] 1
+ }
+
+ # Test that -min doesn't cause a checkpoint unless enough time has
+ # passed.
+ puts "\tTxn010.e: test checkpoint -min"
+ set t [$env txn]
+ error_check_good "min: put" [$db put -txn $t "key_e_$count" "data"] 0
+ error_check_good "min: commit" [$t commit] 0
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 5 } {incr count } {
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -min 2] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "min: checkpoint time changed" \
+ [expr $test_chkpt == $chkpt] 1
+ }
+
+ # Wait long enough, and then check to see if -min causes a checkpoint.
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ tclsleep 120
+ error_check_good checkpoint [$env txn_checkpoint -min 2] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "min: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+
+ # Close down the database and the environment.
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+}
+
+# txn010_stat --
+# Return the current log statistics.
+proc txn010_stat { env s } {
+ set stat [$env txn_stat]
+ foreach statpair $stat {
+ set statmsg [lindex $statpair 0]
+ set statval [lindex $statpair 1]
+ if {[is_substr $statmsg $s] != 0} {
+ return $statval
+ }
+ }
+ puts "FAIL: Txn010: stat string $s not found"
+ return 0
+}