From 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sat, 17 Dec 2016 21:28:53 -0800 Subject: Berkeley DB 4.8 with rust build script for linux. --- db-4.8.30/test/rep036script.tcl | 125 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 db-4.8.30/test/rep036script.tcl (limited to 'db-4.8.30/test/rep036script.tcl') diff --git a/db-4.8.30/test/rep036script.tcl b/db-4.8.30/test/rep036script.tcl new file mode 100644 index 0000000..fd40822 --- /dev/null +++ b/db-4.8.30/test/rep036script.tcl @@ -0,0 +1,125 @@ +# See the file LICENSE for redistribution information. +# +# Copyright (c) 2004-2009 Oracle. All rights reserved. +# +# $Id$ +# +# Rep036 script - create additional writers in master env. +# +# Usage: masterdir writerid +# masterdir: Directory of replication master +# writerid: i.d. number for writer +source ./include.tcl +source $test_path/test.tcl +source $test_path/testutils.tcl +source $test_path/reputils.tcl + +global rand_init +set usage "repscript masterdir writerid nentries method" + +# Verify usage +if { $argc != 4 } { + puts stderr "FAIL:[timestamp] Usage: $usage" + exit +} + +# Initialize arguments +set masterdir [ lindex $argv 0 ] +set writerid [ lindex $argv 1 ] +set nentries [ 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 machid. +repladd 1 +repladd 2 + +# Start up deadlock detector. +# Commented out - see #15049. +#set dpid [eval {exec $util_path/db_deadlock} \ +# -a o -v -t 2.0 -h $masterdir >& $testdir/dd.writer.$writerid.out &] + +# Join the master env. +set envid 1 +set env_cmd "berkdb_env_noerr -home $masterdir \ + -errfile /dev/stderr -errpfx WRITER.$writerid \ + -txn -rep_master -rep_transport \[list $envid replsend\]" +# set env_cmd "berkdb_env_noerr -home $masterdir \ +# -errfile /dev/stderr -errpfx WRITER.$writerid \ +# -verbose {rep on} \ +# -txn -rep_master -rep_transport \[list $envid replsend\]" +set masterenv [eval $env_cmd] +error_check_good script_env_open [is_valid_env $masterenv] TRUE + +# Open database. +set testfile "rep036.db" +set omethod [convert_method $method] +set mdb [eval {berkdb_open_noerr} -env $masterenv -auto_commit \ + -create $omethod $testfile] +error_check_good dbopen [is_valid_db $mdb] TRUE + +# Write records to the database. +set did [open $dict] +set count 0 +set dictsize 10000 +berkdb srand $rand_init +while { $count < $nentries } { + # + # If nentries exceeds the dictionary size, close + # and reopen to start from the beginning again. + if { [expr [expr $count + 1] % $dictsize] == 0 } { + close $did + set did [open $dict] + } + + gets $did str + set key WRITER.$writerid.$str + set str [reverse $str] + + set t [$masterenv txn] + error_check_good txn [is_valid_txn $t $masterenv] TRUE + set txn "-txn $t" + +# If using deadlock detection, uncomment this and comment the +# following put statement. +# # Writing to this database can deadlock. If we do, let the +# # deadlock detector break the lock, wait a second, and try again. +# while { [catch {eval {$mdb put}\ +# $txn {$key [chop_data $method $str]}} ret] } { +# error_check_good deadlock [is_substr $ret DB_LOCK_DEADLOCK] 1 +# tclsleep 1 +# } + + set ret [eval \ + {$mdb put} $txn {$key [chop_data $method $str]}] + error_check_good put $ret 0 + error_check_good txn [$t commit] 0 + + if { [expr $count % 100] == 1 } { + puts "Wrote WRITER.$writerid record $count" + set sleep [berkdb random_int 0 10] + puts "Writer.$writerid sleeping $sleep seconds" + tclsleep $sleep + } + incr count +} +close $did + +# Clean up. +# Uncomment following line if using deadlock detector. +#error_check_good kill_deadlock_detector [tclkill $dpid] "" +error_check_good mdb_close [$mdb close] 0 +error_check_good masterenv_close [$masterenv close] 0 +replclose $testdir/MSGQUEUEDIR + +# Communicate with parent by creating a marker 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 $writerid.db"] +error_check_good marker_close [$marker close] 0 +error_check_good markerenv_close [$markerenv close] 0 -- cgit v1.2.3