diff options
Diffstat (limited to 'bdb/test/recd014.tcl')
-rw-r--r-- | bdb/test/recd014.tcl | 445 |
1 files changed, 0 insertions, 445 deletions
diff --git a/bdb/test/recd014.tcl b/bdb/test/recd014.tcl deleted file mode 100644 index 6796341dca2..00000000000 --- a/bdb/test/recd014.tcl +++ /dev/null @@ -1,445 +0,0 @@ -# See the file LICENSE for redistribution information. -# -# Copyright (c) 1999-2002 -# Sleepycat Software. All rights reserved. -# -# $Id: recd014.tcl,v 1.19 2002/08/15 19:21:24 sandstro Exp $ -# -# TEST recd014 -# TEST This is a recovery test for create/delete of queue extents. We -# TEST then need to recover and make sure the file is correctly existing -# TEST or not, as the case may be. -proc recd014 { method args} { - global fixed_len - source ./include.tcl - - if { ![is_queueext $method] == 1 } { - puts "Recd014: Skipping for method $method" - return - } - set pgindex [lsearch -exact $args "-pagesize"] - if { $pgindex != -1 } { - puts "Recd014: skipping for specific pagesizes" - return - } - - set orig_fixed_len $fixed_len - # - # We will use 512-byte pages, to be able to control - # when extents get created/removed. - # - set fixed_len 300 - - set opts [convert_args $method $args] - set omethod [convert_method $method] - # - # We want to set -extent 1 instead of what - # convert_args gave us. - # - set exti [lsearch -exact $opts "-extent"] - incr exti - set opts [lreplace $opts $exti $exti 1] - - puts "Recd014: $method extent creation/deletion tests" - - # Create the database and environment. - env_cleanup $testdir - - set testfile recd014.db - set flags "-create -txn -home $testdir" - - puts "\tRecd014.a: creating environment" - set env_cmd "berkdb_env $flags" - - puts "\tRecd014.b: Create test commit" - ext_recover_create $testdir $env_cmd $omethod \ - $opts $testfile commit - puts "\tRecd014.b: Create test abort" - ext_recover_create $testdir $env_cmd $omethod \ - $opts $testfile abort - - puts "\tRecd014.c: Consume test commit" - ext_recover_consume $testdir $env_cmd $omethod \ - $opts $testfile commit - puts "\tRecd014.c: Consume test abort" - ext_recover_consume $testdir $env_cmd $omethod \ - $opts $testfile abort - - set fixed_len $orig_fixed_len - puts "\tRecd014.d: Verify db_printlog can read logfile" - set tmpfile $testdir/printlog.out - set stat [catch {exec $util_path/db_printlog -h $testdir \ - > $tmpfile} ret] - error_check_good db_printlog $stat 0 - fileremove $tmpfile -} - -proc ext_recover_create { dir env_cmd method opts dbfile txncmd } { - global log_log_record_types - global fixed_len - global alphabet - source ./include.tcl - - # Keep track of the log types we've seen - if { $log_log_record_types == 1} { - logtrack_read $dir - } - - env_cleanup $dir - # Open the environment and set the copy/abort locations - set env [eval $env_cmd] - - set init_file $dir/$dbfile.init - set noenvflags "-create $method -mode 0644 -pagesize 512 $opts $dbfile" - set oflags "-env $env $noenvflags" - - set t [$env txn] - error_check_good txn_begin [is_valid_txn $t $env] TRUE - - set ret [catch {eval {berkdb_open} -txn $t $oflags} db] - error_check_good txn_commit [$t commit] 0 - - set t [$env txn] - error_check_good txn_begin [is_valid_txn $t $env] TRUE - - # - # The command to execute to create an extent is a put. - # We are just creating the first one, so our extnum is 0. - # - set extnum 0 - set data [chop_data $method [replicate $alphabet 512]] - puts "\t\tExecuting command" - set putrecno [$db put -txn $t -append $data] - error_check_good db_put $putrecno 1 - - # Sync the db so any changes to the file that are - # in mpool get written to the disk file before the - # diff. - puts "\t\tSyncing" - error_check_good db_sync [$db sync] 0 - - catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res - copy_extent_file $dir $dbfile afterop - - error_check_good txn_$txncmd:$t [$t $txncmd] 0 - # - # If we don't abort, then we expect success. - # If we abort, we expect no file created. - # - set dbq [make_ext_filename $dir $dbfile $extnum] - error_check_good extput:exists1 [file exists $dbq] 1 - set ret [$db get $putrecno] - if {$txncmd == "abort"} { - # - # Operation was aborted. Verify our entry is not there. - # - puts "\t\tCommand executed and aborted." - error_check_good db_get [llength $ret] 0 - } else { - # - # Operation was committed, verify it exists. - # - puts "\t\tCommand executed and committed." - error_check_good db_get [llength $ret] 1 - catch { file copy -force $dir/$dbfile $init_file } res - copy_extent_file $dir $dbfile init - } - set t [$env txn] - error_check_good txn_begin [is_valid_txn $t $env] TRUE - error_check_good db_close [$db close] 0 - error_check_good txn_commit [$t commit] 0 - error_check_good env_close [$env close] 0 - - # - # Run recovery here. Should be a no-op. Verify that - # the file still does/n't exist when we are done. - # - berkdb debug_check - puts -nonewline "\t\tAbout to run recovery (no-op) ... " - flush stdout - - set stat [catch {exec $util_path/db_recover -h $dir -c} result] - if { $stat == 1 } { - error "FAIL: Recovery error: $result." - return - } - puts "complete" - # - # Verify it did not change. - # - error_check_good extput:exists2 [file exists $dbq] 1 - ext_create_check $dir $txncmd $init_file $dbfile $noenvflags $putrecno - - # - # Need a new copy to get the right LSN into the file. - # - catch { file copy -force $dir/$dbfile $init_file } res - copy_extent_file $dir $dbfile init - - # - # Undo. - # Now move the .afterop file to $dbfile. Run recovery again. - # - file copy -force $dir/$dbfile.afterop $dir/$dbfile - move_file_extent $dir $dbfile afterop copy - - berkdb debug_check - puts -nonewline "\t\tAbout to run recovery (afterop) ... " - flush stdout - - set stat [catch {exec $util_path/db_recover -h $dir -c} result] - if { $stat == 1 } { - error "FAIL: Recovery error: $result." - return - } - puts "complete" - ext_create_check $dir $txncmd $init_file $dbfile $noenvflags $putrecno - - # - # To redo, remove the dbfiles. Run recovery again. - # - catch { file rename -force $dir/$dbfile $dir/$dbfile.renamed } res - copy_extent_file $dir $dbfile renamed rename - - berkdb debug_check - puts -nonewline "\t\tAbout to run recovery (init) ... " - flush stdout - - set stat [catch {exec $util_path/db_recover -h $dir -c} result] - # - # !!! - # Even though db_recover exits with status 0, it should print out - # a warning because the file didn't exist. Db_recover writes this - # to stderr. Tcl assumes that ANYTHING written to stderr is an - # error, so even though we exit with 0 status, we still get an - # error back from 'catch'. Look for the warning. - # - if { $stat == 1 && [is_substr $result "warning"] == 0 } { - error "FAIL: Recovery error: $result." - return - } - puts "complete" - - # - # Verify it was redone. However, since we removed the files - # to begin with, recovery with abort will not recreate the - # extent. Recovery with commit will. - # - if {$txncmd == "abort"} { - error_check_good extput:exists3 [file exists $dbq] 0 - } else { - error_check_good extput:exists3 [file exists $dbq] 1 - } -} - -proc ext_create_check { dir txncmd init_file dbfile oflags putrecno } { - if { $txncmd == "commit" } { - # - # Operation was committed. Verify it did not change. - # - error_check_good \ - diff(initial,post-recover2):diff($init_file,$dir/$dbfile) \ - [dbdump_diff "-dar" $init_file $dir $dbfile] 0 - } else { - # - # Operation aborted. The file is there, but make - # sure the item is not. - # - set xdb [eval {berkdb_open} $oflags] - error_check_good db_open [is_valid_db $xdb] TRUE - set ret [$xdb get $putrecno] - error_check_good db_get [llength $ret] 0 - error_check_good db_close [$xdb close] 0 - } -} - -proc ext_recover_consume { dir env_cmd method opts dbfile txncmd} { - global log_log_record_types - global alphabet - source ./include.tcl - - # Keep track of the log types we've seen - if { $log_log_record_types == 1} { - logtrack_read $dir - } - - env_cleanup $dir - # Open the environment and set the copy/abort locations - set env [eval $env_cmd] - - set oflags "-create -auto_commit $method -mode 0644 -pagesize 512 \ - -env $env $opts $dbfile" - - # - # Open our db, add some data, close and copy as our - # init file. - # - set db [eval {berkdb_open} $oflags] - error_check_good db_open [is_valid_db $db] TRUE - - set extnum 0 - set data [chop_data $method [replicate $alphabet 512]] - - set txn [$env txn] - error_check_good txn_begin [is_valid_txn $txn $env] TRUE - set putrecno [$db put -txn $txn -append $data] - error_check_good db_put $putrecno 1 - error_check_good commit [$txn commit] 0 - error_check_good db_close [$db close] 0 - - puts "\t\tExecuting command" - - set init_file $dir/$dbfile.init - catch { file copy -force $dir/$dbfile $init_file } res - copy_extent_file $dir $dbfile init - - # - # If we don't abort, then we expect success. - # If we abort, we expect no file removed until recovery is run. - # - set db [eval {berkdb_open} $oflags] - error_check_good db_open [is_valid_db $db] TRUE - - set t [$env txn] - error_check_good txn_begin [is_valid_txn $t $env] TRUE - - set dbcmd "$db get -txn $t -consume" - set ret [eval $dbcmd] - error_check_good db_sync [$db sync] 0 - - catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res - copy_extent_file $dir $dbfile afterop - - error_check_good txn_$txncmd:$t [$t $txncmd] 0 - error_check_good db_sync [$db sync] 0 - set dbq [make_ext_filename $dir $dbfile $extnum] - if {$txncmd == "abort"} { - # - # Operation was aborted, verify ext did not change. - # - puts "\t\tCommand executed and aborted." - - # - # Check that the file exists. Final state. - # Since we aborted the txn, we should be able - # to get to our original entry. - # - error_check_good postconsume.1 [file exists $dbq] 1 - error_check_good \ - diff(init,postconsume.2):diff($init_file,$dir/$dbfile)\ - [dbdump_diff "-dar" $init_file $dir $dbfile] 0 - } else { - # - # Operation was committed, verify it does - # not exist. - # - puts "\t\tCommand executed and committed." - # - # Check file existence. Consume operations remove - # the extent when we move off, which we should have - # done. - error_check_good consume_exists [file exists $dbq] 0 - } - error_check_good db_close [$db close] 0 - error_check_good env_close [$env close] 0 - - # - # Run recovery here on what we ended up with. Should be a no-op. - # - berkdb debug_check - puts -nonewline "\t\tAbout to run recovery (no-op) ... " - flush stdout - - set stat [catch {exec $util_path/db_recover -h $dir -c} result] - if { $stat == 1 } { - error "FAIL: Recovery error: $result." - return - } - puts "complete" - if { $txncmd == "abort"} { - # - # Operation was aborted, verify it did not change. - # - error_check_good \ - diff(initial,post-recover1):diff($init_file,$dir/$dbfile) \ - [dbdump_diff "-dar" $init_file $dir $dbfile] 0 - } else { - # - # Operation was committed, verify it does - # not exist. Both operations should result - # in no file existing now that we've run recovery. - # - error_check_good after_recover1 [file exists $dbq] 0 - } - - # - # Run recovery here. Re-do the operation. - # Verify that the file doesn't exist - # (if we committed) or change (if we aborted) - # when we are done. - # - catch { file copy -force $dir/$dbfile $init_file } res - copy_extent_file $dir $dbfile init - berkdb debug_check - puts -nonewline "\t\tAbout to run recovery (init) ... " - flush stdout - - set stat [catch {exec $util_path/db_recover -h $dir -c} result] - if { $stat == 1 } { - error "FAIL: Recovery error: $result." - return - } - puts "complete" - if { $txncmd == "abort"} { - # - # Operation was aborted, verify it did not change. - # - error_check_good \ - diff(initial,post-recover1):diff($init_file,$dir/$dbfile) \ - [dbdump_diff "-dar" $init_file $dir $dbfile] 0 - } else { - # - # Operation was committed, verify it does - # not exist. Both operations should result - # in no file existing now that we've run recovery. - # - error_check_good after_recover2 [file exists $dbq] 0 - } - - # - # Now move the .afterop file to $dbfile. Run recovery again. - # - set filecopy [glob $dir/*.afterop] - set afterop [lindex $filecopy 0] - file rename -force $afterop $dir/$dbfile - set afterop [string range $afterop \ - [expr [string last "/" $afterop] + 1] \ - [string last "." $afterop]] - move_file_extent $dir $dbfile afterop rename - - berkdb debug_check - puts -nonewline "\t\tAbout to run recovery (afterop) ... " - flush stdout - - set stat [catch {exec $util_path/db_recover -h $dir -c} result] - if { $stat == 1 } { - error "FAIL: Recovery error: $result." - return - } - puts "complete" - - if { $txncmd == "abort"} { - # - # Operation was aborted, verify it did not change. - # - error_check_good \ - diff(initial,post-recover2):diff($init_file,$dir/$dbfile) \ - [dbdump_diff "-dar" $init_file $dir $dbfile] 0 - } else { - # - # Operation was committed, verify it still does - # not exist. - # - error_check_good after_recover3 [file exists $dbq] 0 - } -} |