Блокировка на стороне клиента NFS для файла, в данный момент записываемого на удаленный сервер NFS

Я смонтировал монтирование NFS на своем локальном компьютере (поэтому я полагаю, что мой компьютер является клиентом NFS), и файл записывается в монтирование NFS удаленной машиной, на которой размещено монтирование NFS (сервер NFS). Теперь, как я смогу определить с помощью JAVA, что файл, на который выполняется запись на удаленном компьютере, был закрыт до того, как я начал читать с локального компьютера?

Или есть ли альтернативные способы добиться того, чего я хочу?

Изменить: я также хотел бы отметить, что я не имею никакого контроля над удаленным сервером NFS. Я могу монтировать только в режиме только для чтения.

1 ответ

Решение

Поскольку вы заявили, что у вас нет контроля ни над сервером NFS, ни за программой, обновляющей файл на сервере NFS, вы ничего не можете сделать. Единственное, что вы действительно можете использовать, это тот факт, что при обновлении файла время его обновления обновляется. Это должно быть доступно для вашего Java-клиента с помощью File.lastModified(). Если ваше приложение запоминает дату последнего изменения, вы можете хотя бы узнать, есть ли данные для обработки с момента последнего чтения. Это определенно не идеально. Есть условия гонки и т. Д., Но в зависимости от того, что именно требуется / делает ваше приложение, этого может быть достаточно. Вы не можете сказать, если файл закрыт или открыт на сервере.

Если изменения файла появляются медленно, вы также можете подключить, используя опцию noac mount. Хотя это ухудшает производительность NFS на обычном клиенте NFS, оно может работать для вас, если ваша машина не использует много других файлов NFS на этом диске. Смотрите " man nfs ".

Как примечание, я не вижу, что блокировка файла поможет, поскольку вы не указали, что приложение на сервере NFS все равно использует блокировки.

Другие вопросы по тегам