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

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: recd007.tcl,v 11.38 2000/12/20 21:39:23 krinsky Exp $
  7. #
  8. # Recovery Test 7.
  9. # This is a recovery test for create/delete of databases.  We have
  10. # hooks in the database so that we can abort the process at various
  11. # points and make sure that the transaction doesn't commit.  We
  12. # then need to recover and make sure the file is correctly existing
  13. # or not, as the case may be.
  14. proc recd007 { method args} {
  15. global fixed_len
  16. source ./include.tcl
  17. set orig_fixed_len $fixed_len
  18. set opts [convert_args $method $args]
  19. set omethod [convert_method $method]
  20. puts "Recd007: $method operation/transaction tests"
  21. # Create the database and environment.
  22. env_cleanup $testdir
  23. set testfile recd007.db
  24. set flags "-create -txn -home $testdir"
  25. puts "tRecd007.a: creating environment"
  26. set env_cmd "berkdb env $flags"
  27. set env [eval $env_cmd]
  28. #
  29. # We need to create a database to get the pagesize (either
  30. # the default or whatever might have been specified).
  31. # Then remove it so we can compute fixed_len and create the
  32. # real database.
  33. set oflags "-create $omethod -mode 0644 -env $env $opts $testfile"
  34. set db [eval {berkdb_open} $oflags]
  35. error_check_good db_open [is_valid_db $db] TRUE
  36. set stat [$db stat]
  37. #
  38. # Compute the fixed_len based on the pagesize being used.
  39. # We want the fixed_len to be 1/4 the pagesize.
  40. #
  41. set pg [get_pagesize $stat]
  42. error_check_bad get_pagesize $pg -1
  43. set fixed_len [expr $pg / 4]
  44. error_check_good db_close [$db close] 0
  45. error_check_good dbremove [berkdb dbremove -env $env $testfile] 0
  46. error_check_good envclose [$env close] 0
  47. # Convert the args again because fixed_len is now real.
  48. set opts [convert_args $method ""]
  49. #
  50. # List of recovery tests: {HOOKS MSG} pairs
  51. # Where each HOOK is a list of {COPY ABORT}
  52. #
  53. set rlist {
  54. { {"none" "preopen"} "Recd007.b0: none/preopen"}
  55. { {"none" "postopen"} "Recd007.b1: none/postopen"}
  56. { {"none" "postlogmeta"} "Recd007.b2: none/postlogmeta"}
  57. { {"none" "postlog"} "Recd007.b3: none/postlog"}
  58. { {"none" "postsync"} "Recd007.b4: none/postsync"}
  59. { {"postopen" "none"} "Recd007.c0: postopen/none"}
  60. { {"postlogmeta" "none"} "Recd007.c1: postlogmeta/none"}
  61. { {"postlog" "none"} "Recd007.c2: postlog/none"}
  62. { {"postsync" "none"} "Recd007.c3: postsync/none"}
  63. { {"postopen" "postopen"} "Recd007.d: postopen/postopen"}
  64. { {"postopen" "postlogmeta"} "Recd007.e: postopen/postlogmeta"}
  65. { {"postopen" "postlog"} "Recd007.f: postopen/postlog"}
  66. { {"postlog" "postlog"} "Recd007.g: postlog/postlog"}
  67. { {"postlogmeta" "postlogmeta"} "Recd007.h: postlogmeta/postlogmeta"}
  68. { {"postlogmeta" "postlog"} "Recd007.i: postlogmeta/postlog"}
  69. { {"postlog" "postsync"} "Recd007.j: postlog/postsync"}
  70. { {"postsync" "postsync"} "Recd007.k: postsync/postsync"}
  71. }
  72. # These are all the data values that we're going to need to read
  73. # through the operation table and run the recovery tests.
  74. foreach pair $rlist {
  75. set cmd [lindex $pair 0]
  76. set msg [lindex $pair 1]
  77. file_recover_create $testdir $env_cmd $omethod 
  78.     $opts $testfile $cmd $msg
  79. }
  80. set rlist {
  81. { {"none" "prerename"} "Recd007.l0: none/prerename"}
  82. { {"none" "postrename"} "Recd007.l1: none/postrename"}
  83. { {"prerename" "none"} "Recd007.m0: prerename/none"}
  84. { {"postrename" "none"} "Recd007.m1: postrename/none"}
  85. { {"prerename" "prerename"} "Recd007.n: prerename/prerename"}
  86. { {"prerename" "postrename"} "Recd007.o: prerename/postrename"}
  87. { {"postrename" "postrename"} "Recd007.p: postrename/postrename"}
  88. }
  89. foreach op { dbremove dbrename } {
  90. foreach pair $rlist {
  91. set cmd [lindex $pair 0]
  92. set msg [lindex $pair 1]
  93. file_recover_delete $testdir $env_cmd $omethod 
  94.      $opts $testfile $cmd $msg $op
  95. }
  96. }
  97. if { $is_windows_test != 1 } {
  98. do_file_recover_delmk $testdir $env_cmd $omethod $opts $testfile
  99. }
  100. puts "tRecd007.r: Verify db_printlog can read logfile"
  101. set tmpfile $testdir/printlog.out
  102. set stat [catch {exec $util_path/db_printlog -h $testdir 
  103.     > $tmpfile} ret]
  104. error_check_good db_printlog $stat 0
  105. fileremove $tmpfile
  106. }
  107. proc file_recover_create { dir env_cmd method opts dbfile cmd msg } {
  108. #
  109. # We run this test on each of these scenarios:
  110. # 1.  Creating just a database
  111. # 2.  Creating a database with a subdb
  112. # 3.  Creating a 2nd subdb in a database
  113. puts "t$msg create with a database"
  114. do_file_recover_create $dir $env_cmd $method $opts $dbfile 
  115.     0 $cmd $msg
  116. if { [is_queue $method] == 1 } {
  117. puts "tSkipping subdatabase tests for method $method"
  118. return
  119. }
  120. puts "t$msg create with a database and subdb"
  121. do_file_recover_create $dir $env_cmd $method $opts $dbfile 
  122.     1 $cmd $msg
  123. puts "t$msg create with a database and 2nd subdb"
  124. do_file_recover_create $dir $env_cmd $method $opts $dbfile 
  125.     2 $cmd $msg
  126. }
  127. proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
  128. global log_log_record_types
  129. source ./include.tcl
  130. # Keep track of the log types we've seen
  131. if { $log_log_record_types == 1} {
  132. logtrack_read $dir
  133. }
  134. env_cleanup $dir
  135. # Open the environment and set the copy/abort locations
  136. set env [eval $env_cmd]
  137. set copy [lindex $cmd 0]
  138. set abort [lindex $cmd 1]
  139. error_check_good copy_location [is_valid_create_loc $copy] 1
  140. error_check_good abort_location [is_valid_create_loc $abort] 1
  141. if {([string first "logmeta" $copy] != -1 || 
  142.     [string first "logmeta" $abort] != -1) && 
  143.     [is_btree $method] == 0 } {
  144. puts "tSkipping for method $method"
  145. $env test copy none
  146. $env test abort none
  147. error_check_good env_close [$env close] 0
  148. return
  149. }
  150. #
  151. # Basically non-existence is our initial state.  When we
  152. # abort, it is also our final state.
  153. #
  154. switch $sub {
  155. 0 {
  156. set oflags "-create $method -mode 0644 
  157.     -env $env $opts $dbfile"
  158. }
  159. 1 {
  160. set oflags "-create $method -mode 0644 
  161.     -env $env $opts $dbfile sub0"
  162. }
  163. 2 {
  164. #
  165. # If we are aborting here, then we need to
  166. # create a first subdb, then create a second
  167. #
  168. set oflags "-create $method -mode 0644 
  169.     -env $env $opts $dbfile sub0"
  170. set db [eval {berkdb_open} $oflags]
  171. error_check_good db_open [is_valid_db $db] TRUE
  172. error_check_good db_close [$db close] 0
  173. set init_file $dir/$dbfile.init
  174. catch { file copy -force $dir/$dbfile $init_file } res
  175. set oflags "-create $method -mode 0644 
  176.     -env $env $opts $dbfile sub1"
  177. }
  178. default {
  179. puts "tBad value $sub for sub"
  180. return
  181. }
  182. }
  183. #
  184. # Set our locations to copy and abort
  185. #
  186. set ret [eval $env test copy $copy]
  187. error_check_good test_copy $ret 0
  188. set ret [eval $env test abort $abort]
  189. error_check_good test_abort $ret 0
  190. puts "ttExecuting command"
  191. set ret [catch {eval {berkdb_open} $oflags} db]
  192. # Sync the mpool so any changes to the file that are
  193. # in mpool get written to the disk file before the
  194. # diff.
  195. puts "ttSyncing"
  196. $env mpool_sync "0 0"
  197. #
  198. # If we don't abort, then we expect success.
  199. # If we abort, we expect no file created.
  200. #
  201. if {[string first "none" $abort] == -1} {
  202. #
  203. # Operation was aborted, verify it does
  204. # not exist.
  205. #
  206. puts "ttCommand executed and aborted."
  207. error_check_bad db_open ret 0
  208. #
  209. # Check that the file does not exist.  Final state.
  210. #
  211. if { $sub != 2 } {
  212. error_check_good db_open:exists 
  213.     [file exists $dir/$dbfile] 0
  214. } else {
  215. error_check_good 
  216.     diff(init,postcreate):diff($init_file,$dir/$dbfile)
  217.     [dbdump_diff $init_file $dir/$dbfile] 0
  218. }
  219. } else {
  220. #
  221. # Operation was committed, verify it exists.
  222. #
  223. puts "ttCommand executed and committed."
  224. error_check_good db_open [is_valid_db $db] TRUE
  225. error_check_good db_close [$db close] 0
  226. #
  227. # Check that the file exists.
  228. #
  229. error_check_good db_open [file exists $dir/$dbfile] 1
  230. set init_file $dir/$dbfile.init
  231. catch { file copy -force $dir/$dbfile $init_file } res
  232. if { [is_queue $method] == 1 } {
  233. copy_extent_file $dir $dbfile init
  234. }
  235. }
  236. error_check_good env_close [$env close] 0
  237. #
  238. # Run recovery here.  Should be a no-op.  Verify that
  239. # the file still doesn't exist or change (depending on sub)
  240. # when we are done.
  241. #
  242. berkdb debug_check
  243. puts -nonewline "ttAbout to run recovery ... "
  244. flush stdout
  245. set stat [catch {exec $util_path/db_recover -h $dir -c} result]
  246. if { $stat == 1 } {
  247. error "FAIL: Recovery error: $result."
  248. return
  249. }
  250. puts "complete"
  251. if { $sub != 2 && [string first "none" $abort] == -1} {
  252. #
  253. # Operation was aborted, verify it still does
  254. # not exist.  Only done with file creations.
  255. #
  256. error_check_good after_recover1 [file exists $dir/$dbfile] 0
  257. } else {
  258. #
  259. # Operation was committed or just a subdb was aborted.
  260. # Verify it did not change.
  261. #
  262. error_check_good 
  263.     diff(initial,post-recover1):diff($init_file,$dir/$dbfile) 
  264.     [dbdump_diff $init_file $dir/$dbfile] 0
  265. #
  266. # Need a new copy to get the right LSN into the file.
  267. #
  268. catch { file copy -force $dir/$dbfile $init_file } res
  269. if { [is_queue $method] == 1 } {
  270. copy_extent_file $dir $dbfile init
  271. }
  272. }
  273. #
  274. # If we didn't make a copy, then we are done.
  275. #
  276. if {[string first "none" $copy] != -1} {
  277. return
  278. }
  279. #
  280. # Now move the .afterop file to $dbfile.  Run recovery again.
  281. #
  282. file copy -force $dir/$dbfile.afterop $dir/$dbfile
  283. if { [is_queue $method] == 1 } {
  284. move_file_extent $dir $dbfile afterop copy
  285. }
  286. berkdb debug_check
  287. puts -nonewline "ttAbout to run recovery ... "
  288. flush stdout
  289. set stat [catch {exec $util_path/db_recover -h $dir -c} result]
  290. if { $stat == 1 } {
  291. error "FAIL: Recovery error: $result."
  292. return
  293. }
  294. puts "complete"
  295. if { $sub != 2 && [string first "none" $abort] == -1} {
  296. #
  297. # Operation was aborted, verify it still does
  298. # not exist.  Only done with file creations.
  299. #
  300. error_check_good after_recover2 [file exists $dir/$dbfile] 0
  301. } else {
  302. #
  303. # Operation was committed or just a subdb was aborted.
  304. # Verify it did not change.
  305. #
  306. error_check_good 
  307.     diff(initial,post-recover2):diff($init_file,$dir/$dbfile) 
  308.     [dbdump_diff $init_file $dir/$dbfile] 0
  309. }
  310. }
  311. proc file_recover_delete { dir env_cmd method opts dbfile cmd msg op } {
  312. #
  313. # We run this test on each of these scenarios:
  314. # 1.  Deleting/Renaming just a database
  315. # 2.  Deleting/Renaming a database with a subdb
  316. # 3.  Deleting/Renaming a 2nd subdb in a database
  317. puts "t$msg $op with a database"
  318. do_file_recover_delete $dir $env_cmd $method $opts $dbfile 
  319.     0 $cmd $msg $op
  320. if { [is_queue $method] == 1 } {
  321. puts "tSkipping subdatabase tests for method $method"
  322. return
  323. }
  324. puts "t$msg $op with a database and subdb"
  325. do_file_recover_delete $dir $env_cmd $method $opts $dbfile 
  326.     1 $cmd $msg $op
  327. puts "t$msg $op with a database and 2nd subdb"
  328. do_file_recover_delete $dir $env_cmd $method $opts $dbfile 
  329.     2 $cmd $msg $op
  330. }
  331. proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
  332. global log_log_record_types
  333. source ./include.tcl
  334. # Keep track of the log types we've seen
  335. if { $log_log_record_types == 1} {
  336. logtrack_read $dir
  337. }
  338. env_cleanup $dir
  339. # Open the environment and set the copy/abort locations
  340. set env [eval $env_cmd]
  341. set copy [lindex $cmd 0]
  342. set abort [lindex $cmd 1]
  343. error_check_good copy_location [is_valid_delete_loc $copy] 1
  344. error_check_good abort_location [is_valid_delete_loc $abort] 1
  345. if { [is_record_based $method] == 1 } {
  346. set key 1
  347. } else {
  348. set key recd007_key
  349. }
  350. set data1 recd007_data
  351. set data2 NEWrecd007_data2
  352. #
  353. # Depending on what sort of subdb we want, if any, our
  354. # args to the open call will be different (and if we
  355. # want a 2nd subdb, we create the first here.
  356. #
  357. switch $sub {
  358. 0 {
  359. set oflags "-create $method -mode 0644 
  360.     -env $env $opts $dbfile"
  361. }
  362. 1 {
  363. set oflags "-create $method -mode 0644 
  364.     -env $env $opts $dbfile sub0"
  365. }
  366. 2 {
  367. #
  368. # If we are aborting here, then we need to
  369. # create a first subdb, then create a second
  370. #
  371. set oflags "-create $method -mode 0644 
  372.     -env $env $opts $dbfile sub0"
  373. set db [eval {berkdb_open} $oflags]
  374. error_check_good db_open [is_valid_db $db] TRUE
  375. set txn [$env txn]
  376. set ret [$db put -txn $txn $key $data2]
  377. error_check_good db_put $ret 0
  378. error_check_good commit [$txn commit] 0
  379. error_check_good db_close [$db close] 0
  380. set oflags "-create $method -mode 0644 
  381.     -env $env $opts $dbfile sub1"
  382. }
  383. default {
  384. puts "tBad value $sub for sub"
  385. return
  386. }
  387. }
  388. #
  389. # Set our locations to copy and abort
  390. #
  391. set ret [eval $env test copy $copy]
  392. error_check_good test_copy $ret 0
  393. set ret [eval $env test abort $abort]
  394. error_check_good test_abort $ret 0
  395. #
  396. # Open our db, add some data, close and copy as our
  397. # init file.
  398. #
  399. set db [eval {berkdb_open} $oflags]
  400. error_check_good db_open [is_valid_db $db] TRUE
  401. set txn [$env txn]
  402. set ret [$db put -txn $txn $key $data1]
  403. error_check_good db_put $ret 0
  404. error_check_good commit [$txn commit] 0
  405. error_check_good db_close [$db close] 0
  406. set init_file $dir/$dbfile.init
  407. catch { file copy -force $dir/$dbfile $init_file } res
  408. if { [is_queue $method] == 1}  {
  409. copy_extent_file $dir $dbfile init
  410. }
  411. #
  412. # If we don't abort, then we expect success.
  413. # If we abort, we expect no file removed.
  414. #
  415. if { [string compare $op dbremove] == 0 } {
  416. set ret [catch { berkdb $op -env $env $dbfile } remret]
  417. } else {
  418. set ret [catch { berkdb $op -env $env $dbfile $dbfile.new } 
  419.     remret]
  420. }
  421. if {[string first "none" $abort] == -1} {
  422. #
  423. # Operation was aborted, verify it did not change.
  424. #
  425. puts "ttCommand executed and aborted."
  426. error_check_good $op $ret 1
  427. #
  428. # Check that the file exists.  Final state.
  429. # Compare against initial file.
  430. #
  431. error_check_good post$op.1 [file exists $dir/$dbfile] 1
  432. error_check_good 
  433.     diff(init,post$op.2):diff($init_file,$dir/$dbfile)
  434.     [dbdump_diff $init_file $dir/$dbfile] 0
  435. } else {
  436. #
  437. # Operation was committed, verify it does
  438. # not exist.
  439. #
  440. puts "ttCommand executed and committed."
  441. error_check_good $op $ret 0
  442. #
  443. # Check that the file does not exist or correct
  444. # file exists.
  445. #
  446. error_check_good $op [file exists $dir/$dbfile] 0
  447. if { [string compare $op dbrename] == 0 } {
  448. error_check_good $op [file exists $dir/$dbfile.new] 1
  449. }
  450. }
  451. error_check_good env_close [$env close] 0
  452. catch { file copy -force $dir/$dbfile $init_file } res
  453. if { [is_queue $method] == 1} {
  454. copy_extent_file $dir $dbfile init
  455. }
  456. #
  457. # Run recovery here.  Should be a no-op.  Verify that
  458. # the file still doesn't exist or change (depending on abort)
  459. # when we are done.
  460. #
  461. berkdb debug_check
  462. puts -nonewline "ttAbout to run recovery ... "
  463. flush stdout
  464. set stat [catch {exec $util_path/db_recover -h $dir -c} result]
  465. if { $stat == 1 } {
  466. error "FAIL: Recovery error: $result."
  467. return
  468. }
  469. puts "complete"
  470. if { [string first "none" $abort] != -1} {
  471. #
  472. # Operation was committed, verify it still does
  473. # not exist.
  474. #
  475. error_check_good after_recover1 [file exists $dir/$dbfile] 0
  476. } else {
  477. #
  478. # Operation was aborted, verify it did not change.
  479. #
  480. error_check_good 
  481.     diff(initial,post-recover1):diff($init_file,$dir/$dbfile) 
  482.     [dbdump_diff $init_file $dir/$dbfile] 0
  483. }
  484. #
  485. # If we didn't make a copy, then we are done.
  486. #
  487. if {[string first "none" $copy] != -1} {
  488. return
  489. }
  490. #
  491. # Now move the .afterop file to $dbfile.  Run recovery again.
  492. #
  493. set filecopy [glob $dir/*.afterop]
  494. set afterop [lindex $filecopy 0]
  495. file rename -force $afterop $dir/$dbfile
  496. set afterop [string range $afterop 
  497.     [expr [string last "/" $afterop] + 1]  
  498.     [string last "." $afterop]]
  499. move_file_extent $dir $dbfile afterop rename
  500. berkdb debug_check
  501. puts -nonewline "ttAbout to run recovery ... "
  502. flush stdout
  503. set stat [catch {exec $util_path/db_recover -h $dir -c} result]
  504. if { $stat == 1 } {
  505. error "FAIL: Recovery error: $result."
  506. return
  507. }
  508. puts "complete"
  509. if { [string first "none" $abort] != -1} {
  510. #
  511. # Operation was committed, verify it still does
  512. # not exist.
  513. #
  514. error_check_good after_recover2 [file exists $dir/$dbfile] 0
  515. } else {
  516. #
  517. # Operation was aborted, verify it did not change.
  518. #
  519. error_check_good 
  520.     diff(initial,post-recover2):diff($init_file,$dir/$dbfile) 
  521.     [dbdump_diff $init_file $dir/$dbfile] 0
  522. }
  523. }
  524. #
  525. # This function tests a specific case of recovering after a db removal.
  526. # This is for SR #2538.  Basically we want to test that:
  527. # - Make an env.
  528. # - Make/close a db.
  529. # - Remove the db.
  530. # - Create another db of same name.
  531. # - Sync db but leave open.
  532. # - Run recovery.
  533. # - Verify no recovery errors and that new db is there.
  534. proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
  535. global log_log_record_types
  536. source ./include.tcl
  537. # Keep track of the log types we've seen
  538. if { $log_log_record_types == 1} {
  539. logtrack_read $dir
  540. }
  541. puts "tRecd007.q: Delete and recreate a database"
  542. env_cleanup $dir
  543. # Open the environment and set the copy/abort locations
  544. set env [eval $env_cmd]
  545. if { [is_record_based $method] == 1 } {
  546. set key 1
  547. } else {
  548. set key recd007_key
  549. }
  550. set data1 recd007_data
  551. set data2 NEWrecd007_data2
  552. set oflags "-create $method -mode 0644 -env $env $opts $dbfile"
  553. #
  554. # Open our db, add some data, close and copy as our
  555. # init file.
  556. #
  557. set db [eval {berkdb_open} $oflags]
  558. error_check_good db_open [is_valid_db $db] TRUE
  559. set txn [$env txn]
  560. set ret [$db put -txn $txn $key $data1]
  561. error_check_good db_put $ret 0
  562. error_check_good commit [$txn commit] 0
  563. error_check_good db_close [$db close] 0
  564. set ret [catch { berkdb dbremove -env $env $dbfile } remret]
  565. #
  566. # Operation was committed, verify it does
  567. # not exist.
  568. #
  569. puts "ttCommand executed and committed."
  570. error_check_good dbremove $ret 0
  571. error_check_good dbremove.1 [file exists $dir/$dbfile] 0
  572. #
  573. # Now create a new db with the same name.
  574. #
  575. set db [eval {berkdb_open} $oflags]
  576. error_check_good db_open [is_valid_db $db] TRUE
  577. set txn [$env txn]
  578. set ret [$db put -txn $txn $key $data1]
  579. error_check_good db_put $ret 0
  580. error_check_good commit [$txn commit] 0
  581. error_check_good db_sync [$db sync] 0
  582. berkdb debug_check
  583. puts -nonewline "ttAbout to run recovery ... "
  584. flush stdout
  585. set stat [catch {exec $util_path/db_recover -h $dir -c} result]
  586. if { $stat == 1 } {
  587. error "FAIL: Recovery error: $result."
  588. return
  589. }
  590. puts "complete"
  591. error_check_good db_recover $stat 0
  592. error_check_good db_recover.1 [file exists $dir/$dbfile] 1
  593. #
  594. # Since we ran recovery on the open db/env, we need to
  595. # catch these calls.  Basically they are there to clean
  596. # up the Tcl widgets.
  597. #
  598. set stat [catch {$db close} ret]
  599. set stat [catch {$env close} ret]
  600. }
  601. proc is_valid_create_loc { loc } {
  602. switch $loc {
  603. none -
  604. preopen -
  605. postopen -
  606. postlogmeta -
  607. postlog -
  608. postsync
  609. { return 1 }
  610. default
  611. { return 0 }
  612. }
  613. }
  614. proc is_valid_delete_loc { loc } {
  615. switch $loc {
  616. none -
  617. prerename -
  618. postrename -
  619. postremcall
  620. { return 1 }
  621. default
  622. { return 0 }
  623. }
  624. }
  625. # Do a logical diff on the db dump files.  We expect that either
  626. # the files are identical, or if they differ, that it is exactly
  627. # just a free/invalid page.
  628. # Return 1 if they are different, 0 if logically the same (or identical).
  629. #
  630. proc dbdump_diff { initfile dbfile } {
  631. source ./include.tcl
  632. set initdump $initfile.dump
  633. set dbdump $dbfile.dump
  634. set stat [catch {exec $util_path/db_dump -dar -f $initdump 
  635.     $initfile} ret]
  636. error_check_good dbdump.init $stat 0
  637. # Do a dump without the freelist which should eliminate any
  638. # recovery differences.
  639. set stat [catch {exec $util_path/db_dump -dar -f $dbdump $dbfile} 
  640.     ret]
  641. error_check_good dbdump.db $stat 0
  642. set stat [filecmp $dbdump $initdump]
  643. if {$stat == 0} {
  644. return 0
  645. }
  646. puts "diff: $dbdump $initdump gives:n$ret"
  647. return 1
  648. }