Atomowa publikacja plików w Windows

Zapis dokumentu headless przygotowuje i flushuje wyłączny plik staging w katalogu docelowym przed publikacją jego kompletnych bajtów przez atomową podmianę

Na Windows przejściowe niepowodzenia ERROR_ACCESS_DENIED, ERROR_SHARING_VIOLATION i ERROR_LOCK_VIOLATION dopuszczają co najwyżej osiem prób MoveFileEx z MOVEFILE_REPLACE_EXISTING i MOVEFILE_WRITE_THROUGH

Oczekiwania między próbami wynoszą 1, 2, 4, 8, 16, 16 i 16 milisekund, łącznie co najwyżej 63 milisekundy żądanych oczekiwań; szeregowanie systemu operacyjnego i czas syscall określają rzeczywisty upływ czasu

Anulowanie jest obserwowane przed każdą próbą i przed oraz po każdym oczekiwaniu; ukończona udana atomowa podmiana jest granicą publikacji

Trwałe blokady albo ograniczenia dostępu zachowują oryginalny cel i raportują ostatnio przechwycony błąd Windows; inne błędy systemu operacyjnego zawodzą natychmiast

Nieudane zapisy dokumentu sprzątają swoje posiadane pliki staging; publikacja nie usuwa istniejącego celu ani nie schodzi do częściowej kopii

Ta sama prywatna ścieżka publikuje zwykłe zapisy, podpisane PDF-y i samodzielne znaczniki czasu dokumentu; Linux nadal używa swojej ścieżki fsync i rename

Rzeczywista akceptacja

Testy utrzymują prawdziwe uchwyty plików Windows odmawiające usunięcia, zwalniają przejściową blokadę na innym wątku, utrzymują trwałe blokady, anulują podczas ponawiania i próbują podmiany tylko do odczytu

Każdy cel Windows wykonuje też 500 kompletnych atomowych podmian i 50 rzeczywistych zapisów dokumentu z natywnym ponownym wczytaniem, zachowując bajty źródła i sprawdzając sprzątanie plików staging

Osobna sonda tylko WinAPI odtwarza oryginalną przerywaną awarię odmowy dostępu bez HotPDF ani Cairo; identyfikuje to granicę publikacji bez przypisywania przyczyny nieobserwowanemu procesowi

SaveToFile · Workflow podpisywania