У меня есть процесс, который непрерывно записывает файлы в структуру каталогов, которая выглядит так:
152527
├── 1525270000000
│ ├── 01be6dc0b6e3e087.json
│ ├── 067e2490bb7ee05c.json
│ ├── 15ec3513bf7deef6.json
├── 1525270010000
│ ├── 01be6dc0b6e3e087.json
│ ├── 067e2490bb7ee05c.json
│ ├── 15ec3513bf7deef6.json
...
В каталоги записаны серии креплений, /mnt/fs_01
, /mnt_fs_02
, /mnt/fs_03
, все объединено в доступный только для чтения overlayfs
из /mnt/fs_all
.
Набор процессов одновременно записывает на одну точку монтирования; тот же набор процессов читает из объединенного /mnt/fs_all
. (Это приложение uWSGI.)
Проблема в том, что довольно часто новый каталог создается в базовой файловой системе, но не отображается при чтении.
В документация на overlayfs
упоминает:
Когда к объединенному каталогу делается запрос «readdir», каждый из верхних и нижних каталогов читается, а списки имен объединяются очевидным образом (сначала читается верхний, затем нижний - уже существующие записи не добавляются повторно). Этот объединенный список имен кэшируется в «файле структуры» и остается таким, пока файл остается открытым. Если каталог открывается и читается двумя процессами одновременно, каждый из них будет иметь отдельные кеши. Seekdir в начало каталога (смещение 0), за которым следует readdir, приведет к тому, что кеш будет отброшен и перестроен.
Это означает, что изменения в объединенном каталоге не появляются во время чтения каталога. Вряд ли многие программы заметят это.
К сожалению, это замечено моей программой.
Я могу реализовать seekdir
предложение, но я бы предпочел полностью отключить кеш, если это возможно.
Есть ли способ сделать это?