diff options
Diffstat (limited to 'db-4.8.30/test/txn010.tcl')
-rw-r--r-- | db-4.8.30/test/txn010.tcl | 143 |
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 +} |