Как заставить обновить кеш-память NFS при проверке вновь созданного файла?

Когда файл создается на общем носителе Linux NFS, клиент является либо машинами Linux o r mac. Существование или отсутствие файла является ключом к тому, что делать дальше, но проверка не всегда возвращает правильный результат:

Например, я делаю это в perl, это все еще не работает, esp с машинами Mac

write_key_file();  # write a file that must be checked before proceeding

Следующие проверки не всегда могут возвращать true, когда файл существует

Ошибка - эта команда в perl не вернула правильный статус в системе NFS:

if( -e $file){}

Перегретое решение, которое не работает:

 sleep(5);   # wait 5 seconds
 system("ls -ltr"); # force to cache?
 if(-e $file){}

Я не собираюсь проверять каждый файл, как это, но есть несколько ключевых мест, где важно получить правильный статус файла.

Есть ли у нас лучшие способы принудительного обновления кэша nfs для определенного файла в определенном каталоге? Спасибо.

Я не уверен, что это проблема XY, но есть несколько слабых точек, которые могут быть решениями.

Настройка клиентов A-NFS

Если на этом этапе есть решение, было бы здорово!

B - exit_code или код возврата функции записи

$exit_code = write_key_file();

Проблема с ним, а не все записи, входят в область кода. это только решает часть проблемы.

C - Отключить кеш-память NFS для определенного файла или каталога для проверки файлов

Мне нужно убедиться, что это возможно и как? если нет и почему?

и я открыт для всех возможных решений, без решения или других возможностей.

Ответ 1

<суб > Это решение относится к Категория B: exit_code или код возврата функции записи

... только open() и fopen() должны гарантировать, что они получат согласованный дескриптор определенного файла для чтения и записи. stat и друзья не обязаны извлекать свежие атрибуты. Таким образом, для когерентности с близким к открытому кэшу только open() и fopen() считаются "открытым событием", в котором свежие атрибуты должны быть получены сразу с сервера [1].


суб > <Суб > Следующие решения относятся к настройкам Категория A: NFS
т.е. если вы НЕ ожидаете, что кэшированные записи файла /dir будут обслуживаться клиентом, отключите кеширование. Суб >

Настройка общего кэша

Если файл в монтировании NFS (чье существование проверяется) создается другим приложением на одном клиенте (возможно, с использованием другой точки монтирования для одного и того же экспорта NFS), рассмотрите возможность использования одного общего кэша NFS на клиенте.

Используйте параметр sharecache для настройки монтирования NFS на клиенте.

Этот параметр определяет, как общий доступ к кешу данных клиента и кэш-атрибутов используется при одновременном монтировании одного и того же экспорта. Использование одного и того же кеша уменьшает требования к памяти на клиенте и представляет идентичное содержимое файла для приложений, когда к одному и тому же удаленному файлу обращаются через различные точки монтирования.


Настройка NFS-mount без кеширования

Отключить кэширование атрибутов.

Смонтируйте общий ресурс NFS на клиенте с опцией noac.

В качестве альтернативы отключите кешированные атрибуты каталога от обслуживания.

Используйте acdirmin=0,acdirmax=0, чтобы установить тайм-ауты кеша в 0 (эффективно отключить кеширование).


Настройка NFS-mount для игнорирования кэшей поиска

Используйте lookupcache=positive ИЛИ lookupcache=none

(доступные опции: all, positive и none)

При попытке получить доступ к записи каталога над монтированием NFS,
если запрошенная запись каталога существует на сервере, результат называется positive.
если запрошенная запись каталога не существует на сервере, результат называется negative.

Если параметр lookupcache не указан или если указан all, клиент предполагает, что оба типа записей кэша каталога действительны до истечения срока действия кэшированных атрибутов родительского каталога.

Если указано pos или positive, клиент предполагает, что положительные записи действительны до истечения срока их кэширования атрибутов родительского каталога, но всегда переоценивает отрицательные значения перед тем, как приложение может их использовать.

Если указано none, клиент проверяет оба типа записей кэша каталога, прежде чем приложение сможет их использовать. Это позволяет быстро обнаруживать файлы, которые были созданы или удалены другими клиентами, но может влиять на производительность приложений и серверов.


<суб > Ссылки:
1. Согласование непрерывности кэша с открытым коннектором в Linux NFS-клиенте
2. NFS - программно обнаружение удаленных файлов? 3. Кэш NFS: содержимое файла не обновляется на клиенте при его изменении на сервере
4. Персональная страница NFS. Особенно рекомендуется "Согласование данных и метаданных" .
Суб >