shad-go/distbuild/pkg/artifact/README.md
2020-04-21 21:23:53 +00:00

2.6 KiB
Raw Blame History

artifact

Пакет artifact реализует кеш хранения артефактов и протокол для передачи артефактов между воркерами.

Артефакт - это директория, содержащая в себе результат работы джоба. Артефакт может состоять из произвольного набора файлов и директорий.

Основной тип artifact.Cache занимается хранением артефактов на диске и контролем одновременного доступа. Все методы artifact.Cache должны быть concurrency safe.

Одна горутина может начать писать артефакт. Начало записи берёт лок на запись. Никто другой не может работать с артефактом, на который взят лок на запись. Горутина должна позвать commit или abort после того, как она закончила работать с артефактом.

commit помечает артефакт в кеш. abort отменяет запись артефакта, удаляя все данные.

После первого вызова commit, все последующие вызовы commit и abort должны ничего не делать.

Точно так же, после вызова abort, все последующие вызовы commit и abort должны ничего не делать.

Горутина может начать читать артефакт, позвав метод Get. Много горутин могут читать артефакт одновременно. Горутина должна позвать unlock, после того как она закончила работать с артефактом.

Скачивание артефакта

*artifact.Handler должен реализовывать один метод GET /artifact?id=1234. Хендлер отвечает на запрос содержимым артефакта в формате tarstream.

Функция Download должна скачивать артефакт из удалённого кеша в локальный.

Обратите внимание, что конструктор хендлера принимает *zap.Logger. Запишите в этот логгер интересные события, это поможет при отладке в следующих частях задачи.