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

19 lines
1.6 KiB
Markdown
Raw Normal View History

2020-04-04 18:45:29 +00:00
# filecache
Пакет `filecache` занимается хранением кеша файлов и определяет протокол передачи файлов между частями системы.
`filecache.Cache` управляет файлами и занимается контролем одновременного доступа. Вы можете реализовать этот
тип поверх `*artifact.Cache`, поведение требуется точно такое же.
## Передача файлов
Тип `filecache.Handler` реализует handler, позволяющий заливать и скачивать файлы из кеша.
- Вызов `GET /file?id=123` должен возвращать содержимое файла с `id=123`.
- Вызов `PUT /file?id=123` должен заливать содержимое файла с `id=123`.
2022-03-06 02:06:00 +00:00
**Обратите внимание:** Несколько клиентов могут начать заливать в кеш один и тот же набор файлов. В наивной реализации
2020-04-04 18:45:29 +00:00
первый клиент залочит файл на запись, а следующие упадут с ошибкой. Ваш код должен обрабатывать эту ситуацию корректно,
2020-04-05 15:19:59 +00:00
то есть последующие запросы должны дожидаться, пока первый запрос завершится. Для реализации этой логики
2020-04-04 18:45:29 +00:00
поведения вам поможет пакет [singleflight](https://godoc.org/golang.org/x/sync/singleflight).