From dfd180c11e1d32b1fbe6977d70dfba1edffba906 Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Thu, 3 Sep 2026 12:56:56 +0200 Subject: [PATCH] Replay queued sync priority after active warmup --- runtime/lib/run-webdav-cache-warmup.sh | 41 +++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/runtime/lib/run-webdav-cache-warmup.sh b/runtime/lib/run-webdav-cache-warmup.sh index 9aaab04..ad363b6 100644 --- a/runtime/lib/run-webdav-cache-warmup.sh +++ b/runtime/lib/run-webdav-cache-warmup.sh @@ -9,6 +9,7 @@ shift || true mkdir -p -- "$STATE_DIR" LOCK_FILE="$STATE_DIR/webdav-sync.lock" +PRIORITY_FILE="$STATE_DIR/webdav-cache-warmup-priority-sync" # 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 @@ -16,4 +17,42 @@ LOCK_FILE="$STATE_DIR/webdav-sync.lock" # unter dem Warmup ausgetauscht werden. exec 9>"$LOCK_FILE" flock -s 9 -exec "$@" + +COMMAND=("$@") + +run_command() { + "${COMMAND[@]}" +} + +result=0 +if ! run_command; then + result=$? +fi + +# Ein Connector-Sync kann während eines bereits laufenden Warmups neue Alben +# melden. Der Dispatcher legt dafür nur eine Prioritätsmarke an; er startet +# keinen zweiten konkurrierenden Worker. Falls der aktive Lauf die Marke noch +# nicht selbst übernehmen konnte, wird sie hier nach seinem sauberen Ende +# garantiert nachgeholt. Dadurch geht ein Sofort-Warmup nie verloren. +if [[ -f "$PRIORITY_FILE" ]]; then + rm -f -- "$PRIORITY_FILE" + SYNC_COMMAND=() + replaced=0 + for arg in "${COMMAND[@]}"; do + if [[ "$arg" == --mode=* ]]; then + SYNC_COMMAND+=("--mode=sync") + replaced=1 + else + SYNC_COMMAND+=("$arg") + fi + done + if [[ "$replaced" -eq 0 ]]; then + SYNC_COMMAND+=("--mode=sync") + fi + + if ! "${SYNC_COMMAND[@]}"; then + result=$? + fi +fi + +exit "$result"