From b1d17c6dd2e98e5722623ceb26c0a2d0b437611a Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Wed, 7 Dec 2016 14:33:50 +0100 Subject: [PATCH] Fixed bug #49787: --sql* +DBURL should not erase the table. Fixed bug #49786: --sqlmaster with --wait. --- src/parallel | 44 +- src/parallel.pod | 25 +- testsuite/tests-to-run/parallel-local-sql.sh | 5 + testsuite/wanted-results/parallel-local-sql | 471 ++++++++++++++++++- 4 files changed, 513 insertions(+), 32 deletions(-) diff --git a/src/parallel b/src/parallel index 5ea4800e..fb8d88db 100755 --- a/src/parallel +++ b/src/parallel @@ -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; - my $table = $self->table(); - my $rv = $self->get("select Seq,Exitval from $table where Exitval <= -1000 limit 1"); - return not $rv->[0]; + 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; diff --git a/src/parallel.pod b/src/parallel.pod index d2d327dc..916ccdc5 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -1869,19 +1869,26 @@ when called with B<--shebang>). Use B<--sqlmaster> instead. -=item B<--sqlmaster> I +=item B<--sqlmaster> I (alpha testing) Submit jobs via SQL server. I 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 is prepended with '+' GNU B assumes the table is +already made with the correct columns and appends the jobs to it. + +If I 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 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 +=item B<--sqlandworker> I (alpha testing) Shorthand for: B<--sqlmaster> I B<--sqlworker> I. -=item B<--sqlworker> I +=item B<--sqlworker> I (alpha testing) Execute jobs via SQL server. Read the input sources variables from the table pointed to by I. The I on the command line @@ -2303,11 +2310,11 @@ To see the difference try: I can contain GNU B'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. diff --git a/testsuite/tests-to-run/parallel-local-sql.sh b/testsuite/tests-to-run/parallel-local-sql.sh index fb4101ed..524252a0 100755 --- a/testsuite/tests-to-run/parallel-local-sql.sh +++ b/testsuite/tests-to-run/parallel-local-sql.sh @@ -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) diff --git a/testsuite/wanted-results/parallel-local-sql b/testsuite/wanted-results/parallel-local-sql index f5a76957..8b038b25 100644 --- a/testsuite/wanted-results/parallel-local-sql +++ b/testsuite/wanted-results/parallel-local-sql @@ -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