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,
"--queue=" . $queue->{'Name'},
$mach,
);
- push @cmd, ">debug.log", "2>&1" if $debug_children;
+ push @cmd, ">>debug.log", "2>&1" if $debug_children;
push @tm, join(" ", @cmd);
system @tm;
!$? or $ui->update($mach, undef, 'INTERR');
}
$_ = <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 ($best) {
- delete $best->{'Row'};
+ 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;
}
- $s->{'Row'} = $besti;
- $by_row[$besti] = $s;
- return $s;
}
sub redraw_slot($) {