triflux 10.48.0 → 10.48.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scripts/tfx-route.sh +52 -9
package/package.json
CHANGED
package/scripts/tfx-route.sh
CHANGED
|
@@ -156,6 +156,32 @@ track_worker_pid() {
|
|
|
156
156
|
echo "$1" >> "$_PID_TRACK"
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
# --async 서브셸은 job id 를 찍고 끝나는 맨 위 프로세스($$)보다 오래 산다. 추적 파일이
|
|
160
|
+
# 끝난 $$ 이름이면 SessionStart 의 session-stale-cleanup 이 소유자 사망으로 보고
|
|
161
|
+
# 실행 중인 워커를 SIGTERM 한다. 서브셸 안에서 자기 PID 로 다시 묶는다.
|
|
162
|
+
# BASHPID 가 없는 bash 3.2 에서는 sh 의 PPID(= 이 서브셸)를 쓴다.
|
|
163
|
+
_rebind_pid_track_to_self() {
|
|
164
|
+
local self_pid="${BASHPID:-}"
|
|
165
|
+
[[ -n "$self_pid" ]] || self_pid="$(exec sh -c 'echo "$PPID"')"
|
|
166
|
+
_PID_TRACK="${TFX_TMP}/tfx-route-${self_pid}-pids"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
# async 잡 서브셸의 공통 실행부. 운영 --async(main)와 self-test 가 같은 코드를 탄다.
|
|
170
|
+
# body 는 자체 EXIT trap(cleanup_workers)을 설치하므로 정상 종료는 straight-line 으로
|
|
171
|
+
# 기록하고 시그널만 trap 한다. 서브셸 안에서 호출해야 한다.
|
|
172
|
+
_run_async_job_body() {
|
|
173
|
+
local body="$1" _ec
|
|
174
|
+
set +e
|
|
175
|
+
trap 'rc=$?; echo "$rc" > "$JOB_DIR/exit_code"; touch "$JOB_DIR/done"; exit "$rc"' INT TERM HUP
|
|
176
|
+
_rebind_pid_track_to_self
|
|
177
|
+
exec > "$JOB_DIR/result.log" 2>"$JOB_DIR/stderr.log"
|
|
178
|
+
"$body"
|
|
179
|
+
_ec=$?
|
|
180
|
+
echo "$_ec" > "$JOB_DIR/exit_code"
|
|
181
|
+
touch "$JOB_DIR/done"
|
|
182
|
+
exit "$_ec"
|
|
183
|
+
}
|
|
184
|
+
|
|
159
185
|
cleanup_workers() {
|
|
160
186
|
_codex_config_swap "restore" 2>/dev/null || true
|
|
161
187
|
deregister_agent 2>/dev/null || true
|
|
@@ -413,6 +439,31 @@ if [[ "${1:-}" == "--async-self-test" ]]; then
|
|
|
413
439
|
echo "$JOB_ID"
|
|
414
440
|
exit 0
|
|
415
441
|
;;
|
|
442
|
+
pid-track-owner)
|
|
443
|
+
# 운영 --async 처럼 부모가 먼저 끝난 뒤 서브셸이 워커를 추적한다.
|
|
444
|
+
# 추적 파일 소유자가 살아 있어야 session-stale-cleanup 이 워커를 고아로 보지 않는다.
|
|
445
|
+
mkdir -p "$TFX_JOBS_DIR"
|
|
446
|
+
JOB_ID="selftest-track-$$-$RANDOM"
|
|
447
|
+
JOB_DIR="$TFX_JOBS_DIR/$JOB_ID"
|
|
448
|
+
mkdir -p "$JOB_DIR"
|
|
449
|
+
selftest_track_worker() {
|
|
450
|
+
# main 과 같은 정리 경로(EXIT trap → cleanup_workers)를 쓴다.
|
|
451
|
+
trap 'cleanup_workers' EXIT
|
|
452
|
+
sleep "${TFX_SELFTEST_WORKER_SEC:-20}" &
|
|
453
|
+
local worker=$!
|
|
454
|
+
track_worker_pid "$worker"
|
|
455
|
+
echo "$worker" > "$JOB_DIR/worker_pid"
|
|
456
|
+
echo "$_PID_TRACK" > "$JOB_DIR/pid_track"
|
|
457
|
+
wait "$worker"
|
|
458
|
+
return 0
|
|
459
|
+
}
|
|
460
|
+
( _run_async_job_body selftest_track_worker ) &
|
|
461
|
+
bg_pid=$!
|
|
462
|
+
echo "$bg_pid" > "$JOB_DIR/pid"
|
|
463
|
+
disown "$bg_pid"
|
|
464
|
+
echo "$JOB_ID"
|
|
465
|
+
exit 0
|
|
466
|
+
;;
|
|
416
467
|
*)
|
|
417
468
|
echo "[tfx-route] unknown async-self-test target: ${1:-<empty>}" >&2
|
|
418
469
|
exit 2
|
|
@@ -3796,15 +3847,7 @@ if [[ "$TFX_ASYNC_MODE" -eq 1 ]]; then
|
|
|
3796
3847
|
# 은 main 시작 전에 done 마커를 찍는 dead code 였다. main() 이 자체 EXIT
|
|
3797
3848
|
# trap 을 설치하므로 정상 종료는 straight-line write 로 기록하고, 시그널만 trap 한다.
|
|
3798
3849
|
echo "starting" > "$JOB_DIR/pid"
|
|
3799
|
-
(
|
|
3800
|
-
trap 'rc=$?; echo "$rc" > "$JOB_DIR/exit_code"; touch "$JOB_DIR/done"; exit "$rc"' INT TERM HUP
|
|
3801
|
-
exec > "$JOB_DIR/result.log" 2>"$JOB_DIR/stderr.log"
|
|
3802
|
-
main
|
|
3803
|
-
_ec=$?
|
|
3804
|
-
echo "$_ec" > "$JOB_DIR/exit_code"
|
|
3805
|
-
touch "$JOB_DIR/done"
|
|
3806
|
-
exit "$_ec"
|
|
3807
|
-
) &
|
|
3850
|
+
( _run_async_job_body main ) &
|
|
3808
3851
|
bg_pid=$!
|
|
3809
3852
|
echo "$bg_pid" > "$JOB_DIR/pid"
|
|
3810
3853
|
disown "$bg_pid" # explicit PID — H1' fix (was missing arg, disowning daemon only)
|