18 lines
1.6 KiB
Markdown
18 lines
1.6 KiB
Markdown
# filecache
|
||
|
||
Пакет `filecache` занимается хранением кеша файлов и определяет протокол передачи файлов между частями системы.
|
||
|
||
`filecache.Cache` управляет файлами и занимается контролем одновременного доступа. Вы можете реализовать этот
|
||
тип поверх `*artifact.Cache`, поведение требуется точно такое же.
|
||
|
||
## Передача файлов
|
||
|
||
Тип `filecache.Handler` реализует handler, позволяющий заливать и скачивать файлы из кеша.
|
||
|
||
- Вызов `GET /file?id=123` должен возвращать содержимое файла с `id=123`.
|
||
- Вызов `PUT /file?id=123` должен заливать содержимое файла с `id=123`.
|
||
|
||
**Обратите внимание:** Несколько клиентов могут начать заливать в кеш один и тот же набор файлов. В наивной реализации,
|
||
первый клиент залочит файл на запись, а следующие упадут с ошибкой. Ваш код должен обрабатывать эту ситуацию корректно,
|
||
то есть последующие запросы должны дожидаться, пока первый запрос завершится. Для реализации этой логики
|
||
поведения вам поможет пакет [singleflight](https://godoc.org/golang.org/x/sync/singleflight).
|