shad-go/distbuild/pkg/artifact
2020-04-21 21:23:53 +00:00
..
cache.go Place build tags 2020-04-05 16:24:48 +03:00
cache_test.go Fix linter 2020-04-05 00:55:07 +03:00
client.go Place build tags 2020-04-05 16:24:48 +03:00
client_test.go Finish distbuild/pkg/artifact 2020-04-04 20:16:36 +03:00
handler.go Place build tags 2020-04-05 16:24:48 +03:00
README.md Update README.md 2020-04-21 21:23:53 +00: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. Запишите в этот логгер интересные события, это поможет при отладке в следующих частях задачи.