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/recd023.tcl |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/recd023.tcl')
-rw-r--r-- | db-4.8.30/test/recd023.tcl | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/db-4.8.30/test/recd023.tcl b/db-4.8.30/test/recd023.tcl new file mode 100644 index 0000000..eb9dacc --- /dev/null +++ b/db-4.8.30/test/recd023.tcl @@ -0,0 +1,91 @@ +# See the file LICENSE for redistribution information. +# +# Copyright (c) 2004-2009 Oracle. All rights reserved. +# +# $Id$ +# +# TEST recd023 +# TEST Test recover of reverse split. +# +proc recd023 { method args } { + source ./include.tcl + env_cleanup $testdir + set tnum "023" + + if { [is_btree $method] != 1 && [is_rbtree $method] != 1 } { + puts "Skipping recd$tnum for method $method" + return + } + + set args [convert_args $method $args] + set omethod [convert_method $method] + + if { [is_partition_callback $args] == 1 } { + set nodump 1 + } else { + set nodump 0 + } + + puts "Recd$tnum ($omethod $args): Recovery of reverse split." + set testfile recd$tnum.db + + puts "\tRecd$tnum.a: Create environment and database." + set flags "-create -txn -home $testdir" + + set env_cmd "berkdb_env $flags" + set env [eval $env_cmd] + error_check_good env [is_valid_env $env] TRUE + + set pagesize 512 + set oflags "$omethod -auto_commit \ + -pagesize $pagesize -create -mode 0644 $args" + set db [eval {berkdb_open} -env $env $oflags $testfile] + error_check_good dbopen [is_valid_db $db] TRUE + + # Write to database -- enough to fill at least 3 levels. + puts "\tRecd$tnum.b: Create a 3 level btree database." + set nentries 1000 + set datastr [repeat x 45] + for { set i 1 } { $i < $nentries } { incr i } { + set key a$i + set ret [$db put $key [chop_data $method $datastr]] + error_check_good put $ret 0 + } + + # Verify we have enough levels. + set levels [stat_field $db stat "Levels"] + error_check_good 3_levels [expr $levels >= 3] 1 + + # Save the original database. + file copy -force $testdir/$testfile $testdir/$testfile.save + + # Delete enough pieces to collapse the tree. + puts "\tRecd$tnum.c: Do deletes to collapse database." + for { set count 2 } { $count < 10 } { incr count } { + error_check_good db_del [$db del a$count] 0 + } + for { set count 15 } { $count < 100 } { incr count } { + error_check_good db_del [$db del a$count] 0 + } + for { set count 150 } { $count < 1000 } { incr count } { + error_check_good db_del [$db del a$count] 0 + } + + error_check_good db_close [$db close] 0 + error_check_good verify_dir\ + [verify_dir $testdir "\tRecd$tnum.d: " 0 0 $nodump] 0 + + # Overwrite the current database with the saved database. + file copy -force $testdir/$testfile.save $testdir/$testfile + error_check_good log_flush [$env log_flush] 0 + error_check_good env_close [$env close] 0 + + # Recover the saved database to roll forward and apply the deletes. + set env [berkdb_env -create -txn -home $testdir -recover] + error_check_good env_open [is_valid_env $env] TRUE + error_check_good log_flush [$env log_flush] 0 + error_check_good env_close [$env close] 0 + + error_check_good verify_dir\ + [verify_dir $testdir "\tRecd$tnum.e: " 0 0 $nodump] 0 +} |