Fixed bug #47086: [PATCH] Initialize total_completed from joblog.

This commit is contained in:
Ole Tange 2016-02-19 22:15:08 +01:00
parent 794315c676
commit b1447b6bad
8 changed files with 77 additions and 36 deletions

View file

@ -213,9 +213,9 @@ cc:Tim Cuthbertson <tim3d.junk@gmail.com>,
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>, Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
Jesse Alama <jesse.alama@gmail.com> Jesse Alama <jesse.alama@gmail.com>
Subject: GNU Parallel 20160122 ('') released <<[stable]>> Subject: GNU Parallel 20160222 ('N977GA') released <<[stable]>>
GNU Parallel 20160122 ('') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/ GNU Parallel 20160222 ('N977GA') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
<<No new functionality was introduced so this is a good candidate for a stable release.>> <<No new functionality was introduced so this is a good candidate for a stable release.>>
@ -243,6 +243,8 @@ for Big Data Applications https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumb
* <<Citation needed: Introspecting for RSA Key Material to Assist Intrusion Detection http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=7331177&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D7331177>> * <<Citation needed: Introspecting for RSA Key Material to Assist Intrusion Detection http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=7331177&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D7331177>>
* Daily Quick Tip: parallel https://medium.com/@jacaetevha/daily-quick-tip-parallel-8772435f6582
* Downloading a list of URLs http://blog.gypsydave5.com/2016/02/04/xargs-and-curl/ * Downloading a list of URLs http://blog.gypsydave5.com/2016/02/04/xargs-and-curl/
* Using GNU Parallel and ImageMagick for Conversions http://blog.fractalcomic.com/tutorials/using-gnu-parallel-and-imagemagick-for-conversions/ * Using GNU Parallel and ImageMagick for Conversions http://blog.fractalcomic.com/tutorials/using-gnu-parallel-and-imagemagick-for-conversions/

View file

