shad-go/distbuild/pkg/artifact
2022-03-15 23:49:56 +03:00
..
cache.go go fix old build tags. 2022-03-15 23:49:56 +03:00
client.go go fix old build tags. 2022-03-15 23:49:56 +03:00
handler.go go fix old build tags. 2022-03-15 23:49:56 +03:00
README.md fix typo in distbuild/pkg/artifact 2022-03-08 18:56:54 +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. Запишите в этот логгер интересные события, это поможет при отладке в следующих частях задачи.