Fixed bug #49787: --sql* +DBURL should not erase the table.

Fixed bug #49786: --sqlmaster with --wait.
This commit is contained in:
Ole Tange 2016-12-07 14:33:50 +01:00
parent 6837861a29
commit b1d17c6dd2
4 changed files with 513 additions and 32 deletions

View file

@ -1402,7 +1402,9 @@ sub parse_semaphore {
if(defined $opt::semaphorename) { $Global::semaphore = 1; }
if(defined $opt::fg) { $Global::semaphore = 1; }
if(defined $opt::bg) { $Global::semaphore = 1; }
if(defined $opt::wait) { $Global::semaphore = 1; @ARGV = "true"; }
if(defined $opt::wait and not $opt::sqlmaster) {
$Global::semaphore = 1; @ARGV = "true";
}
if($Global::semaphore) {
if(@opt::a) {
# A semaphore does not take input from neither stdin nor file
@ -9060,6 +9062,7 @@ sub new {
my ($replacecount_ref, $len_ref);
my @command = @$commandref;
my $dummy = '';
my $seq = 1;
# If the first command start with '-' it is probably an option
if($command[0] =~ /^\s*(-\S+)/) {
# Is this really a command in $PATH starting with '-'?
@ -9126,6 +9129,10 @@ sub new {
$Global::noquote = 1;
}
if($opt::sqlmaster and $Global::sql->append()) {
$seq = $Global::sql->max_seq() + 1;
}
return bless {
'unget' => \@unget,
'command' => \@command,
@ -9137,7 +9144,7 @@ sub new {
'size' => undef,
'transfer_files' => $transfer_files,
'return_files' => $return_files,
'seq' => 1,
'seq' => $seq,
}, ref($class) || $class;
}
@ -9276,11 +9283,11 @@ sub get {
$self->{'replacecount'},
$self->{'len'},
);
$cmd_line->populate();
if($opt::sqlworker) {
# Get the sequence number from the SQL table
$cmd_line->set_seq($SQL::next_seq);
}
$cmd_line->populate();
::debug("init","cmd_line->number_of_args ",
$cmd_line->number_of_args(), "\n");
if(not $Global::no_more_input and ($opt::pipe or $opt::pipepart)) {
@ -10117,6 +10124,8 @@ sub new {
my $class = shift;
my $dburl = shift;
$Global::use{"DBI"} ||= eval "use DBI; 1;";
# +DBURL = append to this DBURL
my $append = $dburl=~s/^\+//;
my %options = parse_dburl(get_alias($dburl));
my %driveralias = ("sqlite" => "SQLite",
"sqlite3" => "SQLite",
@ -10149,6 +10158,7 @@ sub new {
'driver' => $driver,
'max_number_of_args' => undef,
'table' => $options{'table'},
'append' => $append,
}, ref($class) || $class;
}
@ -10375,6 +10385,11 @@ sub table {
return $self->{'table'};
}
sub append {
my $self = shift;
return $self->{'append'};
}
sub update {
my $self = shift;
my $stmt = shift;
@ -10407,6 +10422,7 @@ sub set_max_number_of_args {
sub create_table {
my $self = shift;
if($self->append()) { return; }
my $max_number_of_args = shift;
$self->set_max_number_of_args($max_number_of_args);
my $table = $self->table();
@ -10477,7 +10493,6 @@ sub get_record {
sub total_jobs {
my $self = shift;
my @retval;
my $table = $self->table();
my $v = $self->get("SELECT count(*) FROM $table;");
if($v->[0]) {
@ -10487,13 +10502,28 @@ sub total_jobs {
}
}
sub max_seq {
my $self = shift;
my $table = $self->table();
my $v = $self->get("SELECT max(Seq) FROM $table;");
if($v->[0]) {
return $v->[0]->[0];
} else {
::die_bug("SQL::max_seq");
}
}
sub finished {
# Check if there are any jobs left in the SQL table that do not
# have a "real" exitval
my $self = shift;
if($opt::wait) {
my $table = $self->table();
my $rv = $self->get("select Seq,Exitval from $table where Exitval <= -1000 limit 1");
return not $rv->[0];
} else {
return 1;
}
}
package Semaphore;

View file

@ -1869,19 +1869,26 @@ when called with B<--shebang>).
Use B<--sqlmaster> instead.
=item B<--sqlmaster> I<DBURL>
=item B<--sqlmaster> I<DBURL> (alpha testing)
Submit jobs via SQL server. I<DBURL> must point to a table, which will
contain the same information as B<--joblog>, the values from the input
sources (stored in columns V1 .. Vn), and the output (stored in
columns Stdout and Stderr).
The table will be dropped and created with the correct amount of
V-columns.
If I<DBURL> is prepended with '+' GNU B<parallel> assumes the table is
already made with the correct columns and appends the jobs to it.
If I<DBURL> is not prepended with '+' the table will be dropped and
created with the correct amount of V-columns unless
B<--sqlmaster> does not run any jobs, but it creates the values for
the jobs to be run and wait for them to complete. One or more
B<--sqlworker> must be run to actually execute the jobs.
the jobs to be run. One or more B<--sqlworker> must be run to actually
execute the jobs.
If B<--wait> is set, GNU B<parallel> will wait for the jobs to
complete.
The format of a DBURL is:
@ -1901,12 +1908,12 @@ It can also be an alias from ~/.sql/aliases:
:myalias mysql:///mydb/paralleljobs
=item B<--sqlandworker> I<DBURL>
=item B<--sqlandworker> I<DBURL> (alpha testing)
Shorthand for: B<--sqlmaster> I<DBURL> B<--sqlworker> I<DBURL>.
=item B<--sqlworker> I<DBURL>
=item B<--sqlworker> I<DBURL> (alpha testing)
Execute jobs via SQL server. Read the input sources variables from the
table pointed to by I<DBURL>. The I<command> on the command line
@ -2303,11 +2310,11 @@ To see the difference try:
I<mydir> can contain GNU B<parallel>'s replacement strings.
=item B<--wait>
=item B<--wait> (alpha testing)
Wait for all commands to complete.
Implies B<--semaphore>.
Used with B<--semaphore> or B<--sqlmaster>.
See also B<man sem>.

View file

@ -72,6 +72,11 @@ par_sqlandworker_total_jobs() {
p_template echo {#} of '{=1 $_=total_jobs(); =};'
}
par_append() {
parallel --sqlmaster $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
parallel --sqlmaster +$DBURL "$@" sleep .3\;echo ::: {11..15} ::: {A..E} >>$T2;
parallel --sqlworker $DBURL "$@" sleep .3\;echo >$T1
}
export -f $(compgen -A function | egrep 'p_|par_')
# Tested that -j0 in parallel is fastest (up to 15 jobs)

View file

@ -1,3 +1,268 @@
p_wrapper par_append \$MYSQL
par_append $MYSQL Exit=0
par_append $MYSQL Exit=0
par_append $MYSQL Host Command V1 V2 Stdout Stderr
par_append $MYSQL : sleep .3;echo 1 a 1 a 1 a\n
par_append $MYSQL : sleep .3;echo 1 b 1 b 1 b\n
par_append $MYSQL : sleep .3;echo 1 c 1 c 1 c\n
par_append $MYSQL : sleep .3;echo 1 d 1 d 1 d\n
par_append $MYSQL : sleep .3;echo 1 e 1 e 1 e\n
par_append $MYSQL : sleep .3;echo 2 a 2 a 2 a\n
par_append $MYSQL : sleep .3;echo 2 b 2 b 2 b\n
par_append $MYSQL : sleep .3;echo 2 c 2 c 2 c\n
par_append $MYSQL : sleep .3;echo 2 d 2 d 2 d\n
par_append $MYSQL : sleep .3;echo 2 e 2 e 2 e\n
par_append $MYSQL : sleep .3;echo 3 a 3 a 3 a\n
par_append $MYSQL : sleep .3;echo 3 b 3 b 3 b\n
par_append $MYSQL : sleep .3;echo 3 c 3 c 3 c\n
par_append $MYSQL : sleep .3;echo 3 d 3 d 3 d\n
par_append $MYSQL : sleep .3;echo 3 e 3 e 3 e\n
par_append $MYSQL : sleep .3;echo 4 a 4 a 4 a\n
par_append $MYSQL : sleep .3;echo 4 b 4 b 4 b\n
par_append $MYSQL : sleep .3;echo 4 c 4 c 4 c\n
par_append $MYSQL : sleep .3;echo 4 d 4 d 4 d\n
par_append $MYSQL : sleep .3;echo 4 e 4 e 4 e\n
par_append $MYSQL : sleep .3;echo 5 a 5 a 5 a\n
par_append $MYSQL : sleep .3;echo 5 b 5 b 5 b\n
par_append $MYSQL : sleep .3;echo 5 c 5 c 5 c\n
par_append $MYSQL : sleep .3;echo 5 d 5 d 5 d\n
par_append $MYSQL : sleep .3;echo 5 e 5 e 5 e\n
par_append $MYSQL : sleep .3;echo 11 A 11 A 11 A\n
par_append $MYSQL : sleep .3;echo 11 B 11 B 11 B\n
par_append $MYSQL : sleep .3;echo 11 C 11 C 11 C\n
par_append $MYSQL : sleep .3;echo 11 D 11 D 11 D\n
par_append $MYSQL : sleep .3;echo 11 E 11 E 11 E\n
par_append $MYSQL : sleep .3;echo 12 A 12 A 12 A\n
par_append $MYSQL : sleep .3;echo 12 B 12 B 12 B\n
par_append $MYSQL : sleep .3;echo 12 C 12 C 12 C\n
par_append $MYSQL : sleep .3;echo 12 D 12 D 12 D\n
par_append $MYSQL : sleep .3;echo 12 E 12 E 12 E\n
par_append $MYSQL : sleep .3;echo 13 A 13 A 13 A\n
par_append $MYSQL : sleep .3;echo 13 B 13 B 13 B\n
par_append $MYSQL : sleep .3;echo 13 C 13 C 13 C\n
par_append $MYSQL : sleep .3;echo 13 D 13 D 13 D\n
par_append $MYSQL : sleep .3;echo 13 E 13 E 13 E\n
par_append $MYSQL : sleep .3;echo 14 A 14 A 14 A\n
par_append $MYSQL : sleep .3;echo 14 B 14 B 14 B\n
par_append $MYSQL : sleep .3;echo 14 C 14 C 14 C\n
par_append $MYSQL : sleep .3;echo 14 D 14 D 14 D\n
par_append $MYSQL : sleep .3;echo 14 E 14 E 14 E\n
par_append $MYSQL : sleep .3;echo 15 A 15 A 15 A\n
par_append $MYSQL : sleep .3;echo 15 B 15 B 15 B\n
par_append $MYSQL : sleep .3;echo 15 C 15 C 15 C\n
par_append $MYSQL : sleep .3;echo 15 D 15 D 15 D\n
par_append $MYSQL : sleep .3;echo 15 E 15 E 15 E\n
p_wrapper par_append \$PG
par_append $PG Exit=0
par_append $PG Exit=0
par_append $PG host | command | v1 | v2 | stdout | stderr
par_append $PG ------+--------------------+----+----+--------+--------
par_append $PG : | sleep .3;echo 1 a | 1 | a | 1 a +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 1 b | 1 | b | 1 b +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 1 c | 1 | c | 1 c +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 1 d | 1 | d | 1 d +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 1 e | 1 | e | 1 e +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 2 a | 2 | a | 2 a +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 2 b | 2 | b | 2 b +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 2 c | 2 | c | 2 c +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 2 d | 2 | d | 2 d +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 2 e | 2 | e | 2 e +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 3 a | 3 | a | 3 a +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 3 b | 3 | b | 3 b +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 3 c | 3 | c | 3 c +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 3 d | 3 | d | 3 d +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 3 e | 3 | e | 3 e +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 4 a | 4 | a | 4 a +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 4 b | 4 | b | 4 b +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 4 c | 4 | c | 4 c +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 4 d | 4 | d | 4 d +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 4 e | 4 | e | 4 e +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 5 a | 5 | a | 5 a +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 5 b | 5 | b | 5 b +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 5 c | 5 | c | 5 c +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 5 d | 5 | d | 5 d +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 5 e | 5 | e | 5 e +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 11 A | 11 | A | 11 A +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 11 B | 11 | B | 11 B +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 11 C | 11 | C | 11 C +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 11 D | 11 | D | 11 D +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 11 E | 11 | E | 11 E +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 12 A | 12 | A | 12 A +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 12 B | 12 | B | 12 B +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 12 C | 12 | C | 12 C +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 12 D | 12 | D | 12 D +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 12 E | 12 | E | 12 E +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 13 A | 13 | A | 13 A +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 13 B | 13 | B | 13 B +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 13 C | 13 | C | 13 C +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 13 D | 13 | D | 13 D +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 13 E | 13 | E | 13 E +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 14 A | 14 | A | 14 A +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 14 B | 14 | B | 14 B +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 14 C | 14 | C | 14 C +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 14 D | 14 | D | 14 D +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 14 E | 14 | E | 14 E +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 15 A | 15 | A | 15 A +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 15 B | 15 | B | 15 B +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 15 C | 15 | C | 15 C +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 15 D | 15 | D | 15 D +|
par_append $PG | | | | |
par_append $PG : | sleep .3;echo 15 E | 15 | E | 15 E +|
par_append $PG | | | | |
par_append $PG (50 rows)
par_append $PG
p_wrapper par_append \$SQLITE
par_append $SQLITE Exit=0
par_append $SQLITE Exit=0
par_append $SQLITE Host|Command|V1|V2|Stdout|Stderr
par_append $SQLITE :|sleep .3;echo 1 a|1|a|1 a
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 1 b|1|b|1 b
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 1 c|1|c|1 c
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 1 d|1|d|1 d
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 1 e|1|e|1 e
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 2 a|2|a|2 a
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 2 b|2|b|2 b
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 2 c|2|c|2 c
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 2 d|2|d|2 d
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 2 e|2|e|2 e
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 3 a|3|a|3 a
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 3 b|3|b|3 b
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 3 c|3|c|3 c
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 3 d|3|d|3 d
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 3 e|3|e|3 e
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 4 a|4|a|4 a
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 4 b|4|b|4 b
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 4 c|4|c|4 c
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 4 d|4|d|4 d
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 4 e|4|e|4 e
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 5 a|5|a|5 a
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 5 b|5|b|5 b
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 5 c|5|c|5 c
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 5 d|5|d|5 d
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 5 e|5|e|5 e
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 11 A|11|A|11 A
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 11 B|11|B|11 B
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 11 C|11|C|11 C
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 11 D|11|D|11 D
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 11 E|11|E|11 E
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 12 A|12|A|12 A
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 12 B|12|B|12 B
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 12 C|12|C|12 C
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 12 D|12|D|12 D
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 12 E|12|E|12 E
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 13 A|13|A|13 A
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 13 B|13|B|13 B
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 13 C|13|C|13 C
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 13 D|13|D|13 D
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 13 E|13|E|13 E
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 14 A|14|A|14 A
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 14 B|14|B|14 B
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 14 C|14|C|14 C
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 14 D|14|D|14 D
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 14 E|14|E|14 E
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 15 A|15|A|15 A
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 15 B|15|B|15 B
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 15 C|15|C|15 C
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 15 D|15|D|15 D
par_append $SQLITE |
par_append $SQLITE :|sleep .3;echo 15 E|15|E|15 E
par_append $SQLITE |
p_wrapper par_sqlandworker \$MYSQL
par_sqlandworker $MYSQL Exit=0
par_sqlandworker $MYSQL Exit=0
@ -27,8 +292,6 @@ par_sqlandworker $MYSQL : sleep .3;echo 5 b 5 b 5 b\n
par_sqlandworker $MYSQL : sleep .3;echo 5 c 5 c 5 c\n
par_sqlandworker $MYSQL : sleep .3;echo 5 d 5 d 5 d\n
par_sqlandworker $MYSQL : sleep .3;echo 5 e 5 e 5 e\n
par_sqlandworker $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker \$PG
par_sqlandworker $PG Exit=0
par_sqlandworker $PG Exit=0
@ -169,8 +432,6 @@ par_sqlandworker_compress_linebuffer_tag $MYSQL : sleep .3;echo 5 b 5 b NULL NUL
par_sqlandworker_compress_linebuffer_tag $MYSQL : sleep .3;echo 5 c 5 c NULL NULL
par_sqlandworker_compress_linebuffer_tag $MYSQL : sleep .3;echo 5 d 5 d NULL NULL
par_sqlandworker_compress_linebuffer_tag $MYSQL : sleep .3;echo 5 e 5 e NULL NULL
par_sqlandworker_compress_linebuffer_tag $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_compress_linebuffer_tag $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_compress_linebuffer_tag \$PG
par_sqlandworker_compress_linebuffer_tag $PG Exit=0
par_sqlandworker_compress_linebuffer_tag $PG Exit=0
@ -261,8 +522,6 @@ par_sqlandworker_linebuffer $MYSQL : sleep .3;echo 5 b 5 b 5 b\n
par_sqlandworker_linebuffer $MYSQL : sleep .3;echo 5 c 5 c 5 c\n
par_sqlandworker_linebuffer $MYSQL : sleep .3;echo 5 d 5 d 5 d\n
par_sqlandworker_linebuffer $MYSQL : sleep .3;echo 5 e 5 e 5 e\n
par_sqlandworker_linebuffer $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_linebuffer $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_linebuffer \$PG
par_sqlandworker_linebuffer $PG Exit=0
par_sqlandworker_linebuffer $PG Exit=0
@ -403,8 +662,6 @@ par_sqlandworker_linebuffer_tag $MYSQL : sleep .3;echo 5 b 5 b 5 b\t5 b\n
par_sqlandworker_linebuffer_tag $MYSQL : sleep .3;echo 5 c 5 c 5 c\t5 c\n
par_sqlandworker_linebuffer_tag $MYSQL : sleep .3;echo 5 d 5 d 5 d\t5 d\n
par_sqlandworker_linebuffer_tag $MYSQL : sleep .3;echo 5 e 5 e 5 e\t5 e\n
par_sqlandworker_linebuffer_tag $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_linebuffer_tag $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_linebuffer_tag \$PG
par_sqlandworker_linebuffer_tag $PG Exit=0
par_sqlandworker_linebuffer_tag $PG Exit=0
@ -545,8 +802,6 @@ par_sqlandworker_lo $MYSQL lo sleep .3;echo 5 b 5 b 5 b\n
par_sqlandworker_lo $MYSQL lo sleep .3;echo 5 c 5 c 5 c\n
par_sqlandworker_lo $MYSQL lo sleep .3;echo 5 d 5 d 5 d\n
par_sqlandworker_lo $MYSQL lo sleep .3;echo 5 e 5 e 5 e\n
par_sqlandworker_lo $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_lo $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_lo \$PG
par_sqlandworker_lo $PG Exit=0
par_sqlandworker_lo $PG Exit=0
@ -687,8 +942,6 @@ par_sqlandworker_results $MYSQL : sleep .3;echo 5 b 5 b /tmp/out--sql/1/5/2/b/st
par_sqlandworker_results $MYSQL : sleep .3;echo 5 c 5 c /tmp/out--sql/1/5/2/c/stdout /tmp/out--sql/1/5/2/c/stderr
par_sqlandworker_results $MYSQL : sleep .3;echo 5 d 5 d /tmp/out--sql/1/5/2/d/stdout /tmp/out--sql/1/5/2/d/stderr
par_sqlandworker_results $MYSQL : sleep .3;echo 5 e 5 e /tmp/out--sql/1/5/2/e/stdout /tmp/out--sql/1/5/2/e/stderr
par_sqlandworker_results $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_results $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_results \$PG
par_sqlandworker_results $PG Exit=0
par_sqlandworker_results $PG Exit=0
@ -779,8 +1032,6 @@ par_sqlandworker_tag $MYSQL : sleep .3;echo 5 b 5 b 5 b\t5 b\n
par_sqlandworker_tag $MYSQL : sleep .3;echo 5 c 5 c 5 c\t5 c\n
par_sqlandworker_tag $MYSQL : sleep .3;echo 5 d 5 d 5 d\t5 d\n
par_sqlandworker_tag $MYSQL : sleep .3;echo 5 e 5 e 5 e\t5 e\n
par_sqlandworker_tag $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_tag $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_tag \$PG
par_sqlandworker_tag $PG Exit=0
par_sqlandworker_tag $PG Exit=0
@ -892,6 +1143,196 @@ par_sqlandworker_tag $SQLITE :|sleep .3;echo 5 d|5|d|5 d 5 d
par_sqlandworker_tag $SQLITE |
par_sqlandworker_tag $SQLITE :|sleep .3;echo 5 e|5|e|5 e 5 e
par_sqlandworker_tag $SQLITE |
p_wrapper par_sqlandworker_total_jobs \$MYSQL
par_sqlandworker_total_jobs $MYSQL Exit=0
par_sqlandworker_total_jobs $MYSQL Exit=0
par_sqlandworker_total_jobs $MYSQL Host Command V1 V2 Stdout Stderr
par_sqlandworker_total_jobs $MYSQL : echo 1 of 25; sleep .3;echo 1 a 1 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 2 of 25; sleep .3;echo 1 b 2 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 3 of 25; sleep .3;echo 1 c 3 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 4 of 25; sleep .3;echo 1 d 4 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 5 of 25; sleep .3;echo 1 e 5 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 6 of 25; sleep .3;echo 2 a 6 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 7 of 25; sleep .3;echo 2 b 7 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 8 of 25; sleep .3;echo 2 c 8 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 9 of 25; sleep .3;echo 2 d 9 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 10 of 25; sleep .3;echo 2 e 10 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 11 of 25; sleep .3;echo 3 a 11 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 12 of 25; sleep .3;echo 3 b 12 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 13 of 25; sleep .3;echo 3 c 13 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 14 of 25; sleep .3;echo 3 d 14 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 15 of 25; sleep .3;echo 3 e 15 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 16 of 25; sleep .3;echo 4 a 16 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 17 of 25; sleep .3;echo 4 b 17 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 18 of 25; sleep .3;echo 4 c 18 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 19 of 25; sleep .3;echo 4 d 19 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 20 of 25; sleep .3;echo 4 e 20 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 21 of 25; sleep .3;echo 5 a 21 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 22 of 25; sleep .3;echo 5 b 22 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 23 of 25; sleep .3;echo 5 c 23 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 24 of 25; sleep .3;echo 5 d 24 of 25\n\n
par_sqlandworker_total_jobs $MYSQL : echo 25 of 25; sleep .3;echo 5 e 25 of 25\n\n
p_wrapper par_sqlandworker_total_jobs \$PG
par_sqlandworker_total_jobs $PG Exit=0
par_sqlandworker_total_jobs $PG Exit=0
par_sqlandworker_total_jobs $PG host | command | v1 | v2 | stdout | stderr
par_sqlandworker_total_jobs $PG ------+------------------------------+----+----+----------+--------
par_sqlandworker_total_jobs $PG : | echo 1 of 25; sleep .3;echo | 1 | a | 1 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 2 of 25; sleep .3;echo | 1 | b | 2 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 3 of 25; sleep .3;echo | 1 | c | 3 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 4 of 25; sleep .3;echo | 1 | d | 4 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 5 of 25; sleep .3;echo | 1 | e | 5 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 6 of 25; sleep .3;echo | 2 | a | 6 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 7 of 25; sleep .3;echo | 2 | b | 7 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 8 of 25; sleep .3;echo | 2 | c | 8 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 9 of 25; sleep .3;echo | 2 | d | 9 of 25 +|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 10 of 25; sleep .3;echo | 2 | e | 10 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 11 of 25; sleep .3;echo | 3 | a | 11 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 12 of 25; sleep .3;echo | 3 | b | 12 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 13 of 25; sleep .3;echo | 3 | c | 13 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 14 of 25; sleep .3;echo | 3 | d | 14 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 15 of 25; sleep .3;echo | 3 | e | 15 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 16 of 25; sleep .3;echo | 4 | a | 16 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 17 of 25; sleep .3;echo | 4 | b | 17 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 18 of 25; sleep .3;echo | 4 | c | 18 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 19 of 25; sleep .3;echo | 4 | d | 19 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 20 of 25; sleep .3;echo | 4 | e | 20 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 21 of 25; sleep .3;echo | 5 | a | 21 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 22 of 25; sleep .3;echo | 5 | b | 22 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 23 of 25; sleep .3;echo | 5 | c | 23 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 24 of 25; sleep .3;echo | 5 | d | 24 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG : | echo 25 of 25; sleep .3;echo | 5 | e | 25 of 25+|
par_sqlandworker_total_jobs $PG | | | | +|
par_sqlandworker_total_jobs $PG | | | | |
par_sqlandworker_total_jobs $PG (25 rows)
par_sqlandworker_total_jobs $PG
p_wrapper par_sqlandworker_total_jobs \$SQLITE
par_sqlandworker_total_jobs $SQLITE Exit=0
par_sqlandworker_total_jobs $SQLITE Exit=0
par_sqlandworker_total_jobs $SQLITE Host|Command|V1|V2|Stdout|Stderr
par_sqlandworker_total_jobs $SQLITE :|echo 1 of 25; sleep .3;echo|1|a|1 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 2 of 25; sleep .3;echo|1|b|2 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 3 of 25; sleep .3;echo|1|c|3 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 4 of 25; sleep .3;echo|1|d|4 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 5 of 25; sleep .3;echo|1|e|5 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 6 of 25; sleep .3;echo|2|a|6 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 7 of 25; sleep .3;echo|2|b|7 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 8 of 25; sleep .3;echo|2|c|8 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 9 of 25; sleep .3;echo|2|d|9 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 10 of 25; sleep .3;echo|2|e|10 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 11 of 25; sleep .3;echo|3|a|11 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 12 of 25; sleep .3;echo|3|b|12 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 13 of 25; sleep .3;echo|3|c|13 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 14 of 25; sleep .3;echo|3|d|14 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 15 of 25; sleep .3;echo|3|e|15 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 16 of 25; sleep .3;echo|4|a|16 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 17 of 25; sleep .3;echo|4|b|17 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 18 of 25; sleep .3;echo|4|c|18 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 19 of 25; sleep .3;echo|4|d|19 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 20 of 25; sleep .3;echo|4|e|20 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 21 of 25; sleep .3;echo|5|a|21 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 22 of 25; sleep .3;echo|5|b|22 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 23 of 25; sleep .3;echo|5|c|23 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 24 of 25; sleep .3;echo|5|d|24 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE :|echo 25 of 25; sleep .3;echo|5|e|25 of 25
par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE |
p_wrapper par_sqlandworker_unbuffer \$MYSQL
par_sqlandworker_unbuffer $MYSQL Exit=0
par_sqlandworker_unbuffer $MYSQL Exit=0
@ -921,8 +1362,6 @@ par_sqlandworker_unbuffer $MYSQL : sleep .3;echo 5 b 5 b NULL NULL
par_sqlandworker_unbuffer $MYSQL : sleep .3;echo 5 c 5 c NULL NULL
par_sqlandworker_unbuffer $MYSQL : sleep .3;echo 5 d 5 d NULL NULL
par_sqlandworker_unbuffer $MYSQL : sleep .3;echo 5 e 5 e NULL NULL
par_sqlandworker_unbuffer $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
par_sqlandworker_unbuffer $MYSQL mysql: [Warning] Using a password on the command line interface can be insecure.
p_wrapper par_sqlandworker_unbuffer \$PG
par_sqlandworker_unbuffer $PG Exit=0
par_sqlandworker_unbuffer $PG Exit=0