my $queue_name;
my $text_mode;
+my $debug = 0;
my $debug_children;
sub usage() {
Usage: bex prun [<options>] [[!]<machine-or-class> ...]
Options:
- --debug-children Log stdout and stderr to ./debug.log
+ --debug Log status changes to stderr
+ --debug-children Log stdout and stderr of child processes to ./debug.log
-p, --parallel=<n> Set limit on the number of jobs run in parallel
-q, --queue=<name> Run jobs in the given queue
--text Use plain-text user interface instead of curses
GetOptions(
"q|queue=s" => \$queue_name,
"text!" => \$text_mode,
+ "debug+" => \$debug,
"debug-children!" => \$debug_children,
"p|parallel=i" => \$BEX::Config::max_parallel_jobs,
"help" => \&usage,
}
$_ = <FIFO>;
chomp;
+ print STDERR "<< $_\n" if $debug;
my ($mach, $jid, $stat) = /^! (\S+) (\S+) (\S+)$/;
if (!defined $stat) {
$ui->err("Received invalid status message <$_>");
sub set_host_status($$$) {
my ($ui, $mach, $stat) = @_;
+ print STDERR "H: $mach $stat\n" if $debug;
my $prev_stat = $host_state{$mach};
if (defined $prev_stat) {
$host_cnt{$prev_stat}--;
sub set_job_status($$$$) {
my ($ui, $mach, $jid, $stat) = @_;
+ print STDERR "J: $mach $jid $stat\n" if $debug;
my $prev_stat = $job_state{$mach}{$jid} // 'unknown';
$job_cnt{$mach}{$prev_stat}--;
$job_cnt{'*'}{$prev_stat}--;
my $pri = $state_to_pri{$host_state{$s->{'Host'}}};
my ($best, $besti);
- my $bestpri = -1;
+ my $bestpri = 99;
for my $i (0..$nrows-1) {
my $r = $by_row[$i];
if (!defined $r) {
last;
}
my $rpri = $state_to_pri{$host_state{$r->{'Host'}}};
+ print STDERR "I: ... considering ", $r->{'Host'}, " (pri $rpri, lu ", $r->{'LastUpdate'}, ")\n" if $debug > 1;
next if $rpri > $pri;
if ($rpri < $bestpri ||
$rpri == $bestpri && $r->{'LastUpdate'} < $best->{'LastUpdate'}) {
- # Trick: $best must be defined, as otherwise $bestpri == -1
+ # Trick: $best must be defined, as otherwise $bestpri == 99
$best = $r;
$besti = $i;
$bestpri = $rpri;
if (defined $besti) {
if ($best) {
+ print STDERR "I: Replacing ", $best->{'Host'}, " (pri $bestpri)\n";
delete $best->{'Row'};
}
+ print STDERR "I: Allocated ", $s->{'Host'}, " \@$besti (pri $pri)\n";
$s->{'Row'} = $besti;
$by_row[$besti] = $s;
+ } else {
+ print STDERR "I: No place for ", $s->{'Host'}, " (pri $pri)\n" if $debug;
}
}