1# See the file LICENSE for redistribution information. 2# 3# Copyright (c) 1996-2009 Oracle. All rights reserved. 4# 5# $Id$ 6# 7# TEST log002 8# TEST Tests multiple logs 9# TEST Log truncation 10# TEST LSN comparison and file functionality. 11proc log002 { } { 12 global rand_init 13 error_check_good set_random_seed [berkdb srand $rand_init] 0 14 15 foreach inmem { 1 0 } { 16 log002_body $inmem 17 } 18} 19 20proc log002_body { inmem } { 21 source ./include.tcl 22 23 puts "Log002: Multiple log test w/trunc, file, compare functionality" 24 25 env_cleanup $testdir 26 27 set max [expr 1024 * 128] 28 29 set logargs "" 30 if { $inmem == 0 } { 31 puts "Log002: Using on-disk logging." 32 } else { 33 puts "Log002: Using in-memory logging." 34 set lbuf [expr 8 * [expr 1024 * 1024]] 35 set logargs "-log_inmemory -log_buffer $lbuf" 36 } 37 set env [eval {berkdb_env} -create -home $testdir -log \ 38 -mode 0644 $logargs -log_max $max] 39 error_check_good envopen [is_valid_env $env] TRUE 40 41 # We'll record every hundredth record for later use 42 set info_list {} 43 44 puts "\tLog002.a: Writing log records" 45 set i 0 46 for {set s 0} { $s < [expr 3 * $max] } { incr s $len } { 47 set rec [random_data 120 0 0] 48 set len [string length $rec] 49 set lsn [$env log_put $rec] 50 51 if { [expr $i % 100 ] == 0 } { 52 lappend info_list [list $lsn $rec] 53 } 54 incr i 55 } 56 57 puts "\tLog002.b: Checking log_compare" 58 set last {0 0} 59 foreach p $info_list { 60 set l [lindex $p 0] 61 if { [llength $last] != 0 } { 62 error_check_good \ 63 log_compare [$env log_compare $l $last] 1 64 error_check_good \ 65 log_compare [$env log_compare $last $l] -1 66 error_check_good \ 67 log_compare [$env log_compare $l $l] 0 68 } 69 set last $l 70 } 71 72 puts "\tLog002.c: Checking log_file" 73 if { $inmem == 0 } { 74 set flist [glob $testdir/log*] 75 foreach p $info_list { 76 set lsn [lindex $p 0] 77 set f [$env log_file $lsn] 78 79 # Change backslash separators on Windows to forward 80 # slashes, as the rest of the test suite expects. 81 regsub -all {\\} $f {/} f 82 error_check_bad log_file:$f [lsearch $flist $f] -1 83 } 84 } 85 86 puts "\tLog002.d: Verifying records" 87 88 set logc [$env log_cursor] 89 error_check_good log_cursor [is_valid_logc $logc $env] TRUE 90 91 for {set i [expr [llength $info_list] - 1] } { $i >= 0 } { incr i -1} { 92 set p [lindex $info_list $i] 93 set grec [$logc get -set [lindex $p 0]] 94 error_check_good log_get:$env [lindex $grec 1] [lindex $p 1] 95 } 96 97 # Close and unlink the file 98 error_check_good log_cursor:close:$logc [$logc close] 0 99 error_check_good env:close [$env close] 0 100 error_check_good envremove [berkdb envremove -home $testdir] 0 101} 102