⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parallel.tcl

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 TCL
字号:
# Code to load up the tests in to the Queue database# $Id: parallel.tcl,v 11.28 2002/09/05 17:23:06 sandstro Exp $proc load_queue { file  {dbdir RUNQUEUE} nitems } {	puts -nonewline "Loading run queue with $nitems items..."	flush stdout	set env [berkdb_env -create -lock -home $dbdir]	error_check_good dbenv [is_valid_env $env] TRUE	set db [eval {berkdb_open -env $env -create -truncate \            -mode 0644 -len 120 -queue queue.db} ]        error_check_good dbopen [is_valid_db $db] TRUE	set fid [open $file]	set count 0        while { [gets $fid str] != -1 } {		set testarr($count) $str		incr count	}	# Randomize array of tests.	set rseed [pid]	berkdb srand $rseed	puts -nonewline "randomizing..."	flush stdout	for { set i 0 } { $i < $count } { incr i } {		set j [berkdb random_int $i [expr $count - 1]]		set tmp $testarr($i)		set testarr($i) $testarr($j)		set testarr($j) $tmp	}	if { [string compare ALL $nitems] != 0 } {		set maxload $nitems	} else {		set maxload $count	}	puts "loading..."	flush stdout	for { set i 0 } { $i < $maxload } { incr i } {		set str $testarr($i)                set ret [eval {$db put -append $str} ]                error_check_good put:$db $ret [expr $i + 1]        }	puts "Loaded $maxload records (out of $count)."	close $fid	$db close	$env close}proc init_runqueue { {dbdir RUNQUEUE} nitems list} {	if { [file exists $dbdir] != 1 } {		file mkdir $dbdir	}	puts "Creating test list..."	$list -n	load_queue ALL.OUT $dbdir $nitems	file delete TEST.LIST	file rename ALL.OUT TEST.LIST#	file delete ALL.OUT}proc run_parallel { nprocs {list run_all} {nitems ALL} } {	set basename ./PARALLEL_TESTDIR	set queuedir ./RUNQUEUE	source ./include.tcl	mkparalleldirs $nprocs $basename $queuedir	init_runqueue $queuedir $nitems $list	set basedir [pwd]	set pidlist {}	set queuedir ../../[string range $basedir \	    [string last "/" $basedir] end]/$queuedir	for { set i 1 } { $i <= $nprocs } { incr i } {		fileremove -f ALL.OUT.$i		set ret [catch {			set p [exec $tclsh_path << \			    "source $test_path/test.tcl;\			    run_queue $i $basename.$i $queuedir $nitems" &]			lappend pidlist $p			set f [open $testdir/begin.$p w]			close $f		} res]	}	watch_procs $pidlist 300 360000	set failed 0	for { set i 1 } { $i <= $nprocs } { incr i } {		if { [check_failed_run ALL.OUT.$i] != 0 } {			set failed 1			puts "Regression tests failed in process $i."		}	}	if { $failed == 0 } {		puts "Regression tests succeeded."	}}proc run_queue { i rundir queuedir nitems } {	set builddir [pwd]	file delete $builddir/ALL.OUT.$i	cd $rundir	puts "Parallel run_queue process $i (pid [pid]) starting."	source ./include.tcl	global env	set dbenv [berkdb_env -create -lock -home $queuedir]	error_check_good dbenv [is_valid_env $dbenv] TRUE	set db [eval {berkdb_open -env $dbenv \            -mode 0644 -len 120 -queue queue.db} ]        error_check_good dbopen [is_valid_db $db] TRUE	set dbc  [eval $db cursor]        error_check_good cursor [is_valid_cursor $dbc $db] TRUE	set count 0	set waitcnt 0	while { $waitcnt < 5 } {		set line [$db get -consume]		if { [ llength $line ] > 0 } {			set cmd [lindex [lindex $line 0] 1]			set num [lindex [lindex $line 0] 0]			set o [open $builddir/ALL.OUT.$i a]			puts $o "\nExecuting record $num ([timestamp -w]):\n"			set tdir "TESTDIR.$i"			regsub {TESTDIR} $cmd $tdir cmd			puts $o $cmd			close $o			if { [expr {$num % 10} == 0] } {				puts "Starting test $num of $nitems"			}			#puts "Process $i, record $num:\n$cmd"			set env(PURIFYOPTIONS) \	"-log-file=./test$num.%p -follow-child-processes -messages=first"			set env(PURECOVOPTIONS) \	"-counts-file=./cov.pcv -log-file=./cov.log -follow-child-processes"			if [catch {exec $tclsh_path \			     << "source $test_path/test.tcl; $cmd" \			     >>& $builddir/ALL.OUT.$i } res] {                                set o [open $builddir/ALL.OUT.$i a]                                puts $o "FAIL: '$cmd': $res"                                close $o                        }			env_cleanup $testdir			set o [open $builddir/ALL.OUT.$i a]			puts $o "\nEnding record $num ([timestamp])\n"			close $o			incr count		} else {			incr waitcnt			tclsleep 1		}	}	puts "Process $i: $count commands executed"	$dbc close	$db close	$dbenv close	#	# We need to put the pid file in the builddir's idea	# of testdir, not this child process' local testdir.	# Therefore source builddir's include.tcl to get its	# testdir.	# !!! This resets testdir, so don't do anything else	# local to the child after this.	source $builddir/include.tcl	set f [open $builddir/$testdir/end.[pid] w]	close $f}proc mkparalleldirs { nprocs basename queuedir } {	source ./include.tcl	set dir [pwd]	if { $is_windows_test != 1 } {	        set EXE ""	} else {		set EXE ".exe"        }	for { set i 1 } { $i <= $nprocs } { incr i } {		set destdir $basename.$i		catch {file mkdir $destdir}		puts "Created $destdir"		if { $is_windows_test == 1 } {			catch {file mkdir $destdir/Debug}			catch {eval file copy \			    [eval glob {$dir/Debug/*.dll}] $destdir/Debug}		}		catch {eval file copy \		    [eval glob {$dir/{.libs,include.tcl}}] $destdir}		# catch {eval file copy $dir/$queuedir $destdir}		catch {eval file copy \		    [eval glob {$dir/db_{checkpoint,deadlock}$EXE} \		    {$dir/db_{dump,load,printlog,recover,stat,upgrade}$EXE} \		    {$dir/db_{archive,verify}$EXE}] \		    $destdir}		# Create modified copies of include.tcl in parallel		# directories so paths still work.		set infile [open ./include.tcl r]		set d [read $infile]		close $infile		regsub {test_path } $d {test_path ../} d		regsub {src_root } $d {src_root ../} d		set tdir "TESTDIR.$i"		regsub -all {TESTDIR} $d $tdir d		regsub {KILL \.} $d {KILL ..} d		set outfile [open $destdir/include.tcl w]		puts $outfile $d		close $outfile		global svc_list		foreach svc_exe $svc_list {			if { [file exists $dir/$svc_exe] } {				catch {eval file copy $dir/$svc_exe $destdir}			}		}	}}proc run_ptest { nprocs test args } {	global parms	set basename ./PARALLEL_TESTDIR	set queuedir NULL	source ./include.tcl	mkparalleldirs $nprocs $basename $queuedir	if { [info exists parms($test)] } {		foreach method \		    "hash queue queueext recno rbtree frecno rrecno btree" {			if { [eval exec_ptest $nprocs $basename \			    $test $method $args] != 0 } {				break			}		}	} else {		eval exec_ptest $nprocs $basename $test $args	}}proc exec_ptest { nprocs basename test args } {	source ./include.tcl	set basedir [pwd]	set pidlist {}	puts "Running $nprocs parallel runs of $test"	for { set i 1 } { $i <= $nprocs } { incr i } {		set outf ALL.OUT.$i		fileremove -f $outf		set ret [catch {			set p [exec $tclsh_path << \		 	    "cd $basename.$i;\		            source ../$test_path/test.tcl;\		            $test $args" >& $outf &]			lappend pidlist $p			set f [open $testdir/begin.$p w]			close $f		} res]	}	watch_procs $pidlist 30 36000	set failed 0	for { set i 1 } { $i <= $nprocs } { incr i } {		if { [check_failed_run ALL.OUT.$i] != 0 } {			set failed 1			puts "Test $test failed in process $i."		}	}	if { $failed == 0 } {		puts "Test $test succeeded all processes"		return 0	} else {		puts "Test failed: stopping"		return 1	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -