shad-go/distbuild/pkg/artifact
2022-02-15 13:32:02 +03:00
..
cache.go Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
client.go Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
handler.go Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
README.md artifact.go README.md 2022-02-15 13:32:02 +03:00

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. Запишите в этот логгер интересные события, это поможет при отладке в следующих частях задачи.