Keep WebDAV cancel signals until worker guards are secured

This commit is contained in:
Terranom674
2026-09-05 23:43:17 +02:00
parent 9f8a2569b2
commit 6983a98875

View File

@@ -179,6 +179,7 @@ function bratonien_tools_clear_image_cache_atomic()
$held_locks = array(); $held_locks = array();
$webdav_cancel_files = array(); $webdav_cancel_files = array();
$webdav_guards_ready = false;
try try
{ {
@@ -203,6 +204,7 @@ function bratonien_tools_clear_image_cache_atomic()
// 2. WebDAV-Warmup regulär abbrechen und danach alle Verbindungs-Locks // 2. WebDAV-Warmup regulär abbrechen und danach alle Verbindungs-Locks
// exklusiv halten. Der laufende Batch wird nicht hart beendet. // exklusiv halten. Der laufende Batch wird nicht hart beendet.
bratonien_tools_atomic_cache_prepare_webdav_guards($held_locks, $webdav_cancel_files); bratonien_tools_atomic_cache_prepare_webdav_guards($held_locks, $webdav_cancel_files);
$webdav_guards_ready = true;
// 3. Seit der Presentation-Refresh-Einführung kann auch dieser Worker // 3. Seit der Presentation-Refresh-Einführung kann auch dieser Worker
// Derivate erzeugen. Ohne seinen Lock konnte ein gerade geleerter Cache // Derivate erzeugen. Ohne seinen Lock konnte ein gerade geleerter Cache
@@ -323,13 +325,18 @@ function bratonien_tools_clear_image_cache_atomic()
} }
finally finally
{ {
// Die Cancel-Dateien bleiben so lange bestehen, bis wir alle Worker-Locks // Nur wenn wirklich alle WebDAV-Prozess-Locks gesichert wurden, sind die
// wieder freigeben. Erst danach darf ein bewusst neu gestarteter Lauf den // Cancel-Dateien nicht mehr nötig. Bei einem Timeout bleiben sie bestehen,
// leeren Cache erneut aufbauen. // damit der noch laufende Worker nach seinem aktuellen Batch tatsächlich
// stoppt und das fehlgeschlagene Cache-Leeren nicht durch einen Folgebatch
// verschärft wird.
if ($webdav_guards_ready)
{
foreach ($webdav_cancel_files as $cancel) foreach ($webdav_cancel_files as $cancel)
{ {
@unlink($cancel); @unlink($cancel);
} }
}
bratonien_tools_atomic_cache_release_locks($held_locks); bratonien_tools_atomic_cache_release_locks($held_locks);
} }
} }