################################################# # Function definitions for dux dump type ################################################# proc dux_dump {host atom level} { global sessionID tmpdir set hostlogfile [atomToFile $host $atom $level dux] set dumpfd [open "|/s/std/bin/rsh $host -n \"/usr/sbin/dump ${level}uf - $atom\" 2> $hostlogfile" {RDONLY NONBLOCK}] set stderrfd [open $hostlogfile r] return [list $dumpfd $stderrfd] } proc dux_cleanup {host atom level} { global sessionID tmpdir set hostlogfile [atomToFile $host $atom $level dux] catch {file delete $hostlogfile} } proc dux_check {host atom level line} { return [regexp {error|Unknown|EXITED|ATTENTION|abort|Bad} $line] } proc dux_recover {host atom level} { set filename "$host" if { [string compare $atom "/"] == 0 } { append filename ".root" } else { regsub -all {/} $atom "." newatom append filename "$newatom" } append filename ".$level.burt" return [open "$filename" w] } proc dux_schedule {line} { global logfilefd rshStatus foreach {host level type} $line {} if { $rshStatus(running) >= 10 } { vwait rshStatus(running) } scheduleHostWithRsh $host $level $type /s/std/bin/rsh -n incr rshStatus(scheduled) } proc dux_size_command { host atom level } { return "/u/o/p/operator/bin/errout /usr/sbin/dump ${level}Ef /dev/null $atom" } proc dux_size { host } { global logfilefd rshStatus puts $logfilefd "BURT: Sizing $host [burtTime]" if { $rshStatus(running) >= 15 } { vwait rshStatus(running) } incr rshStatus(scheduled) sizeHostWithRsh $host /s/std/bin/rsh -n duxRshSizeProcess } proc duxRshSizeProcess { hostfd host cmd } { global rshStatus itemToSize atomlist logfilefd if {![eof $hostfd]} { gets $hostfd bytes if { ![regexp {blocks} $bytes] } { return } set bytes [expr [lindex $bytes 0] * 1024] set item [lindex $atomlist($host) 0] set atomlist($host) [lreplace $atomlist($host) 0 0] foreach {atom level type} $item { break } set itemToSize([list $host $atom $level $type]) $bytes } else { set rshStatus($host-$cmd) fileEventFired } }