conscript.tcl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: conscript.tcl,v 11.12 2000/12/01 04:28:36 ubell Exp $
  7. #
  8. # Script for DB_CONSUME test (test070.tcl).
  9. # Usage: conscript dir file runtype nitems outputfile tnum args
  10. # dir: DBHOME directory
  11. # file: db file on which to operate
  12. # runtype: PRODUCE or CONSUME--which am I?
  13. # nitems: number of items to put or get
  14. # outputfile: where to log consumer results
  15. # tnum: test number
  16. proc consumescript_produce { db_cmd nitems tnum args } {
  17. source ./include.tcl
  18. global mydata
  19. set pid [pid]
  20. puts "tTest0$tnum: Producer $pid starting, producing $nitems items."
  21. set db [eval $db_cmd]
  22. error_check_good db_open:$pid [is_valid_db $db] TRUE
  23. set oret -1
  24. set ret 0
  25. for { set ndx 0 } { $ndx < $nitems } { incr ndx } {
  26. set oret $ret
  27. set ret [$db put -append [chop_data q $mydata]]
  28. error_check_good db_put 
  29.     [expr $ret > 0 ? $oret < $ret : 
  30.     $oret < 0 ? $oret < $ret : $oret > $ret] 1
  31. }
  32. # XXX: We permit incomplete syncs because they seem to
  33. # be unavoidable and not damaging.
  34. set ret [catch {$db close} res]
  35. error_check_good db_close:$pid [expr ($ret == 0) ||
  36. ([is_substr $res DB_INCOMPLETE] == 1)] 1
  37. puts "ttTest0$tnum: Producer $pid finished."
  38. }
  39. proc consumescript_consume { db_cmd nitems tnum outputfile mode args } {
  40. source ./include.tcl
  41. global mydata
  42. set pid [pid]
  43. puts "tTest0$tnum: Consumer $pid starting, seeking $nitems items."
  44. set db [eval $db_cmd]
  45. error_check_good db_open:$pid [is_valid_db $db] TRUE
  46. set oid [open $outputfile w]
  47. for { set ndx 0 } { $ndx < $nitems } { } {
  48. set ret [$db get $mode]
  49. if { [llength $ret] > 0 } {
  50. error_check_good correct_data:$pid 
  51. [lindex [lindex $ret 0] 1] [pad_data q $mydata]
  52. set rno [lindex [lindex $ret 0] 0]
  53. puts $oid $rno
  54. incr ndx
  55. } else {
  56. # No data to consume;  wait.
  57. }
  58. }
  59. error_check_good output_close:$pid [close $oid] ""
  60. # XXX: see above note.
  61. set ret [catch {$db close} res]
  62. error_check_good db_close:$pid [expr ($ret == 0) ||
  63. ([is_substr $res DB_INCOMPLETE] == 1)] 1
  64. puts "ttTest0$tnum: Consumer $pid finished."
  65. }
  66. source ./include.tcl
  67. source $test_path/test.tcl
  68. # Verify usage
  69. if { $argc < 6 } {
  70. puts stderr "FAIL:[timestamp] Usage: $usage"
  71. exit
  72. }
  73. set usage "conscript.tcl dir file runtype nitems outputfile tnum"
  74. # Initialize arguments
  75. set dir [lindex $argv 0]
  76. set file [lindex $argv 1]
  77. set runtype [lindex $argv 2]
  78. set nitems [lindex $argv 3]
  79. set outputfile [lindex $argv 4]
  80. set tnum [lindex $argv 5]
  81. # args is the string "{ -len 20 -pad 0}", so we need to extract the
  82. # " -len 20 -pad 0" part.
  83. set args [lindex [lrange $argv 6 end] 0]
  84. set mydata "consumer data"
  85. # Open env
  86. set dbenv [berkdb env -home $dir ]
  87. error_check_good db_env_create [is_valid_env $dbenv] TRUE
  88. # Figure out db opening command.
  89. set db_cmd [concat {berkdb_open -create -mode 0644 -queue -env}
  90. $dbenv $args $file]
  91. # Invoke consumescript_produce or consumescript_consume based on $runtype
  92. if { $runtype == "PRODUCE" } {
  93. # Producers have nothing to log;  make sure outputfile is null.
  94. error_check_good no_producer_outputfile $outputfile ""
  95. consumescript_produce $db_cmd $nitems $tnum $args
  96. } elseif { $runtype == "CONSUME" } {
  97. consumescript_consume $db_cmd $nitems $tnum $outputfile -consume $args
  98. } elseif { $runtype == "WAIT" } {
  99. consumescript_consume $db_cmd $nitems $tnum $outputfile -consume_wait 
  100. $args
  101. } else {
  102. error_check_good bad_args $runtype "either PRODUCE, CONSUME or WAIT"
  103. }
  104. error_check_good env_close [$dbenv close] 0
  105. exit