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`.
|
|
|
|
|
|
|
|
|
|
**Обратите внимание:** Несколько клиентов могут начать заливать в кеш один и тот же набор файлов. В наивной реализации,
|
|
|
|
|
первый клиент залочит файл на запись, а следующие упадут с ошибкой. Ваш код должен обрабатывать эту ситуацию корректно,
|
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).
|