dispatcher fix race condition sur exit_file extract
Le setsid bash lance ffmpeg puis ecrit le code de retour: echo $? > exit_file Avec test -f on matchait le fichier pendant que le shell le creait vide (write() du "> exit_file" cree le fichier avant fwrite). Resultat: code_str="" -> isdigit()=False -> rc=1 -> ffmpeg failed false positive. Fix: test -s (existe ET non-vide) pour attendre que echo ait termine.
This commit is contained in:
@@ -209,7 +209,9 @@ def do_extract(job: sqlite3.Row, worker: dict) -> str:
|
|||||||
ssh(worker["ssh_alias"], f"setsid bash -c {shlex.quote(bg)} >/dev/null 2>&1 &")
|
ssh(worker["ssh_alias"], f"setsid bash -c {shlex.quote(bg)} >/dev/null 2>&1 &")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
rc_done, _, _ = ssh(worker["ssh_alias"], f"test -f {shlex.quote(exit_file)}")
|
# Use -s (file exists AND size > 0) to avoid race: setsid bash writes the exit code
|
||||||
|
# AFTER ffmpeg finishes; a plain -f can match a zero-byte placeholder mid-write.
|
||||||
|
rc_done, _, _ = ssh(worker["ssh_alias"], f"test -s {shlex.quote(exit_file)}")
|
||||||
current = count_frames(worker, frames_dir)
|
current = count_frames(worker, frames_dir)
|
||||||
pct = min(99, current * 100 // total_frames_est)
|
pct = min(99, current * 100 // total_frames_est)
|
||||||
set_status(job["id"], frame_count=current, progress=pct)
|
set_status(job["id"], frame_count=current, progress=pct)
|
||||||
|
|||||||
Reference in New Issue
Block a user