src/parallel: sshlogin now passes unittest.

Number of jobs to run on remote hosts is calculated wrongly.
This commit is contained in:
Ole Tange 2010-05-16 15:46:32 +02:00
parent c027f36ccf
commit d26f62a363
6 changed files with 83 additions and 6 deletions

View file

@ -351,9 +351,9 @@ operating system and the B<-s> option. Pipe the input from /dev/null
to do anything. to do anything.
=item B<-S> I<[ncpu/]sshlogin[,[ncpu/]sshlogin[,...]]> (not implemented) =item B<-S> I<[ncpu/]sshlogin[,[ncpu/]sshlogin[,...]]> (beta testing)
=item B<--sshlogin> I<[ncpu/]sshlogin[,[ncpu/]sshlogin[,...]]> (not implemented) =item B<--sshlogin> I<[ncpu/]sshlogin[,[ncpu/]sshlogin[,...]]> (beta testing)
Distribute jobs to remote servers. The jobs will be run on a list of Distribute jobs to remote servers. The jobs will be run on a list of
remote servers. GNU B<parallel> will determine the number of CPU cores on remote servers. GNU B<parallel> will determine the number of CPU cores on
@ -376,7 +376,7 @@ For examples: see B<--sshloginfile>.
The remote host must have GNU B<parallel> installed. The remote host must have GNU B<parallel> installed.
=item B<--sshloginfile> I<filename> (not implemented) =item B<--sshloginfile> I<filename> (beta testing)
File with sshlogins. The file consists of sshlogins on separate File with sshlogins. The file consists of sshlogins on separate
lines. Empty lines and lines starting with '#' are ignored. Example: lines. Empty lines and lines starting with '#' are ignored. Example:
@ -1403,7 +1403,8 @@ sub shell_quote {
$arg =~ s/([\002-\011\013-\032])/\\$1/g; $arg =~ s/([\002-\011\013-\032])/\\$1/g;
$arg =~ s/([\n])/'\n'/g; # filenames with '\n' is quoted using \' $arg =~ s/([\n])/'\n'/g; # filenames with '\n' is quoted using \'
} }
return (@strings); #return wantarray ? @strings : "@strings";
return @strings;
} }
# Replace foo{}bar or foo{.}bar # Replace foo{}bar or foo{.}bar
@ -1708,6 +1709,16 @@ sub init_run_jobs {
$SIG{TERM} = \&StartNoNewJobs; $SIG{TERM} = \&StartNoNewJobs;
} }
sub next_command_line_with_sshlogin {
my $sshlogin = shift;
my $next_command_line = next_command_line();
if($next_command_line and $sshlogin ne ":") {
return "ssh $sshlogin ".join("",shell_quote($next_command_line));
} else {
return $next_command_line;
}
}
sub next_command_line { sub next_command_line {
my $cmd_line; my $cmd_line;
if(@Global::unget_next_command_line) { if(@Global::unget_next_command_line) {
@ -1791,7 +1802,7 @@ sub start_another_job {
# Do we have enough file handles to start another job? # Do we have enough file handles to start another job?
my $sshlogin = shift; my $sshlogin = shift;
if(enough_file_handles()) { if(enough_file_handles()) {
my $command = next_command_line(); my $command = next_command_line_with_sshlogin($sshlogin);
if(defined $command) { if(defined $command) {
debug("Command to run on '$sshlogin': $command\n"); debug("Command to run on '$sshlogin': $command\n");
my %jobinfo = start_job($command,$sshlogin); my %jobinfo = start_job($command,$sshlogin);

View file

@ -66,6 +66,9 @@ a1.gifb1c1 a 2.gifb 2c 2 a 3.gifb 3c 3 a 4.gifb 4c 4 a 5.gifb 5c 5 a 6.gifb 6c 6
10 10
7 7
9 9
9
9
9
'a' 'a'
'a' 'a'
begin begin

View file

@ -0,0 +1,53 @@
1
2
3
sleep 1; echo 1
1
sleep 1; echo 2
2
ssh nlv.pi.dk sleep\ 1\;\ echo\ 3
3
ssh nlv.pi.dk sleep\ 1\;\ echo\ \\\>/tmp/fire
>/tmp/fire
sleep 1; echo 5
5
sleep 1; echo 6
6
ssh nlv.pi.dk sleep\ 1\;\ echo\ 7
7
ssh nlv.pi.dk sleep\ 1\;\ echo\ 8
8
sleep 1; echo 9
9
sleep 1; echo 10
10
sleep 1; hostname; echo 1
alpha
1
sleep 1; hostname; echo 2
alpha
2
ssh nlv.pi.dk sleep\ 1\;\ hostname\;\ echo\ 3
nlv.pi.dk
3
ssh nlv.pi.dk sleep\ 1\;\ hostname\;\ echo\ \\\>/tmp/fire
nlv.pi.dk
>/tmp/fire
sleep 1; hostname; echo 5
alpha
5
sleep 1; hostname; echo 6
alpha
6
ssh nlv.pi.dk sleep\ 1\;\ hostname\;\ echo\ 7
nlv.pi.dk
7
ssh nlv.pi.dk sleep\ 1\;\ hostname\;\ echo\ 8
nlv.pi.dk
8
sleep 1; hostname; echo 9
alpha
9
sleep 1; hostname; echo 10
alpha
10

View file

@ -34,6 +34,9 @@ seq 1 60000 | perl -pe 's/$/.gif\n/' | $PAR -kX echo a{}b{.}c{.} | wc -l
seq 1 60000 | perl -pe 's/$/.gif\n/' | $PAR -kX echo a{}b{.}c | wc -l seq 1 60000 | perl -pe 's/$/.gif\n/' | $PAR -kX echo a{}b{.}c | wc -l
seq 1 60000 | perl -pe 's/$/.gif\n/' | $PAR -kX echo a{}b | wc -l seq 1 60000 | perl -pe 's/$/.gif\n/' | $PAR -kX echo a{}b | wc -l
seq 1 60000 | $PAR -I :: -X echo a::b::c:: | wc -l seq 1 60000 | $PAR -I :: -X echo a::b::c:: | wc -l
seq 1 60000 | $PAR -I '<>' -X echo 'a<>b<>c<>' | wc -l
seq 1 60000 | $PAR -I '<' -X echo 'a<b<c<' | wc -l
seq 1 60000 | $PAR -I '>' -X echo 'a>b>c>' | wc -l
echo a | $PAR -qX echo "'"{.}"' " echo a | $PAR -qX echo "'"{.}"' "
echo a | $PAR -qX echo "'{.}'" echo a | $PAR -qX echo "'{.}'"
(echo "sleep 3; echo begin"; seq 1 30 | $PAR -kq echo "sleep 1; echo {.}"; echo "echo end") \ (echo "sleep 3; echo begin"; seq 1 30 | $PAR -kq echo "sleep 1; echo {.}"; echo "echo end") \

View file

@ -4,4 +4,8 @@ PAR=parallel
# Test sshlogin # Test sshlogin
echo localhost >/tmp/localhost echo localhost >/tmp/localhost
seq 1 3 | $PAR --sshlogin 8/al -S 7/"-l eiipe fod",: --sshloginfile /tmp/localhost echo seq 1 3 | $PAR -k --sshlogin 8/nlv.pi.dk -S 7/"-l tange nlv.pi.dk",: --sshloginfile /tmp/localhost echo
(seq 1 3;echo '>/tmp/fire';seq 5 10) | parallel -k -v -j+0 -S nlv.pi.dk,: "sleep 1; echo {}"
# Check number of CPUs being respected
(seq 1 3;echo '>/tmp/fire';seq 5 10) | parallel -k -v -j+0 -S 1/:,9/nlv.pi.dk "sleep 1; hostname; echo {}"

View file

@ -66,6 +66,9 @@ a1.gifb1c1 a 2.gifb 2c 2 a 3.gifb 3c 3 a 4.gifb 4c 4 a 5.gifb 5c 5 a 6.gifb 6c 6
10 10
7 7
9 9
9
9
9
'a' 'a'
'a' 'a'
begin begin