# See the file LICENSE for redistribution information. # # Copyright (c) 2003,2007 Oracle. All rights reserved. # # $Id: rep018script.tcl,v 12.9 2007/05/17 18:17:21 bostic Exp $ # # Rep018 script - concurrency with checkpoints. # # Test dbremove with replication. # # Usage: rep018script clientdir dbfile # clientdir: client env directory # niter: number of items in file # dbfile: name of database file # source ./include.tcl source $test_path/test.tcl source $test_path/testutils.tcl source $test_path/reputils.tcl set usage "repscript clientdir niter dbfile method" # Verify usage if { $argc != 4 } { puts stderr "FAIL:[timestamp] Usage: $usage" exit } # Initialize arguments set clientdir [ lindex $argv 0 ] set niter [ lindex $argv 1 ] set dbfile [ lindex $argv 2 ] set method [ lindex $argv 3 ] # Join the queue env. We assume the rep test convention of # placing the messages in $testdir/MSGQUEUEDIR. set queueenv [eval berkdb_env -home $testdir/MSGQUEUEDIR] error_check_good script_qenv_open [is_valid_env $queueenv] TRUE # # We need to set up our own machids. # Add 1 for master env id, and 2 for the clientenv id. # repladd 1 repladd 2 # Join the client env. set cl_cmd "berkdb_env_noerr -home $clientdir \ -txn -rep_client -rep_transport \[list 2 replsend\]" # set cl_cmd "berkdb_env_noerr -home $clientdir \ # -verbose {rep on} -errfile /dev/stderr \ # -txn -rep_client -rep_transport \[list 2 replsend\]" set clientenv [eval $cl_cmd] error_check_good script_cenv_open [is_valid_env $clientenv] TRUE # Make sure we can read data on client. set db [eval "berkdb_open -env $clientenv $dbfile"] for { set i 1 } { $i <= $niter } { incr i } { set ret [lindex [$db get $i] 0] error_check_good db_get $ret [list $i [pad_data $method data$i]] } # Put a timestamp in a shared file. set markerenv [berkdb_env -create -home $testdir -txn] error_check_good markerenv_open [is_valid_env $markerenv] TRUE set marker \ [eval "berkdb_open -create -btree -auto_commit -env $markerenv marker.db"] error_check_good timestamp_ready \ [$marker put CHILDREADY [timestamp -r]] 0 # Give the parent a chance to process messages and hang. tclsleep 30 # Clean up the child so the parent can go forward. error_check_good timestamp_done \ [$marker put CHILDDONE [timestamp -r]] 0 error_check_good client_db_close [$db close] 0 # Check that the master is done. while { [llength [$marker get PARENTDONE]] == 0 } { tclsleep 1 } # Verify that the newly recreated database is now empty. set db [eval "berkdb_open -env $clientenv $dbfile"] set cursor [$db cursor] error_check_good db_empty [llength [$cursor get -first]] 0 error_check_good cursor_close [$cursor close] 0 error_check_good db_close [$db close] 0 error_check_good marker_db_close [$marker close] 0 error_check_good markerenv_close [$markerenv close] 0 error_check_good script_client_close [$clientenv close] 0