diff options
Diffstat (limited to 'test/sysscript.tcl')
-rw-r--r-- | test/sysscript.tcl | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/test/sysscript.tcl b/test/sysscript.tcl deleted file mode 100644 index 1ef1fcc..0000000 --- a/test/sysscript.tcl +++ /dev/null @@ -1,282 +0,0 @@ -# See the file LICENSE for redistribution information. -# -# Copyright (c) 1996-2009 Oracle. All rights reserved. -# -# $Id$ -# -# System integration test script. -# This script runs a single process that tests the full functionality of -# the system. The database under test contains nfiles files. Each process -# randomly generates a key and some data. Both keys and data are bimodally -# distributed between small keys (1-10 characters) and large keys (the avg -# length is indicated via the command line parameter. -# The process then decides on a replication factor between 1 and nfiles. -# It writes the key and data to that many files and tacks on the file ids -# of the files it writes to the data string. For example, let's say that -# I randomly generate the key dog and data cat. Then I pick a replication -# factor of 3. I pick 3 files from the set of n (say 1, 3, and 5). I then -# rewrite the data as 1:3:5:cat. I begin a transaction, add the key/data -# pair to each file and then commit. Notice that I may generate replication -# of the form 1:3:3:cat in which case I simply add a duplicate to file 3. -# -# Usage: sysscript dir nfiles key_avg data_avg -# -# dir: DB_HOME directory -# nfiles: number of files in the set -# key_avg: average big key size -# data_avg: average big data size - -source ./include.tcl -source $test_path/test.tcl -source $test_path/testutils.tcl - -set mypid [pid] - -set usage "sysscript dir nfiles key_avg data_avg method args" - -# Verify usage -if { $argc < 5 } { - puts stderr "FAIL:[timestamp] Usage: $usage" - exit -} - -puts [concat "Argc: " $argc " Argv: " $argv] - -# Initialize arguments -set dir [lindex $argv 0] -set nfiles [ lindex $argv 1 ] -set key_avg [ lindex $argv 2 ] -set data_avg [ lindex $argv 3 ] -set method [ lindex $argv 4 ] -set args [ lindex $argv 5 ] - -# Initialize seed -global rand_init -berkdb srand $rand_init - -puts "Beginning execution for $mypid" -puts "$dir DB_HOME" -puts "$nfiles files" -puts "$key_avg average key length" -puts "$data_avg average data length" - -flush stdout - -# Create local environment -set dbenv [berkdb_env -txn -home $dir] -set err [catch {error_check_good $mypid:dbenv [is_substr $dbenv env] 1} ret] -if {$err != 0} { - puts $ret - return -} - -# Now open the files -for { set i 0 } { $i < $nfiles } { incr i } { - set file test044.$i.db - set db_set($i) [eval {berkdb open} -auto_commit -env $dbenv $args $method $file ] - set err [catch {error_check_bad $mypid:dbopen $db_set($i) NULL} ret] - if {$err != 0} { - puts $ret - return - } - set err [catch {error_check_bad $mypid:dbopen [is_substr $db_set($i) \ - error] 1} ret] - if {$err != 0} { - puts $ret - return - } -} - -set record_based [is_record_based $method] -while { 1 } { - # Decide if we're going to create a big key or a small key - # We give small keys a 70% chance. - if { [berkdb random_int 1 10] < 8 } { - set k [random_data 5 0 0 $record_based] - } else { - set k [random_data $key_avg 0 0 $record_based] - } - set data [chop_data $method [random_data $data_avg 0 0]] - - set txn [$dbenv txn] - set err [catch {error_check_good $mypid:txn_begin [is_substr $txn \ - $dbenv.txn] 1} ret] - if {$err != 0} { - puts $ret - return - } - - # Open cursors - for { set f 0 } {$f < $nfiles} {incr f} { - set cursors($f) [$db_set($f) cursor -txn $txn] - set err [catch {error_check_good $mypid:cursor_open \ - [is_substr $cursors($f) $db_set($f)] 1} ret] - if {$err != 0} { - puts $ret - return - } - } - set aborted 0 - - # Check to see if key is already in database - set found 0 - for { set i 0 } { $i < $nfiles } { incr i } { - set r [$db_set($i) get -txn $txn $k] - set r [$db_set($i) get -txn $txn $k] - if { $r == "-1" } { - for {set f 0 } {$f < $nfiles} {incr f} { - set err [catch {error_check_good \ - $mypid:cursor_close \ - [$cursors($f) close] 0} ret] - if {$err != 0} { - puts $ret - return - } - } - set err [catch {error_check_good $mypid:txn_abort \ - [$txn abort] 0} ret] - if {$err != 0} { - puts $ret - return - } - set aborted 1 - set found 2 - break - } elseif { $r != "Key $k not found." } { - set found 1 - break - } - } - switch $found { - 2 { - # Transaction aborted, no need to do anything. - } - 0 { - # Key was not found, decide how much to replicate - # and then create a list of that many file IDs. - set repl [berkdb random_int 1 $nfiles] - set fset "" - for { set i 0 } { $i < $repl } {incr i} { - set f [berkdb random_int 0 [expr $nfiles - 1]] - lappend fset $f - set data [chop_data $method $f:$data] - } - - foreach i $fset { - set r [$db_set($i) put -txn $txn $k $data] - if {$r == "-1"} { - for {set f 0 } {$f < $nfiles} {incr f} { - set err [catch {error_check_good \ - $mypid:cursor_close \ - [$cursors($f) close] 0} ret] - if {$err != 0} { - puts $ret - return - } - } - set err [catch {error_check_good \ - $mypid:txn_abort [$txn abort] 0} ret] - if {$err != 0} { - puts $ret - return - } - set aborted 1 - break - } - } - } - 1 { - # Key was found. Make sure that all the data values - # look good. - set f [zero_list $nfiles] - set data $r - while { [set ndx [string first : $r]] != -1 } { - set fnum [string range $r 0 [expr $ndx - 1]] - if { [lindex $f $fnum] == 0 } { - #set flag -set - set full [record $cursors($fnum) get -set $k] - } else { - #set flag -next - set full [record $cursors($fnum) get -next] - } - if {[llength $full] == 0} { - for {set f 0 } {$f < $nfiles} {incr f} { - set err [catch {error_check_good \ - $mypid:cursor_close \ - [$cursors($f) close] 0} ret] - if {$err != 0} { - puts $ret - return - } - } - set err [catch {error_check_good \ - $mypid:txn_abort [$txn abort] 0} ret] - if {$err != 0} { - puts $ret - return - } - set aborted 1 - break - } - set err [catch {error_check_bad \ - $mypid:curs_get($k,$data,$fnum,$flag) \ - [string length $full] 0} ret] - if {$err != 0} { - puts $ret - return - } - set key [lindex [lindex $full 0] 0] - set rec [pad_data $method [lindex [lindex $full 0] 1]] - set err [catch {error_check_good \ - $mypid:dbget_$fnum:key $key $k} ret] - if {$err != 0} { - puts $ret - return - } - set err [catch {error_check_good \ - $mypid:dbget_$fnum:data($k) $rec $data} ret] - if {$err != 0} { - puts $ret - return - } - set f [lreplace $f $fnum $fnum 1] - incr ndx - set r [string range $r $ndx end] - } - } - } - if { $aborted == 0 } { - for {set f 0 } {$f < $nfiles} {incr f} { - set err [catch {error_check_good $mypid:cursor_close \ - [$cursors($f) close] 0} ret] - if {$err != 0} { - puts $ret - return - } - } - set err [catch {error_check_good $mypid:commit [$txn commit] \ - 0} ret] - if {$err != 0} { - puts $ret - return - } - } -} - -# Close files -for { set i 0 } { $i < $nfiles} { incr i } { - set r [$db_set($i) close] - set err [catch {error_check_good $mypid:db_close:$i $r 0} ret] - if {$err != 0} { - puts $ret - return - } -} - -# Close tm and environment -$dbenv close - -puts "[timestamp] [pid] Complete" -flush stdout - -filecheck $file 0 |