shad-go/distbuild/pkg/artifact/README.md
2022-03-08 18:56:54 +03:00

31 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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