@ -1182,6 +1182,7 @@ sub init_globals {
$Global::debug = 0; $Global::debug = 0;
$Global::verbose = 0; $Global::verbose = 0;
$Global::quoting = 0; $Global::quoting = 0;
$Global::total_completed = 0;
# Read only table with default --rpl values # Read only table with default --rpl values
%Global::replace = %Global::replace =
( (
@ -1460,6 +1461,7 @@ sub open_joblog {
if(/$joblog_regexp/o) { if(/$joblog_regexp/o) {
# This is 30% faster than set_job_already_run($1); # This is 30% faster than set_job_already_run($1);
vec($Global::job_already_run,($1||0),1) = 1; vec($Global::job_already_run,($1||0),1) = 1;
$Global::total_completed++;
$group[$1-1] = "true"; $group[$1-1] = "true";
} elsif(/(\d+)\s+\S+(\s+[-0-9.]+){6}\s+(.*)$/) { } elsif(/(\d+)\s+\S+(\s+[-0-9.]+){6}\s+(.*)$/) {
$group[$1-1] = $3 $group[$1-1] = $3
@ -1495,6 +1497,7 @@ sub open_joblog {
if(/$joblog_regexp/o) { if(/$joblog_regexp/o) {
# This is 30% faster than set_job_already_run($1); # This is 30% faster than set_job_already_run($1);
vec($Global::job_already_run,($1||0),1) = 1; vec($Global::job_already_run,($1||0),1) = 1;
$Global::total_completed++;
} elsif(not /\d+\s+[^\s]+\s+([-0-9.]+\s+){6}/) { } elsif(not /\d+\s+[^\s]+\s+([-0-9.]+\s+){6}/) {
::error("Format of '$opt::joblog' is wrong: $_"); ::error("Format of '$opt::joblog' is wrong: $_");
::wait_and_exit(255); ::wait_and_exit(255);
@ -2026,7 +2029,6 @@ sub init_run_jobs {
# Returns: N/A # Returns: N/A
$Global::total_running = 0; $Global::total_running = 0;
$Global::total_started = 0; $Global::total_started = 0;
$Global::total_completed = 0;
$Global::tty_taken = 0; $Global::tty_taken = 0;
$SIG{USR1} = \&list_running_jobs; $SIG{USR1} = \&list_running_jobs;
$SIG{USR2} = \&toggle_progress; $SIG{USR2} = \&toggle_progress;
@ -4747,7 +4749,7 @@ sub loadavg_too_high {
'ultrix' => "ps -ax | awk '{print \$3,\$5}'", 'ultrix' => "ps -ax | awk '{print \$3,\$5}'",
); );
print `$ps{$^O}`; print `$ps{$^O}`;
}; });
$cmd = "perl -e ".::shell_quote_scalar($ps); $cmd = "perl -e ".::shell_quote_scalar($ps);
} }
return $cmd; return $cmd;

View file

@ -2420,6 +2420,14 @@ Find the files in a list that do not exist
cat file_list | parallel 'if [ ! -e {} ] ; then echo {}; fi' cat file_list | parallel 'if [ ! -e {} ] ; then echo {}; fi'
=head1 EXAMPLE: Composed command with multiple input sources
You have a dir with files named as 24 hours in 5 minute intervals:
00:00, 00:05, 00:10 .. 23:55. You want to find the files missing:
parallel [ -f {1}:{2} ] "||" echo {1}:{2} does not exist ::: {00..23} ::: {00..55..5}
=head1 EXAMPLE: Calling Bash functions =head1 EXAMPLE: Calling Bash functions
If the composed command is longer than a line, it becomes hard to If the composed command is longer than a line, it becomes hard to

View file

@ -754,8 +754,8 @@ Unfortunately it is not always possible to predict the root cause of the error.
Contrary to the obvious B<--load> does not use load average. This is Contrary to the obvious B<--load> does not use load average. This is
due to load average rising too slowly. Instead it uses B<ps> to list due to load average rising too slowly. Instead it uses B<ps> to list
the number of jobs in running or blocked state (state D, O or R). This the number of threads in running or blocked state (state D, O or
gives an instant load. R). This gives an instant load.
As remote calculation of load can be slow, a process is spawned to run As remote calculation of load can be slow, a process is spawned to run
B<ps> and put the result in a file, which is then used next time. B<ps> and put the result in a file, which is then used next time.

View file

@ -590,6 +590,10 @@
<pre><code> parallel echo {} shell quoted is {= &#39;$_=Q($_)&#39; =} ::: &#39;*/!#$&#39;</code></pre> <pre><code> parallel echo {} shell quoted is {= &#39;$_=Q($_)&#39; =} ::: &#39;*/!#$&#39;</code></pre>
<p>Output:</p>
<pre><code> */!#$ shell quoted is \*/\!\#\$</code></pre>
<p><b>$job-</b>&gt;<b>skip()</b> skips the job:</p> <p><b>$job-</b>&gt;<b>skip()</b> skips the job:</p>
<pre><code> parallel echo {= &#39;if($_==3) { $job-&gt;skip() }&#39; =} ::: {1..5}</code></pre> <pre><code> parallel echo {= &#39;if($_==3) { $job-&gt;skip() }&#39; =} ::: {1..5}</code></pre>

View file

@ -477,6 +477,10 @@ B<Q(...)> shell quotes the string:
parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$' parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$'
Output:
*/!#$ shell quoted is \*/\!\#\$
B<$job->>B<skip()> skips the job: B<$job->>B<skip()> skips the job:
parallel echo {= 'if($_==3) { $job->skip() }' =} ::: {1..5} parallel echo {= 'if($_==3) { $job->skip() }' =} ::: {1..5}

View file

@ -263,6 +263,14 @@ echo 'bug #47002: --tagstring with -d \n\n'
echo '**' echo '**'
echo 'bug #47086: [PATCH] Initialize total_completed from joblog'
rm -f /tmp/parallel-47086;
parallel -j1 --joblog /tmp/parallel-47086 --halt now,fail=1 echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0;
parallel -j1 --joblog /tmp/parallel-47086 --halt now,fail=1 --resume echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0
echo '**'
EOF EOF
echo '### 1 .par file from --files expected' echo '### 1 .par file from --files expected'

View file

@ -575,5 +575,18 @@ bug #47002: --tagstring with -d \n\n
2 2
echo '**' echo '**'
** **
echo 'bug #47086: [PATCH] Initialize total_completed from joblog'
bug #47086: [PATCH] Initialize total_completed from joblog
rm -f /tmp/parallel-47086; parallel -j1 --joblog /tmp/parallel-47086 --halt now,fail=1 echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0; parallel -j1 --joblog /tmp/parallel-47086 --halt now,fail=1 --resume echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0
0
1
2
3
4
5
parallel: This job failed:
echo 3;exit 1
echo '**'
**
### 1 .par file from --files expected ### 1 .par file from --files expected
1 1