Что произойдет, если я заблокирую файл, расположенный в удаленном хранилище, через fcntl?

Мне просто интересно. У меня есть два процесса на двух разных серверах. Эти процессы записывают информацию в один и тот же файл и используют блокировку через fcntl для синхронизации. Что произойдет, если один из процессов будет прерван и ему принадлежит блокировка файла? Как сервер NFS будет уведомлен о том, что этот процесс умер?


person user275402    schedule 25.12.2015    source источник


Ответы (1)


Прочтите http://man7.org/linux/man-pages/man2/fcntl.2.html

Блокировка записи и NFS До Linux 3.12, если клиент NFSv4 теряет связь с сервером в течение определенного периода времени (определяемого как более 90 секунд без связи), он может потерять и восстановить блокировку, даже не подозревая об этом. (Период времени, после которого контакт считается потерянным, называется временем аренды NFSv4. На сервере Linux NFS это можно определить, просмотрев /proc/fs/nfsd/nfsv4leasetime, который выражает период в секундах. Значение по умолчанию для этого файла — 90.) Этот сценарий потенциально может привести к повреждению данных, поскольку другой процесс может получить блокировку в промежуточный период и выполнить файловый ввод-вывод.

Начиная с Linux 3.12, если клиент NFSv4 теряет связь с сервером, любой ввод-вывод к файлу процессом, который «думает», что он удерживает блокировку, будет завершаться ошибкой, пока этот процесс не закроет и снова не откроет файл. Для параметра ядра nfs.recover_lost_locks можно установить значение 1, чтобы получить поведение до версии 3.12, когда клиент будет пытаться восстановить потерянные блокировки при восстановлении связи с сервером. Из-за сопутствующего риска повреждения данных этот параметр имеет значение по умолчанию. на 0 (отключено).

Если процесс завершится, все блокировки, удерживаемые процессом, будут сняты.

Я думаю, что это ответ, который вы ожидали

person Punit Vara    schedule 25.12.2015