shad-go/distbuild/pkg/artifact
2020-04-05 16:24:48 +03: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 Finish distbuild/pkg/filecache 2020-04-04 21:45:29 +03:00

artifact

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

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

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

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

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

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

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

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

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

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