[padb-devel] [padb commit] r45 - Be more intelegent when -a is given and more
codesite-noreply at google.com
codesite-noreply at google.com
Thu Jun 11 16:34:03 BST 2009
Author: apittman
Date: Thu Jun 11 08:33:17 2009
New Revision: 45
Modified:
trunk/src/padb
Log:
Be more intelegent when -a is given and more
than one resource manager is detected. If only
one resource manager has active jobs then target
that resource manager.
Modified: trunk/src/padb
==============================================================================
--- trunk/src/padb (original)
+++ trunk/src/padb Thu Jun 11 08:33:17 2009
@@ -2552,18 +2552,24 @@
#
###############################################################################
+sub setup_rmgr {
+ $conf{"rmgr"} = shift;
+
+ # Now setup the variable for the rest of the program.
+ if ( defined $rmgr{ $conf{"rmgr"} }{inner_rmgr} ) {
+ $cinner{rmgr} = $rmgr{ $conf{"rmgr"} }{inner_rmgr};
+ } else {
+ $cinner{rmgr} = $conf{"rmgr"};
+ }
+}
+
sub find_rmgr {
# If it's been set on the command line and it's valid then just use what
we are given.
# Don't do any sanity checks here to cope with non-default installs.
- my $r = $conf{"rmgr"};
-
- if ( defined $rmgr{$r} ) {
- if ( defined $rmgr{ $conf{"rmgr"} }{inner_rmgr} ) {
- $cinner{rmgr} = $rmgr{ $conf{"rmgr"} }{inner_rmgr};
- }
-
+ if ( defined $rmgr{ $conf{"rmgr"} } ) {
+ setup_rmgr( $conf{"rmgr"} );
return;
}
@@ -2589,13 +2595,78 @@
exit(1);
}
- # Now setup the variable for the test of the program.
- $conf{"rmgr"} = $ok[0];
- if ( defined $rmgr{ $conf{"rmgr"} }{inner_rmgr} ) {
- $cinner{rmgr} = $rmgr{ $conf{"rmgr"} }{inner_rmgr};
- } else {
- $cinner{rmgr} = $conf{"rmgr"};
+ setup_rmgr( $ok[0] );
+}
+
+# Find any active resource manager, that is --any or --all
+# have been passed on the command line so look for any resource
+# manager that have active jobs, if there is one active resource
+# manager use that one, if there are zero or many exit with an
+# error.
+sub find_any_rmgr {
+
+# If it's been set on the command line and it's valid then just use what
we are given.
+# Don't do any sanity checks here to cope with non-default installs.
+
+ if ( defined $rmgr{ $conf{"rmgr"} } ) {
+ setup_rmgr( $conf{"rmgr"} );
+ return;
+ }
+
+ if ( $conf{"rmgr"} ne "auto" ) {
+ printf("Error, resource manager \"$conf{rmgr}\" not supported\n");
+ exit(1);
+ }
+
+ my @installed;
+ foreach my $res ( sort( keys %rmgr ) ) {
+ next unless defined $rmgr{$res}{is_installed};
+ if ( $rmgr{$res}{is_installed}() ) {
+ push @installed, $res;
+
+ }
+ }
+
+ # One resource manager is installed, good.
+ if ( $#installed == 0 ) {
+ setup_rmgr( $installed[0] );
+ return;
+ }
+
+ # No resource managers are installed, bad.
+ if ( $#installed == -1 ) {
+ printf(
+"Error, multiple resource managers detected, use -Ormgr=<resource
manager>\n"
+ );
+ push @installed, "local-fd";
+ push @installed, "local";
+ printf("@installed\n");
+ exit(1);
+ }
+
+ my @active;
+ foreach my $res (@installed) {
+ my @jobs = $rmgr{$res}{get_active_jobs}($user);
+ if ( $#jobs != -1 ) {
+ push @active, $res;
+ }
+ }
+
+ # Only one resource manager has active jobs, let's use it.
+ if ( $#active == 0 ) {
+ setup_rmgr( $active[0] );
+ return;
}
+
+ # Multiple resource managers are installed and have jobs,
+ # bouce back to the user to specify which one they want.
+ printf(
+"Error, multiple active resource managers detected, use -Ormgr=<resource
manager>\n"
+ );
+ push @installed, "local-fd";
+ push @installed, "local";
+ printf("@installed\n");
+ exit(1);
}
sub get_all_jobids {
@@ -3325,8 +3396,6 @@
exit(0);
}
- find_rmgr();
-
if ($core_stack) {
if ( not defined $core_name or not defined $exe_name ) {
printf(
@@ -3347,6 +3416,8 @@
if ($full_report) {
+ find_rmgr();
+
if ( not job_is_running($full_report) ) {
printf( STDERR
"Job $full_report is not active, use --show-jobs to see active jobs\n"
@@ -3392,12 +3463,14 @@
}
if ($show_jobs) {
+ find_rmgr();
my @jobids = get_all_jobids($user);
print("@jobids\n");
exit(0);
}
if ($local_stats) {
+
if ($watch) {
while (1) {
maybe_clear_screen();
@@ -3488,6 +3561,8 @@
if ( $any or $all ) {
+ find_any_rmgr();
+
@jobids = get_all_jobids($user);
printf( "Active jobs (%d) are @jobids\n", $#jobids + 1 )
if $conf{"verbose"};
@@ -3500,6 +3575,8 @@
exit 1;
}
} else {
+ find_rmgr();
+
foreach my $jobid (@ARGV) {
if ( job_is_running($jobid) ) {
push @jobids, $jobid;
More information about the padb-devel
mailing list