mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-17 01:26:25 +00:00
123 lines
3.3 KiB
Tcl
123 lines
3.3 KiB
Tcl
|
# See the file LICENSE for redistribution information.
|
||
|
#
|
||
|
# Copyright (c) 2004, 2011 Oracle and/or its affiliates. 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
|
||
|
}
|