From 4b8cf83ee92090d1174ec4d3bccfbceaf1fbf134 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Tue, 12 May 2026 21:28:08 +0700 Subject: [PATCH] =?UTF-8?q?fix(backend):=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=D0=BC=D0=B8=20=D0=B8=20=D0=BE=D1=87=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=BA=D1=83=20=D1=83=D1=81=D1=82=D0=B0=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D1=88=D0=B8=D1=85=20=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/updater/entrypoint.sh | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/deploy/updater/entrypoint.sh b/deploy/updater/entrypoint.sh index 8d6108c..fe45e39 100644 --- a/deploy/updater/entrypoint.sh +++ b/deploy/updater/entrypoint.sh @@ -80,16 +80,32 @@ state_set_error() { mv "$tmp" "$STATE_FILE" } +cleanup_legacy_lock_dirs() { + local locks_dir="/state/locks" + [[ -d "$locks_dir" ]] || return 0 + find "$locks_dir" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} + 2>/dev/null || true +} + with_target_lock() { local target_id="$1" shift - local lock_dir="/state/locks/${target_id}" - mkdir -p "$(dirname "$lock_dir")" - if ! mkdir "$lock_dir" 2>/dev/null; then - log warn "target=${target_id} action=skip reason=lock_busy" - return 0 + local lock_file="/state/locks/${target_id}.lock" + mkdir -p "$(dirname "$lock_file")" + + if [[ -f "$lock_file" ]]; then + local lock_pid="" + lock_pid="$(tr -d '[:space:]' <"$lock_file" 2>/dev/null || true)" + if [[ -n "$lock_pid" ]] && kill -0 "$lock_pid" 2>/dev/null; then + log warn "target=${target_id} action=skip reason=lock_busy pid=${lock_pid}" + return 0 + fi + + log warn "target=${target_id} action=stale_lock_removed previous_pid=${lock_pid:-unknown}" + rm -f "$lock_file" fi - trap 'rmdir "'"$lock_dir"'" 2>/dev/null || true' RETURN + + printf '%s\n' "$$" >"$lock_file" + trap 'rm -f "'"$lock_file"'"' RETURN "$@" } @@ -483,6 +499,7 @@ main() { validate_targets_file state_init + cleanup_legacy_lock_dirs registry_login log info "action=startup targets_file=${TARGETS_FILE} state_file=${STATE_FILE} poll_interval=${POLL_INTERVAL_SECONDS}"