Atomische Dateiveröffentlichung unter Windows
Das Headless-Speichern von Dokumenten bereitet eine exklusive Staging-Datei im Zielverzeichnis vor und flusht sie, bevor ihre vollständigen Bytes durch atomares Ersetzen veröffentlicht werden
Unter Windows erlauben vorübergehende Fehler mit ERROR_ACCESS_DENIED, ERROR_SHARING_VIOLATION und ERROR_LOCK_VIOLATION höchstens acht MoveFileEx-Versuche mit MOVEFILE_REPLACE_EXISTING und MOVEFILE_WRITE_THROUGH
Die Wartezeiten zwischen Versuchen betragen 1, 2, 4, 8, 16, 16 und 16 Millisekunden, zusammen höchstens 63 Millisekunden angeforderter Wartezeit; Betriebssystem-Scheduling und Syscall-Dauer bestimmen die tatsächlich verstrichene Zeit
Ein Abbruch wird vor jedem Versuch sowie vor und nach jeder Wartezeit beachtet; ein abgeschlossenes, erfolgreiches atomares Ersetzen ist die Veröffentlichungsgrenze
Dauerhafte Sperrung oder Zugriffsbeschränkungen bewahren das ursprüngliche Ziel und melden den zuletzt erfassten Windows-Fehler; andere Betriebssystemfehler schlagen sofort fehl
Fehlgeschlagene Dokumentspeicherungen räumen ihre eigenen Staging-Dateien auf; die Veröffentlichung löscht kein vorhandenes Ziel und fällt nicht auf eine Teil-Kopie zurück
Derselbe private Pfad veröffentlicht gewöhnliche Speicherungen, signierte PDFs und eigenständige Dokument-Timestamps; Linux nutzt weiterhin seinen fsync-und-rename-Pfad
Tatsächliche Abnahme
Tests halten echte Windows-File-Handles, die das Löschen verweigern, lösen eine vorübergehende Sperre auf einem anderen Thread, behalten dauerhafte Sperren bei, brechen während des Retry ab und versuchen ein Ersetzen gegen schreibgeschützte Dateien
Jedes Windows-Target führt außerdem 500 vollständige atomare Ersetzungen und 50 echte Dokumentspeicherungen mit nativem Neuladen durch, prüft die Source-Bytes und kontrolliert das Aufräumen der Staging-Dateien
Ein separater WinAPI-only-Probe reproduziert den ursprünglichen zeitweiligen Access-denied-Fehler ohne HotPDF oder Cairo; so wird die Veröffentlichungsgrenze identifiziert, ohne die Ursache einem unbeobachteten Prozess zuzuschreiben