yandex / tartifacts

:package: Create artifacts for your assemblies
MIT License
20 stars 9 forks source link

fix: 'Error: size mismatch' in watch mode #144

Closed eGavr closed 6 years ago

eGavr commented 6 years ago

cc @j0tunn

Проблема заключается в следующем race condition в режиме watch:

Необходимо добавить файл в архив. Создается readable стрим из содержимого этого файла, который передается в архиватор. Сейчас для оптимизации работы архиватора мы подсовываем stats этого файла, чтобы добавление файла в архив выполнилось быстрее (специфика реализации архиватора), НО если в файл что-то добавилось пока стрим не закрылся, то размер файла может измениться. В кишках архиватора есть проверка, которая берет stats.size у файла (а мы его явно предварительно передали) и проверяется, что размер добавленного содержимого в архив такой же как и этот stats.size. И вот эта проверка может падать по причине того, что в файл что-то дописалось, размер изменился (соответственно в архив попало больше данных) и не совпадает с переданным stats.size.

Решение: не передаем stats архиватор в режиме вотчинга.