mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Import changeset
This commit is contained in:
123
bdb/test/conscript.tcl
Normal file
123
bdb/test/conscript.tcl
Normal file
@ -0,0 +1,123 @@
|
||||
# See the file LICENSE for redistribution information.
|
||||
#
|
||||
# Copyright (c) 1999, 2000
|
||||
# Sleepycat Software. All rights reserved.
|
||||
#
|
||||
# $Id: conscript.tcl,v 11.12 2000/12/01 04:28:36 ubell Exp $
|
||||
#
|
||||
# Script for DB_CONSUME test (test070.tcl).
|
||||
# Usage: conscript dir file runtype nitems outputfile tnum args
|
||||
# dir: DBHOME directory
|
||||
# file: db file on which to operate
|
||||
# runtype: PRODUCE or CONSUME--which am I?
|
||||
# nitems: number of items to put or get
|
||||
# outputfile: where to log consumer results
|
||||
# tnum: test number
|
||||
|
||||
proc consumescript_produce { db_cmd nitems tnum args } {
|
||||
source ./include.tcl
|
||||
global mydata
|
||||
|
||||
set pid [pid]
|
||||
puts "\tTest0$tnum: Producer $pid starting, producing $nitems items."
|
||||
|
||||
set db [eval $db_cmd]
|
||||
error_check_good db_open:$pid [is_valid_db $db] TRUE
|
||||
|
||||
set oret -1
|
||||
set ret 0
|
||||
for { set ndx 0 } { $ndx < $nitems } { incr ndx } {
|
||||
set oret $ret
|
||||
set ret [$db put -append [chop_data q $mydata]]
|
||||
error_check_good db_put \
|
||||
[expr $ret > 0 ? $oret < $ret : \
|
||||
$oret < 0 ? $oret < $ret : $oret > $ret] 1
|
||||
|
||||
}
|
||||
# XXX: We permit incomplete syncs because they seem to
|
||||
# be unavoidable and not damaging.
|
||||
set ret [catch {$db close} res]
|
||||
error_check_good db_close:$pid [expr ($ret == 0) ||\
|
||||
([is_substr $res DB_INCOMPLETE] == 1)] 1
|
||||
puts "\t\tTest0$tnum: Producer $pid finished."
|
||||
}
|
||||
|
||||
proc consumescript_consume { db_cmd nitems tnum outputfile mode args } {
|
||||
source ./include.tcl
|
||||
global mydata
|
||||
set pid [pid]
|
||||
puts "\tTest0$tnum: Consumer $pid starting, seeking $nitems items."
|
||||
|
||||
set db [eval $db_cmd]
|
||||
error_check_good db_open:$pid [is_valid_db $db] TRUE
|
||||
|
||||
set oid [open $outputfile w]
|
||||
|
||||
for { set ndx 0 } { $ndx < $nitems } { } {
|
||||
set ret [$db get $mode]
|
||||
if { [llength $ret] > 0 } {
|
||||
error_check_good correct_data:$pid \
|
||||
[lindex [lindex $ret 0] 1] [pad_data q $mydata]
|
||||
set rno [lindex [lindex $ret 0] 0]
|
||||
puts $oid $rno
|
||||
incr ndx
|
||||
} else {
|
||||
# No data to consume; wait.
|
||||
}
|
||||
}
|
||||
|
||||
error_check_good output_close:$pid [close $oid] ""
|
||||
# XXX: see above note.
|
||||
set ret [catch {$db close} res]
|
||||
error_check_good db_close:$pid [expr ($ret == 0) ||\
|
||||
([is_substr $res DB_INCOMPLETE] == 1)] 1
|
||||
puts "\t\tTest0$tnum: Consumer $pid finished."
|
||||
}
|
||||
|
||||
source ./include.tcl
|
||||
source $test_path/test.tcl
|
||||
|
||||
# Verify usage
|
||||
if { $argc < 6 } {
|
||||
puts stderr "FAIL:[timestamp] Usage: $usage"
|
||||
exit
|
||||
}
|
||||
|
||||
set usage "conscript.tcl dir file runtype nitems outputfile tnum"
|
||||
|
||||
# Initialize arguments
|
||||
set dir [lindex $argv 0]
|
||||
set file [lindex $argv 1]
|
||||
set runtype [lindex $argv 2]
|
||||
set nitems [lindex $argv 3]
|
||||
set outputfile [lindex $argv 4]
|
||||
set tnum [lindex $argv 5]
|
||||
# args is the string "{ -len 20 -pad 0}", so we need to extract the
|
||||
# " -len 20 -pad 0" part.
|
||||
set args [lindex [lrange $argv 6 end] 0]
|
||||
|
||||
set mydata "consumer data"
|
||||
|
||||
# Open env
|
||||
set dbenv [berkdb env -home $dir ]
|
||||
error_check_good db_env_create [is_valid_env $dbenv] TRUE
|
||||
|
||||
# Figure out db opening command.
|
||||
set db_cmd [concat {berkdb_open -create -mode 0644 -queue -env}\
|
||||
$dbenv $args $file]
|
||||
|
||||
# Invoke consumescript_produce or consumescript_consume based on $runtype
|
||||
if { $runtype == "PRODUCE" } {
|
||||
# Producers have nothing to log; make sure outputfile is null.
|
||||
error_check_good no_producer_outputfile $outputfile ""
|
||||
consumescript_produce $db_cmd $nitems $tnum $args
|
||||
} elseif { $runtype == "CONSUME" } {
|
||||
consumescript_consume $db_cmd $nitems $tnum $outputfile -consume $args
|
||||
} elseif { $runtype == "WAIT" } {
|
||||
consumescript_consume $db_cmd $nitems $tnum $outputfile -consume_wait \
|
||||
$args
|
||||
} else {
|
||||
error_check_good bad_args $runtype "either PRODUCE, CONSUME or WAIT"
|
||||
}
|
||||
error_check_good env_close [$dbenv close] 0
|
||||
exit
|
Reference in New Issue
Block a user