Import BSDDB 4.7.25 (as of svn r89086)
This commit is contained in:
122
test/log009.tcl
Normal file
122
test/log009.tcl
Normal file
@@ -0,0 +1,122 @@
|
||||
# See the file LICENSE for redistribution information.
|
||||
#
|
||||
# Copyright (c) 2004,2008 Oracle. All rights reserved.
|
||||
#
|
||||
# $Id: log009.tcl,v 12.9 2008/01/08 20:58:53 bostic Exp $
|
||||
#
|
||||
# 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
|
||||
}
|
||||
Reference in New Issue
Block a user