From 1368c8e5b7a77d6b65b70d709a9693fcf604aeb8 Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Thu, 3 Sep 2026 14:18:04 +0200 Subject: [PATCH] Queue sync warmup until active worker yields --- runtime/webdav-warmup-dispatch.php | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/runtime/webdav-warmup-dispatch.php b/runtime/webdav-warmup-dispatch.php index 62c3fbb..fa89528 100644 --- a/runtime/webdav-warmup-dispatch.php +++ b/runtime/webdav-warmup-dispatch.php @@ -58,11 +58,17 @@ if (!function_exists('exec')) } $worker = realpath(BRATONIEN_TOOLS_PATH.'runtime/lib/webdav-cache-warmup.php'); +$priority_waiter = realpath(BRATONIEN_TOOLS_PATH.'runtime/lib/run-webdav-priority-wait.sh'); if (!$worker || !is_file($worker)) { fwrite(STDERR, "WebDAV-Cache-Warmup-Worker wurde nicht gefunden.\n"); exit(1); } +if (!$priority_waiter || !is_file($priority_waiter)) +{ + fwrite(STDERR, "WebDAV-Prioritäts-Warter wurde nicht gefunden.\n"); + exit(1); +} $log = PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'bratonien-webdav-warmup.log'; $result = 0; @@ -129,14 +135,22 @@ foreach (bratonien_tools_nc_connector_connections() as $connection) @chmod($priority_file, 0664); } - // Der Worker schützt nur die kurze produktive Materialisierungsphase eines - // einzelnen Bildes mit webdav-sync.lock. Downloads und Batchgrenzen bleiben - // frei, damit ein Connector-Sync neue Alben erkennen und Stufe 2 sicher - // zwischen zwei vollständig restaurierten Batches priorisieren kann. - $base = escapeshellarg(PHP_BINARY).' '.escapeshellarg($worker) + $worker_command = escapeshellarg(PHP_BINARY).' '.escapeshellarg($worker) .' --connection-id='.$connection_id .' --mode='.escapeshellarg($mode); + if ($mode === 'sync') + { + // Ein bereits laufender Worker darf seinen aktuellen Bild-/Batchvorgang + // vollständig restaurieren. Der Waiter startet den priorisierten Sync-Lauf + // danach automatisch, statt die Prioritätsmarke verloren gehen zu lassen. + $base = escapeshellarg('/bin/bash').' '.escapeshellarg($priority_waiter).' '.escapeshellarg($state_dir).' '.$worker_command; + } + else + { + $base = $worker_command; + } + if ($wait) { $output = array();