Проблема: если система удалила файл, а затем упала при обработке, данные потеряны навсегда. Решение: атомарное переименование (rename) — дешёвая и надёжная операция на большинстве файловых систем.
Алгоритм:
Заметить файл
data.csv.Переименовать в
data.csv.processing (показывает, что файл взят в работу).Обработать содержимое.
Если успех — удалить
data.csv.processing.Если ошибка — переименовать обратно в
data.csv (или в data.csv.error для ручного разбора).Почему это лучше, чем просто перемещать в
failed – потому что переименование идемпотентно, и даже при падении в середине процесса файл не теряется.Реальный пример: В банковской интеграции с партнёрами используется паттерн
*.inprogressдля файлов, которые читаются в текущий момент.Вывод: Аналитик должен закладывать в требования двухстадийную обработку для любых интеграций через файловые обменники.