[padb-devel] [padb] r150 committed - Convert the rank handling code (-r) to use ranges everywhere. Now...
codesite-noreply at google.com
codesite-noreply at google.com
Tue Aug 25 11:59:42 BST 2009
Revision: 150
Author: apittman
Date: Tue Aug 25 03:59:14 2009
Log: Convert the rank handling code (-r) to use ranges everywhere. Now
padb can take rank ranges on the command line.
http://code.google.com/p/padb/source/detail?r=150
Modified:
/trunk/src/padb
=======================================
--- /trunk/src/padb Tue Aug 25 03:10:00 2009
+++ /trunk/src/padb Tue Aug 25 03:59:14 2009
@@ -552,7 +552,8 @@
###############################################################################
my $user = getpwuid($<);
-my @ranks;
+my $rank_rng;
+
my @target_groups;
my $all;
my $any;
@@ -620,10 +621,12 @@
Getopt::Long::Configure("bundling");
my $debugflag;
+ my @ranks;
+
my %optionhash = (
"verbose|v+" => \$conf{verbose},
"user|u=s" => \$user,
- "rank|r=i" => \@ranks,
+ "rank|r=s" => \@ranks,
"group-id=s" => \@target_groups,
"help|h" => \&usage,
"all|a" => \$all,
@@ -689,6 +692,14 @@
$mode = $arg;
$have_allfns_option++;
}
+
+ if (@ranks) {
+ $rank_rng = rng_convert_from_user( shift(@ranks) );
+
+ foreach my $rank (@ranks) {
+ rng_merge( $rank_rng, rng_convert_from_user($rank) );
+ }
+ }
# Put the args in a hash so that they can be referenced by name.
if ( defined $mode and defined $allfns{$mode}{secondary} ) {
@@ -1489,9 +1500,10 @@
if ( $conf{stats_short} ) {
my $new;
- if ( $#ranks != -1 ) {
+ if ( defined $rank_rng ) {
my @ret;
- foreach my $rank (@ranks) {
+ my $rng = rng_dup($rank_rng);
+ while ( defined( my $rank = rng_shift($rng) ) ) {
if ( defined $d->[$rank] ) {
push( @ret, summarise( $d->[$rank] ) );
} else {
@@ -1508,8 +1520,9 @@
return;
}
- if ( $#ranks != -1 ) {
- foreach my $rank (@ranks) {
+ if ( defined $rank_rng ) {
+ my $rng = rng_dup($rank_rng);
+ while ( defined( my $rank = rng_shift($rng) ) ) {
if ( defined $d->[$rank] ) {
print show_name $conf{stats_name}, $d->[$rank];
} else {
@@ -3349,8 +3362,8 @@
# XXX: Should only send this list over if it makes sense, for example
# the deadlock code only works when targetting all ranks.
- if ( $#ranks != -1 ) {
- @{ $req->{ranks} } = @ranks;
+ if ( defined $rank_rng ) {
+ $req->{ranks} = $rank_rng;
}
if ( defined $cmd->{out_format} ) {
@@ -3723,6 +3736,8 @@
splice( @{$rg}, $idx + 1, 1 );
}
return;
+ } elsif ( $value >= $part->{l} and $value <= $part->{u} ) {
+ confess("Failed to add value to range (Value already in
range)");
}
$idx++;
}
@@ -3739,6 +3754,11 @@
}
return;
}
+
+sub rng_dup {
+ my ($rg) = @_;
+ return dclone($rg);
+}
sub create_local_port {
my ($range) = @_;
@@ -6819,11 +6839,13 @@
# If supplied with a rank list then use it now to generate a list of
# processes to inspect.
if ( exists( $cmd->{ranks} ) ) {
- my @ranks = @{ $cmd->{ranks} };
- foreach my $proc ( @{ $confInner{all_pids} } ) {
- my $vp = $proc->{vp};
- my $pid = $proc->{pid};
- foreach my $rank (@ranks) {
+ my $rng = rng_dup( $cmd->{ranks} );
+
+ # Loop over ranks first as there are potentially more of them.
+ while ( defined( my $rank = rng_shift($rng) ) ) {
+ foreach my $proc ( @{ $confInner{all_pids} } ) {
+ my $vp = $proc->{vp};
+ my $pid = $proc->{pid};
if ( $vp == $rank ) {
push @{$pid_list}, $proc;
}
More information about the padb-devel
mailing list