From 1cff325e3c782ff7d08823a594f7c4400f6509a6 Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Sun, 6 Sep 2026 22:29:55 +0200 Subject: [PATCH] Resume deferred cache worker after connector sync --- runtime/lib/run-webdav-after-sync.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 runtime/lib/run-webdav-after-sync.sh diff --git a/runtime/lib/run-webdav-after-sync.sh b/runtime/lib/run-webdav-after-sync.sh new file mode 100644 index 0000000..81e3787 --- /dev/null +++ b/runtime/lib/run-webdav-after-sync.sh @@ -0,0 +1,26 @@ +#!/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; } + +SYNC_LOCK="$STATE_DIR/webdav-sync.lock" +WAITER_LOCK="$STATE_DIR/webdav-cache-warmup-after-sync.lock" + +# Pro Verbindung darf genau ein wartender Cache-Start existieren. Dadurch +# erzeugen wiederholte Klicks im Adminbereich keine Warteschlange aus Workern. +exec 8>"$WAITER_LOCK" +flock -n 8 || exit 0 + +# Der Connector hält diesen Lock exklusiv. Wir warten blockierend, ohne dabei +# Nextcloud-Dateien oder den Worker-Index anzufassen. Sobald der Connector den +# Lock freigibt, geben wir unseren kurzen Leselock sofort wieder frei und +# starten den normalen Worker. Dessen eigene Guards bleiben damit maßgeblich. +exec 9<>"$SYNC_LOCK" +flock -s 9 +flock -u 9 + +exec "$@"