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

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1996, 1997, 1998, 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: txn.tcl,v 11.12 2000/12/31 19:26:23 bostic Exp $
  7. #
  8. # Options are:
  9. # -dir <directory in which to store memp>
  10. # -max <max number of concurrent transactions>
  11. # -iterations <iterations>
  12. # -stat
  13. proc txn_usage {} {
  14. puts "txn -dir <directory> -iterations <number of ops> 
  15.     -max <max number of transactions> -stat"
  16. }
  17. proc txntest { args } {
  18. source ./include.tcl
  19. # Set defaults
  20. set iterations 50
  21. set max 1024
  22. set dostat 0
  23. set flags ""
  24. for { set i 0 } { $i < [llength $args] } {incr i} {
  25. switch -regexp -- [lindex $args $i] {
  26. -d.* { incr i; set testdir [lindex $args $i] }
  27. -f.* { incr i; set flags [lindex $args $i] }
  28. -i.* { incr i; set iterations [lindex $args $i] }
  29. -m.* { incr i; set max [lindex $args $i] }
  30. -s.* { set dostat 1 }
  31. default {
  32. puts -nonewline "FAIL:[timestamp] Usage: "
  33. txn_usage
  34. return
  35. }
  36. }
  37. }
  38. if { $max < $iterations } {
  39. set max $iterations
  40. }
  41. # Now run the various functionality tests
  42. txn001 $testdir $max $iterations $flags
  43. txn002 $testdir $max $iterations
  44. }
  45. proc txn001 { dir max ntxns flags} {
  46. source ./include.tcl
  47. puts "Txn001: Basic begin, commit, abort"
  48. # Open environment
  49. env_cleanup $dir
  50. set env [eval {berkdb 
  51.     env -create -mode 0644 -txn -txn_max $max -home $dir} $flags]
  52. error_check_good evn_open [is_valid_env $env] TRUE
  53. txn001_suba $ntxns $env
  54. txn001_subb $ntxns $env
  55. txn001_subc $ntxns $env
  56. # Close and unlink the file
  57. error_check_good env_close:$env [$env close] 0
  58. }
  59. proc txn001_suba { ntxns env } {
  60. source ./include.tcl
  61. # We will create a bunch of transactions and commit them.
  62. set txn_list {}
  63. set tid_list {}
  64. puts "Txn001.a: Beginning/Committing $ntxns Transactions in $env"
  65. for { set i 0 } { $i < $ntxns } { incr i } {
  66. set txn [$env txn]
  67. error_check_good txn_begin [is_valid_txn $txn $env] TRUE
  68. lappend txn_list $txn
  69. set tid [$txn id]
  70. error_check_good tid_check [lsearch $tid_list $tid] -1
  71. lappend tid_list $tid
  72. }
  73. # Now commit them all
  74. foreach t $txn_list {
  75. error_check_good txn_commit:$t [$t commit] 0
  76. }
  77. }
  78. proc txn001_subb { ntxns env } {
  79. # We will create a bunch of transactions and abort them.
  80. set txn_list {}
  81. set tid_list {}
  82. puts "Txn001.b: Beginning/Aborting Transactions"
  83. for { set i 0 } { $i < $ntxns } { incr i } {
  84. set txn [$env txn]
  85. error_check_good txn_begin [is_valid_txn $txn $env] TRUE
  86. lappend txn_list $txn
  87. set tid [$txn id]
  88. error_check_good tid_check [lsearch $tid_list $tid] -1
  89. lappend tid_list $tid
  90. }
  91. # Now abort them all
  92. foreach t $txn_list {
  93. error_check_good txn_abort:$t [$t abort] 0
  94. }
  95. }
  96. proc txn001_subc { ntxns env } {
  97. # We will create a bunch of transactions and commit them.
  98. set txn_list {}
  99. set tid_list {}
  100. puts "Txn001.c: Beginning/Prepare/Committing Transactions"
  101. for { set i 0 } { $i < $ntxns } { incr i } {
  102. set txn [$env txn]
  103. error_check_good txn_begin [is_valid_txn $txn $env] TRUE
  104. lappend txn_list $txn
  105. set tid [$txn id]
  106. error_check_good tid_check [lsearch $tid_list $tid] -1
  107. lappend tid_list $tid
  108. }
  109. # Now prepare them all
  110. foreach t $txn_list {
  111. error_check_good txn_prepare:$t [$t prepare] 0
  112. }
  113. # Now commit them all
  114. foreach t $txn_list {
  115. error_check_good txn_commit:$t [$t commit] 0
  116. }
  117. }
  118. # Verify that read-only transactions do not create any log records
  119. proc txn002 { dir max ntxns } {
  120. source ./include.tcl
  121. puts "Txn002: Read-only transaction test"
  122. env_cleanup $dir
  123. set env [berkdb 
  124.     env -create -mode 0644 -txn -txn_max $max -home $dir]
  125. error_check_good dbenv [is_valid_env $env] TRUE
  126. # We will create a bunch of transactions and commit them.
  127. set txn_list {}
  128. set tid_list {}
  129. puts "Txn002.a: Beginning/Committing Transactions"
  130. for { set i 0 } { $i < $ntxns } { incr i } {
  131. set txn [$env txn]
  132. error_check_good txn_begin [is_valid_txn $txn $env] TRUE
  133. lappend txn_list $txn
  134. set tid [$txn id]
  135. error_check_good tid_check [lsearch $tid_list $tid] -1
  136. lappend tid_list $tid
  137. }
  138. # Now commit them all
  139. foreach t $txn_list {
  140. error_check_good txn_commit:$t [$t commit] 0
  141. }
  142. # Now verify that there aren't any log records.
  143. set r [$env log_get -first]
  144. error_check_good log_get:$r [llength $r] 0
  145. error_check_good env_close:$r [$env close] 0
  146. }