From 2327508438ebb1a1a6a00d0c64c4df69327f3b30 Mon Sep 17 00:00:00 2001 From: Vincent Riquer Date: Tue, 28 Jan 2025 22:34:19 +0000 Subject: [PATCH] Resolve "Looks like too many tasks fail" --- atom | 5 +- lib/database/open | 2 +- lib/decode/file | 11 +- lib/encode/mp3 | 8 +- lib/encode/opus | 8 +- lib/encode/vorbis | 8 +- lib/tasks/gettaskinfos | 3 - lib/workers/check | 17 +++ lib/workers/cleaner | 40 +++---- lib/workers/create | 148 ++++++++++++++++++++++- lib/workers/master | 261 ++++++++++++++++++----------------------- 11 files changed, 319 insertions(+), 192 deletions(-) diff --git a/atom b/atom index e7734bf..105c41a 100755 --- a/atom +++ b/atom @@ -429,7 +429,7 @@ echo ' CREATE TEMPORARY TABLE tasks( id INTEGER PRIMARY KEY, requires INTEGER, - required INTEGER, + required_by INTEGER DEFAULT 0, status INTEGER NOT NULL, key TEXT UNIQUE, rename_pattern TEXT, @@ -906,8 +906,7 @@ then FROM tasks INNER JOIN source_files ON tasks.source_file=source_files.id - WHERE tasks.status = 2 - AND requires is NULL; + WHERE tasks.status = 2; SELECT "AtOM:NoMoreFiles";' >&3 read -u4 line diff --git a/lib/database/open b/lib/database/open index 9d9fdc3..796890a 100644 --- a/lib/database/open +++ b/lib/database/open @@ -11,7 +11,7 @@ openDatabase() { if (( debug > 2 )) then exec 5>&3 - exec 3> >(tee -a $tempdir/debug.log >&5) + exec 3> >(tee -a "$tempdir/debug.log" >&5) fi cat $schema >&3 echo '.separator ::AtOM:SQL:Sep::' >&3 diff --git a/lib/decode/file b/lib/decode/file index c91d7f0..aa3ce75 100644 --- a/lib/decode/file +++ b/lib/decode/file @@ -153,18 +153,24 @@ decodeFile() { done ) status 0 + cleanup $tmpfile.wav EOInsert ) progressSpin fi if (( sox_needed )) then - cleanup="$tempdir/$tmpfile" decodeSox "$tempdir/$tmpfile.wav" if ! soxtaskid=$( Select tasks id <<<"key = $tmpfile" ) then + parent_required=$( + Select tasks required_by \ + <<<"id = $decodetaskid" + ) + Update tasks required_by $((++parent_required)) \ + <<<"id = $decodetaskid" soxtaskid=$( Insert tasks <<-EOInsert key $tmpfile @@ -176,9 +182,8 @@ decodeFile() { done ) requires $decodetaskid - required $decodetaskid status 0 - cleanup $cleanup + cleanup $tmpfile.wav EOInsert ) progressSpin diff --git a/lib/encode/mp3 b/lib/encode/mp3 index d0d6800..4bb1845 100644 --- a/lib/encode/mp3 +++ b/lib/encode/mp3 @@ -52,7 +52,6 @@ encodeFile::mp3() { Insert tasks <<-EOInsert key ${fileid}lame$destination requires ${soxtaskid:-$decodetaskid} - required ${soxtaskid:-$decodetaskid} fileid $destfileid filename $destdir/$destfile.mp3 $( @@ -66,7 +65,6 @@ encodeFile::mp3() { echo "cmd_arg$key $cleanedopts" done ) - cleanup $tempdir/$tmpfile.wav source_file $fileid status 0 rename_pattern ${destinationrenamepath[$destination]}/${destinationrename[$destination]} @@ -74,6 +72,12 @@ encodeFile::mp3() { ascii ${destinationascii["$destination"]} EOInsert ) + parent_required=$( + Select tasks required_by \ + <<<"id = ${soxtaskid:-$decodetaskid}" + ) + Update tasks required_by $((++parent_required)) \ + <<<"id = ${soxtaskid:-$decodetaskid}" progressSpin soxtaskid='' } diff --git a/lib/encode/opus b/lib/encode/opus index 2994190..06f2df8 100644 --- a/lib/encode/opus +++ b/lib/encode/opus @@ -20,7 +20,6 @@ encodeFile::opus() { Insert tasks <<-EOInsert key ${fileid}opusenc$destination requires ${soxtaskid:-$decodetaskid} - required ${soxtaskid:-$decodetaskid} fileid $destfileid filename $destdir/$destfile.opus $( @@ -34,7 +33,6 @@ encodeFile::opus() { echo "cmd_arg$key $cleanedopts" done ) - cleanup $tempdir/$tmpfile.wav source_file $fileid status 0 rename_pattern ${destinationrenamepath[$destination]}/${destinationrename[$destination]} @@ -42,6 +40,12 @@ encodeFile::opus() { ascii ${destinationascii["$destination"]} EOInsert ) + parent_required=$( + Select tasks required_by \ + <<<"id = ${soxtaskid:-$decodetaskid}" + ) + Update tasks required_by $((++parent_required)) \ + <<<"id = ${soxtaskid:-$decodetaskid}" progressSpin soxtaskid='' } diff --git a/lib/encode/vorbis b/lib/encode/vorbis index a96523f..e99cc0d 100644 --- a/lib/encode/vorbis +++ b/lib/encode/vorbis @@ -16,7 +16,6 @@ encodeFile::vorbis() { Insert tasks <<-EOInsert key ${fileid}oggenc$destination requires ${soxtaskid:-$decodetaskid} - required ${soxtaskid:-$decodetaskid} fileid $destfileid filename $destdir/$destfile.ogg $( @@ -30,7 +29,6 @@ encodeFile::vorbis() { echo "cmd_arg$key ${oggencopts[key]}" done ) - cleanup $tempdir/$tmpfile.wav source_file $fileid status 0 rename_pattern ${destinationrenamepath[$destination]}/${destinationrename[$destination]} @@ -38,6 +36,12 @@ encodeFile::vorbis() { ascii ${destinationascii["$destination"]} EOInsert ) + parent_required=$( + Select tasks required_by \ + <<<"id = ${soxtaskid:-$decodetaskid}" + ) + Update tasks required_by $((++parent_required)) \ + <<<"id = ${soxtaskid:-$decodetaskid}" progressSpin soxtaskid='' } diff --git a/lib/tasks/gettaskinfos b/lib/tasks/gettaskinfos index 5a51657..648e4ab 100644 --- a/lib/tasks/gettaskinfos +++ b/lib/tasks/gettaskinfos @@ -4,7 +4,6 @@ gettaskinfos() { SELECT id, source_file, - required, cleanup, fileid, filename @@ -16,8 +15,6 @@ gettaskinfos() { rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::" sourcefileid=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} - required=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} cleanup=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} destfileid=${rest%%::AtOM:SQL:Sep::*} diff --git a/lib/workers/check b/lib/workers/check index fa52afb..7da7f36 100644 --- a/lib/workers/check +++ b/lib/workers/check @@ -1,5 +1,9 @@ #!/bin/bash checkworkers() { + local \ + taskid \ + parent_required \ + parent_task for key in ${!workers[@]} do if ! kill -0 ${workers[key]} 2>/dev/null @@ -14,6 +18,19 @@ checkworkers() { failedtasks+=($taskid) (( ++failed )) fi + parent_task=$( + Select tasks requires \ + <<<"id = $taskid" + ) + if (( parent_task )) + then + parent_required=$( + Select tasks required_by \ + <<<"id = $parent_task" + ) + Update tasks required_by $((--parent_required)) \ + <<<"id = $parent_task" + fi unset workertasks[key] fi done diff --git a/lib/workers/cleaner b/lib/workers/cleaner index b72a53e..a4778e1 100644 --- a/lib/workers/cleaner +++ b/lib/workers/cleaner @@ -1,26 +1,23 @@ #!/bin/bash cleaner() { + local \ + key \ + faildepends \ + taskid \ + count for key in ${!failedtasks[@]} do taskid=${failedtasks[key]} gettaskinfos $taskid faildepends=$( - Select tasks 'COUNT(*)' <<-EOWhere - requires = $taskid + Select tasks required_by <<-EOWhere + id = $taskid EOWhere ) (( failed+=faildepends )) (( ran+=faildepends )) Update tasks status 2 <<<"id = $taskid" - echo "SELECT COUNT(*) - FROM tasks - WHERE ( status = 0 OR status = 1 ) - AND required = $taskid;">&3 - read -u4 count - if (( count == 0 )) - then - rm -f "$cleanup" - fi + rm -f "$cleanup" unset failedtasks[key] done for key in ${!finishedtasks[@]} @@ -47,29 +44,28 @@ cleaner() { " FROM tasks" \ " WHERE id=$taskid" \ " )," \ - " fat32compat=(" \ + " fat32compat=(" \ " SELECT fat32compat" \ " FROM tasks" \ " WHERE id=$taskid" \ " )," \ - " ascii=(" \ - " SELECT ascii" \ + " ascii=(" \ + " SELECT ascii" \ " FROM tasks" \ " WHERE id=$taskid" \ " )" \ "WHERE id=$destfileid;" \ >&3 fi - echo "SELECT COUNT(*) - FROM tasks - WHERE ( status = 0 OR status = 1 ) - AND required = $taskid;">&3 - read -u4 count + count=$(Select tasks required_by <<<"id = $taskid") if (( count == 0 )) then - rm -f "$cleanup" + [[ -n "$cleanup" ]] && rm -f "$tempdir/$cleanup" + Delete tasks <<<"id = $taskid" + unset finishedtasks[key] + else + Update tasks status 4 \ + <<<"id = $taskid" fi - Delete tasks <<<"id = $taskid" - unset finishedtasks[key] done } diff --git a/lib/workers/create b/lib/workers/create index 16d8e24..f4c9cff 100644 --- a/lib/workers/create +++ b/lib/workers/create @@ -1,5 +1,145 @@ -#!/bin/bash +#!/usr/bin/env bash + createworker() { - worker $1 & - workers[$1]=$! -} + (( ++active )) + read -u4 line + taskid=${line%%::AtOM:SQL:Sep::*} + rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::" + sourcefileid=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") + rest=${rest#*::AtOM:SQL:Sep::} + cleanup=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + destfileid=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + destfilename=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + for key in ${!cmd_arg[@]} + do + [ -z "${cmd_arg[key]}" ] && unset cmd_arg[key] + done + workerid=$(getworkerid) + workertasks[workerid]=$taskid + Update tasks status 1 <<<"id = $taskid" + worker $workerid & + workers[$workerid]=$! +} \ No newline at end of file diff --git a/lib/workers/master b/lib/workers/master index e24956f..f475788 100644 --- a/lib/workers/master +++ b/lib/workers/master @@ -8,7 +8,112 @@ master() { SELECT COUNT(*) FROM tasks WHERE status = 0; + '>&3 + read -u4 remaining + if (( remaining == 0 )) + then + sleep 0.1 + return 0 + fi + + echo ' + SELECT COUNT(*) + FROM tasks + WHERE status = 0 + AND requires IN ( + SELECT id + FROM tasks + WHERE status = 4 + ); + + SELECT + id, + source_file, + cmd_arg0, + cmd_arg1, + cmd_arg2, + cmd_arg3, + cmd_arg4, + cmd_arg5, + cmd_arg6, + cmd_arg7, + cmd_arg8, + cmd_arg9, + cmd_arg10, + cmd_arg11, + cmd_arg12, + cmd_arg13, + cmd_arg14, + cmd_arg15, + cmd_arg16, + cmd_arg17, + cmd_arg18, + cmd_arg19, + cmd_arg20, + cmd_arg21, + cmd_arg22, + cmd_arg23, + cmd_arg24, + cmd_arg25, + cmd_arg26, + cmd_arg27, + cmd_arg28, + cmd_arg29, + cmd_arg30, + cmd_arg31, + cmd_arg32, + cmd_arg33, + cmd_arg34, + cmd_arg35, + cmd_arg36, + cmd_arg37, + cmd_arg38, + cmd_arg39, + cmd_arg40, + cmd_arg41, + cmd_arg42, + cmd_arg43, + cmd_arg44, + cmd_arg45, + cmd_arg46, + cmd_arg47, + cmd_arg48, + cmd_arg49, + cmd_arg50, + cmd_arg51, + cmd_arg52, + cmd_arg53, + cmd_arg54, + cmd_arg55, + cmd_arg56, + cmd_arg57, + cmd_arg58, + cmd_arg59, + cleanup, + fileid, + filename + FROM tasks + WHERE status = 0 + AND requires IN ( + SELECT id + FROM tasks + WHERE status = 4 + ORDER BY source_file + /* LIMIT 1 */ + ) + ORDER BY source_file + LIMIT 1; + '>&3 + + read -u4 ready + if (( ready > 0 )) + then + createworker + return 0 + fi + + echo ' SELECT COUNT(*) FROM tasks WHERE status = 0 @@ -17,7 +122,6 @@ master() { SELECT id, source_file, - required, cmd_arg0, cmd_arg1, cmd_arg2, @@ -87,15 +191,12 @@ master() { ORDER BY source_file LIMIT 1; ' >&3 - read -u4 remaining + read -u4 ready - if (( remaining == 0 )) + + if (( active == 0 && ready == 0 )) then - sleep 0.1 - return 0 - elif (( active == 0 && ready == 0 )) - then - dumpfile=tasks-$(date +%Y%m%d%H%M%S).csv + dumpfile="$tempdir/tasks-$(date -Iseconds).csv" cat <<-EOF @@ -111,6 +212,7 @@ master() { .mode list .headers off .output stdout + COMMIT; EOSQL closeDatabase echo "Waiting for children to come back home..." @@ -121,148 +223,7 @@ master() { then sleep 0.1 else - (( ++active )) - read -u4 line - taskid=${line%%::AtOM:SQL:Sep::*} - rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::" - sourcefileid=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - required=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}") - rest=${rest#*::AtOM:SQL:Sep::} - cleanup=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - destfileid=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - destfilename=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - for key in ${!cmd_arg[@]} - do - [ -z "${cmd_arg[key]}" ] && unset cmd_arg[key] - done - workerid=$(getworkerid) - workertasks[workerid]=$taskid - Update tasks status 1 <<<"id = $taskid" - createworker $workerid + createworker fi fi }