Publication atomique de fichiers sous Windows

La sauvegarde des documents headless prépare et vide un fichier de staging exclusif dans le répertoire de destination avant de publier ses octets complets par remplacement atomique

Sous Windows, les échecs transitoires ERROR_ACCESS_DENIED, ERROR_SHARING_VIOLATION et ERROR_LOCK_VIOLATION autorisent au plus huit tentatives MoveFileEx avec MOVEFILE_REPLACE_EXISTING et MOVEFILE_WRITE_THROUGH

Les attentes entre tentatives sont de 1, 2, 4, 8, 16, 16 et 16 millisecondes, soit au plus 63 millisecondes d'attentes demandées ; l'ordonnancement du système d'exploitation et la durée des syscalls déterminent le temps réellement écoulé

L'annulation est observée avant chaque tentative et avant et après chaque attente ; un remplacement atomique réussi et terminé constitue la frontière de publication

Un verrouillage permanent ou des restrictions d'accès préservent la destination d'origine et signalent la dernière erreur Windows capturée ; les autres erreurs du système d'exploitation échouent immédiatement

Les sauvegardes de documents en échec nettoient leurs fichiers de staging ; la publication ne supprime pas une destination existante et ne retombe pas sur une copie partielle

Le même chemin privé publie les sauvegardes ordinaires, les PDF signés et les horodatages de documents autonomes ; Linux continue d'utiliser son chemin fsync et rename

Acceptation réelle

Les tests détiennent de vrais handles de fichiers Windows refusant la suppression, libèrent un verrou transitoire sur un autre thread, conservent des verrous permanents, annulent pendant les tentatives et essayent un remplacement en lecture seule

Chaque cible Windows effectue aussi 500 remplacements atomiques complets et 50 sauvegardes réelles de documents avec relecture native, en préservant les octets du source et en vérifiant le nettoyage des fichiers de staging

Une sonde séparée utilisant uniquement la WinAPI reproduit la panne d'origine intermittente d'accès refusé sans HotPDF ni Cairo ; cela identifie la frontière de publication sans attribuer la cause à un processus non observé

SaveToFile · Workflows de signature