From 362229efaaf51b16a8b335f8c1c982aab66ee147 Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Thu, 3 Sep 2026 12:50:06 +0200 Subject: [PATCH] Guard WebDAV warmup against connector tree swaps --- runtime/lib/run-webdav-cache-warmup.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 runtime/lib/run-webdav-cache-warmup.sh diff --git a/runtime/lib/run-webdav-cache-warmup.sh b/runtime/lib/run-webdav-cache-warmup.sh new file mode 100644 index 0000000..9aaab04 --- /dev/null +++ b/runtime/lib/run-webdav-cache-warmup.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +STATE_DIR="${1:-}" +shift || true + +[[ -n "$STATE_DIR" ]] || { echo "Connector-State-Verzeichnis fehlt." >&2; exit 2; } +[[ $# -gt 0 ]] || { echo "Warmup-Kommando fehlt." >&2; exit 2; } + +mkdir -p -- "$STATE_DIR" +LOCK_FILE="$STATE_DIR/webdav-sync.lock" + +# Der Connector-Sync nutzt denselben Lock exklusiv. Der Warmup hält ihn für +# seinen gesamten Lauf nur lesend/geteilt. Dadurch kann der Placeholder- und +# Shadow-Tree während Batch-Download, Piwigo-Aufruf und Restore nicht atomar +# unter dem Warmup ausgetauscht werden. +exec 9>"$LOCK_FILE" +flock -s 9 +exec "$@"