shad-go/distbuild/pkg/artifact/README.md

32 lines
2.6 KiB
Markdown
Raw Normal View History

2020-04-04 17:16:36 +00:00
# artifact
Пакет `artifact` реализует кеш хранения артефактов и протокол для передачи артефактов между воркерами.
Артефакт - это директория, содержащая в себе результат работы джоба. Артефакт может состоять из произвольного
набора файлов и директорий.
Основной тип `artifact.Cache` занимается хранением артефактов на диске и контролем одновременного доступа.
2020-04-04 18:45:29 +00:00
Все методы `artifact.Cache` должны быть *concurrency safe*.
2020-04-04 17:16:36 +00:00
Одна горутина может начать писать артефакт. Начало записи берёт лок на запись. Никто другой не может работать с артефактом,
на который взят лок на запись. Горутина должна позвать `commit` или `abort` после того, как она закончила работать с артефактом.
2021-05-13 12:26:42 +00:00
`commit` помещает артефакт в кеш. `abort` отменяет запись артефакта, удаляя все данные.
2020-04-04 17:16:36 +00:00
2022-03-06 00:17:41 +00:00
После первого вызова `commit` все последующие вызовы `commit` и `abort` должны ничего не делать.
2020-04-21 21:23:53 +00:00
2022-03-06 00:17:41 +00:00
Точно так же, после вызова `abort` все последующие вызовы `commit` и `abort` должны ничего не делать.
2020-04-21 21:23:53 +00:00
2020-04-04 17:16:36 +00:00
Горутина может начать читать артефакт, позвав метод `Get`. Много горутин могут читать артефакт одновременно.
Горутина должна позвать `unlock`, после того как она закончила работать с артефактом.
## Скачивание артефакта
`*artifact.Handler` должен реализовывать один метод `GET /artifact?id=1234`. Хендлер отвечает на
запрос содержимым артефакта в формате `tarstream`.
Функция `Download` должна скачивать артефакт из удалённого кеша в локальный.
Обратите внимание, что конструктор хендлера принимает `*zap.Logger`. Запишите в этот логгер интересные события,
это поможет при отладке в следующих частях задачи.