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

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: recd011.tcl,v 11.13 2000/12/06 17:09:54 sue Exp $
  7. #
  8. # Recovery Test 11.
  9. # Test recovery to a specific timestamp.
  10. proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
  11. source ./include.tcl
  12. set args [convert_args $method $args]
  13. set omethod [convert_method $method]
  14. set tnum 11
  15. puts "Recd0$tnum ($args): Test recovery to a specific timestamp."
  16. set testfile recd0$tnum.db
  17. env_cleanup $testdir
  18. set i 0
  19. if { [is_record_based $method] == 1 } {
  20. set key 1
  21. } else {
  22. set key KEY
  23. }
  24. puts "tRecd0$tnum.a: Create environment and database."
  25. set flags "-create -txn -home $testdir"
  26. set env_cmd "berkdb env $flags"
  27. set dbenv [eval $env_cmd]
  28. error_check_good dbenv [is_valid_env $dbenv] TRUE
  29. set oflags "-env $dbenv -create -mode 0644 $args $omethod"
  30. set db [eval {berkdb_open} $oflags $testfile]
  31. error_check_good dbopen [is_valid_db $db] TRUE
  32. # Main loop:  every second or so, increment the db in a txn.
  33. puts "ttInitial Checkpoint"
  34. error_check_good "Initial Checkpoint" [$dbenv txn_checkpoint] 0
  35. puts "tRecd0$tnum.b ($niter iterations):
  36.     Transaction-protected increment loop."
  37. for { set i 0 } { $i <= $niter } { incr i } {
  38. set data $i
  39. # Put, in a txn.
  40. set txn [$dbenv txn]
  41. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  42. error_check_good db_put 
  43.     [$db put -txn $txn $key [chop_data $method $data]] 0
  44. error_check_good txn_commit [$txn commit] 0
  45. set timeof($i) [timestamp -r]
  46. # If an appropriate period has elapsed, checkpoint.
  47. if { $i % $ckpt_freq == $ckpt_freq - 1 } {
  48. puts "ttIteration $i: Checkpointing."
  49. error_check_good ckpt($i) [$dbenv txn_checkpoint] 0
  50. }
  51. # sleep for N seconds.
  52. tclsleep $sleep_time
  53. }
  54. error_check_good db_close [$db close] 0
  55. error_check_good env_close [$dbenv close] 0
  56. # Now, loop through and recover to each timestamp, verifying the
  57. # expected increment.
  58. puts "tRecd0$tnum.c: Recover to each timestamp and check."
  59. for { set i 0 } { $i <= $niter } { incr i } {
  60. # Run db_recover.
  61. berkdb debug_check
  62. set t [clock format $timeof($i) -format "%y%m%d%H%M.%S"]
  63. set ret [catch {exec $util_path/db_recover -h $testdir -t $t} r]
  64. error_check_good db_recover($i,$t) $ret 0
  65. # Now open the db and check the timestamp.
  66. set db [eval {berkdb_open} $testdir/$testfile]
  67. error_check_good db_open($i) [is_valid_db $db] TRUE
  68. set dbt [$db get $key]
  69. set datum [lindex [lindex $dbt 0] 1]
  70. error_check_good timestamp_recover $datum [pad_data $method $i]
  71. error_check_good db_close [$db close] 0
  72. }
  73. # Finally, recover to a time well before the first timestamp
  74. # and well after the last timestamp.  The latter should
  75. # be just like the last timestamp;  the former should fail.
  76. puts "tRecd0$tnum.d: Recover to before the first timestamp."
  77. set t [clock format [expr $timeof(0) - 1000] -format "%y%m%d%H%M.%S"]
  78. set ret [catch {exec $util_path/db_recover -h $testdir -t $t} r]
  79. error_check_bad db_recover(before,$t) $ret 0
  80. puts "tRecd0$tnum.e: Recover to after the last timestamp."
  81. set t [clock format 
  82.     [expr $timeof($niter) + 1000] -format "%y%m%d%H%M.%S"]
  83. set ret [catch {exec $util_path/db_recover -h $testdir -t $t} r]
  84. error_check_good db_recover(after,$t) $ret 0
  85. # Now open the db and check the timestamp.
  86. set db [eval {berkdb_open} $testdir/$testfile]
  87. error_check_good db_open(after) [is_valid_db $db] TRUE
  88. set dbt [$db get $key]
  89. set datum [lindex [lindex $dbt 0] 1]
  90. error_check_good timestamp_recover $datum [pad_data $method $niter]
  91. error_check_good db_close [$db close] 0
  92. }