Pubblicazione atomica dei file su Windows
Il salvataggio dei documenti headless prepara e scarica un file di staging esclusivo nella directory di destinazione prima di pubblicarne i byte completi tramite sostituzione atomica
Su Windows, i fallimenti transitori ERROR_ACCESS_DENIED, ERROR_SHARING_VIOLATION e ERROR_LOCK_VIOLATION consentono al massimo otto tentativi di MoveFileEx con MOVEFILE_REPLACE_EXISTING e MOVEFILE_WRITE_THROUGH
Le attese tra i tentativi sono di 1, 2, 4, 8, 16, 16 e 16 millisecondi, per un totale di al massimo 63 millisecondi di attese richieste; la schedulazione del sistema operativo e la durata delle syscall determinano il tempo effettivamente trascorso
La cancellazione viene osservata prima di ogni tentativo e prima e dopo ogni attesa; una sostituzione atomica completata con successo è il confine della pubblicazione
Blocchi permanenti o restrizioni di accesso preservano la destinazione originale e riportano l'ultimo errore Windows catturato; gli altri errori del sistema operativo falliscono immediatamente
I salvataggi dei documenti falliti ripuliscono i loro file di staging; la pubblicazione non elimina una destinazione esistente né ripiega su una copia parziale
Lo stesso percorso privato pubblica salvataggi ordinari, PDF firmati e timestamp di documento autonomi; Linux continua a usare il suo percorso fsync e rename
Acceptance reale
I test trattengono veri handle Windows che negano la cancellazione, rilasciano un blocco transitorio su un altro thread, trattengono blocchi permanenti, cancellano durante il retry e tentano la sostituzione su file di sola lettura
Ogni target Windows esegue anche 500 sostituzioni atomiche complete e 50 salvataggi reali di documenti con ricaricamento nativo, preservando i byte della sorgente e controllando la pulizia dei file di staging
Una sonda separata solo WinAPI riproduce l'originale fallimento intermittente access-denied senza HotPDF o Cairo; questo identifica il confine della pubblicazione senza attribuire la causa a un processo non osservato