diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
commit | 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch) | |
tree | 18147b92b969d25ffbe61935fb63035cac820dd0 /db-4.8.30/test/log009.tcl |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/log009.tcl')
-rw-r--r-- | db-4.8.30/test/log009.tcl | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/db-4.8.30/test/log009.tcl b/db-4.8.30/test/log009.tcl new file mode 100644 index 0000000..29211db --- /dev/null +++ b/db-4.8.30/test/log009.tcl @@ -0,0 +1,122 @@ +# See the file LICENSE for redistribution information. +# +# Copyright (c) 2004-2009 Oracle. All rights reserved. +# +# $Id$ +# +# TEST log009 +# TEST Test of logging and getting log file version information. +# TEST Each time we cross a log file boundary verify we can +# TEST get the version via the log cursorlag. +# TEST Do this both forward and backward. +# +proc log009 { } { + source ./include.tcl + global errorInfo + + env_cleanup $testdir + set niter 200 + set method btree + + puts "Log009: Retrieve log version using log cursor." + + # Log size is small so we quickly create more than one. + # The documentation says that the log file must be at least + # four times the size of the in-memory log buffer. + set pagesize 4096 + append largs " -pagesize $pagesize " + set log_buf [expr $pagesize * 2] + set log_max [expr $log_buf * 4] + + # Open an env. + set envcmd "berkdb_env_noerr -create \ + -log_buffer $log_buf -log_max $log_max -txn -home $testdir" + set env [eval $envcmd] + error_check_good env [is_valid_env $env] TRUE + + set stop 0 + set start 0 + # + # Loop until we have at least 3 log files. + # + while { $stop == 0 } { + puts "\tLog009.a: Running test in to generate log files." + eval rep_test \ + $method $env NULL $niter $start $start 0 0 $largs + incr start $niter + + set last_log [get_logfile $env last] + if { $last_log >= 3 } { + set stop 1 + } + } + + # We now have at least 3 log files. Walk a cursor both ways + # through the log and make sure we can get the version when we + # cross a log file boundary. + set curfile 0 + set logc [$env log_cursor] + error_check_good logc [is_valid_logc $logc $env] TRUE + + puts "\tLog009.b: Try to get version on unset cursor." + set stat [catch {eval $logc version} ret] + error_check_bad stat $stat 0 + error_check_good err [is_substr $ret "unset cursor"] 1 + + # Check walking forward through logs looking for log + # file boundaries. + # + puts "\tLog009.c: Walk log forward checking persist." + for { set logrec [$logc get -first] } \ + { [llength $logrec] != 0 } \ + { set logrec [$logc get -next] } { + set lsn [lindex $logrec 0] + set lsnfile [lindex $lsn 0] + if { $curfile != $lsnfile } { + log009_check $logc $logrec + set curfile $lsnfile + } + } + error_check_good logclose [$logc close] 0 + + set curfile 0 + set logc [$env log_cursor] + error_check_good logc [is_valid_logc $logc $env] TRUE + # + # Check walking backward through logs looking for log + # file boundaries. + # + puts "\tLog009.d: Walk log backward checking persist." + for { set logrec [$logc get -last] } \ + { [llength $logrec] != 0 } \ + { set logrec [$logc get -prev] } { + set lsn [lindex $logrec 0] + set lsnfile [lindex $lsn 0] + if { $curfile != $lsnfile } { + log009_check $logc $logrec + set curfile $lsnfile + } + } + error_check_good logclose [$logc close] 0 + error_check_good env_close [$env close] 0 +} + +proc log009_check { logc logrec } { + set version [$logc version] + # + # We don't have ready access to the current log + # version, but make sure it is something reasonable. + # + # !!! + # First readable log is 8, current log version + # is pretty far from 20. + # + set reasonable [expr $version > 7 && $version < 20] + error_check_good persist $reasonable 1 + # + # Verify that getting the version doesn't move + # or change the log cursor in any way. + # + set logrec1 [$logc get -current] + error_check_good current $logrec $logrec1 +} |