no SQL inside the signal-handler (race-condition)
This commit is contained in:
parent
7141787728
commit
460e244536
92
atom
92
atom
@ -1462,21 +1462,7 @@ destroyworker() {
|
|||||||
wait $dyingworker
|
wait $dyingworker
|
||||||
}
|
}
|
||||||
|
|
||||||
checkworkers() {
|
gettaskinfos() {
|
||||||
for key in ${!workers[@]}
|
|
||||||
do
|
|
||||||
if ! kill -0 ${workers[key]} 2>/dev/null
|
|
||||||
then
|
|
||||||
if read -u4 -t 0.01 alienquery
|
|
||||||
then
|
|
||||||
alienresults=(${alienquery%%|*})
|
|
||||||
rest="${alienquery#*|}|"
|
|
||||||
while [ -n "$rest" ]
|
|
||||||
do
|
|
||||||
alienresults+=("${rest%%|*}")
|
|
||||||
rest=${rest#*|}
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
echo '
|
echo '
|
||||||
SELECT
|
SELECT
|
||||||
id,
|
id,
|
||||||
@ -1487,7 +1473,7 @@ checkworkers() {
|
|||||||
filename
|
filename
|
||||||
FROM tasks
|
FROM tasks
|
||||||
WHERE
|
WHERE
|
||||||
id='${workertasks[key]}';
|
id='$1';
|
||||||
' >&3
|
' >&3
|
||||||
read -u4 line
|
read -u4 line
|
||||||
taskid=${line%%|*}
|
taskid=${line%%|*}
|
||||||
@ -1502,10 +1488,34 @@ checkworkers() {
|
|||||||
rest=${rest#*|}
|
rest=${rest#*|}
|
||||||
destfilename=${rest%%|*}
|
destfilename=${rest%%|*}
|
||||||
rest=${rest#*|}
|
rest=${rest#*|}
|
||||||
if destroyworker $key
|
}
|
||||||
|
|
||||||
|
cleaner() {
|
||||||
|
for taskid in ${failedtasks[@]}
|
||||||
|
do
|
||||||
|
gettaskinfos $taskid
|
||||||
|
faildepends=$(
|
||||||
|
Select tasks 'COUNT(*)' <<-EOWhere
|
||||||
|
requires = $taskid
|
||||||
|
EOWhere
|
||||||
|
)
|
||||||
|
(( failed+=faildepends ))
|
||||||
|
Update tasks status 2 <<<"id = $taskid"
|
||||||
|
Update tasks status 2 <<<"requires = $taskid"
|
||||||
|
echo "SELECT COUNT(*)
|
||||||
|
FROM tasks
|
||||||
|
WHERE ( status = 0 OR status = 1 )
|
||||||
|
AND required = $taskid;">&3
|
||||||
|
read -u4 count
|
||||||
|
if (( count == 0 ))
|
||||||
then
|
then
|
||||||
(( ++ran ))
|
rm -f "$cleanup"
|
||||||
(( active-- )) || true
|
fi
|
||||||
|
unset failedtasks[taskid]
|
||||||
|
done
|
||||||
|
for taskid in ${finishedtasks[@]}
|
||||||
|
do
|
||||||
|
gettaskinfos $taskid
|
||||||
Delete tasks <<<"id = $taskid"
|
Delete tasks <<<"id = $taskid"
|
||||||
if [ -n "$destfilename" ]
|
if [ -n "$destfilename" ]
|
||||||
then
|
then
|
||||||
@ -1530,16 +1540,6 @@ checkworkers() {
|
|||||||
"WHERE id=$destfileid;" \
|
"WHERE id=$destfileid;" \
|
||||||
>&3
|
>&3
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
faildepends=$(
|
|
||||||
Select tasks 'COUNT(*)' <<-EOWhere
|
|
||||||
requires = $taskid
|
|
||||||
EOWhere
|
|
||||||
)
|
|
||||||
(( failed+=faildepends ))
|
|
||||||
Update tasks status 2 <<<"id = $taskid"
|
|
||||||
Update tasks status 2 <<<"requires = $taskid"
|
|
||||||
fi
|
|
||||||
echo "SELECT COUNT(*)
|
echo "SELECT COUNT(*)
|
||||||
FROM tasks
|
FROM tasks
|
||||||
WHERE ( status = 0 OR status = 1 )
|
WHERE ( status = 0 OR status = 1 )
|
||||||
@ -1549,22 +1549,25 @@ checkworkers() {
|
|||||||
then
|
then
|
||||||
rm -f "$cleanup"
|
rm -f "$cleanup"
|
||||||
fi
|
fi
|
||||||
if (( ${#alienresults[@]} ))
|
unset finishedtasks[taskid]
|
||||||
then
|
|
||||||
alienquery='SELECT '
|
|
||||||
for key in ${!alienresults[@]}
|
|
||||||
do
|
|
||||||
(( key > 0 )) && alienquery+=,
|
|
||||||
expr='^[0-9]*$'
|
|
||||||
if [[ ${alienresults[key]} =~ $expr ]]
|
|
||||||
then
|
|
||||||
alienquery+=${alienresults[key]}
|
|
||||||
else
|
|
||||||
alienquery+="\"${alienresults[@]//\"/\"\"}\""
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
echo "$alienquery;" >&3
|
}
|
||||||
unset alienquery alienresults
|
|
||||||
|
checkworkers() {
|
||||||
|
for key in ${!workers[@]}
|
||||||
|
do
|
||||||
|
if ! kill -0 ${workers[key]} 2>/dev/null
|
||||||
|
then
|
||||||
|
taskid=${workertasks[key]}
|
||||||
|
(( ++ran ))
|
||||||
|
(( active-- ))
|
||||||
|
if destroyworker $key
|
||||||
|
then
|
||||||
|
finishedtasks+=($taskid)
|
||||||
|
else
|
||||||
|
failedtasks+=($taskid)
|
||||||
|
(( ++ran ))
|
||||||
|
(( ++failed ))
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -2057,6 +2060,7 @@ do
|
|||||||
(( ++concurrency ))
|
(( ++concurrency ))
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
cleaner
|
||||||
master
|
master
|
||||||
if ((taskcount - remaining))
|
if ((taskcount - remaining))
|
||||||
then
|
then
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user