У меня странное поведение File::NFSLock в Perl v5.16. Я использую устаревшую опцию тайм-аута блокировки как 5 минут. Допустим, у меня есть три процесса. Одному из них потребовалось более 5 минут, прежде чем снять блокировку, и процесс 2 получил блокировку. Однако даже процесс 2 имеет блокировку менее 5 минут, приходит третий процесс и удаляет файл блокировки, что приводит к сбою второго процесса при удалении NFSLock, удерживаемого самим собой.
Моя теория гласит, что процесс 3 ошибочно считывает время последнего изменения блокировки как время, записанное процессом 1, а не процессом 2. Я пишу блокировку nfs для разделов, смонтированных на NFS.
У кого-нибудь есть идея или сталкивался с подобной проблемой с Perl NFSLock? Пожалуйста, обратитесь к приведенному ниже снимку
my $lock = new File::NFSLock {file => $file,
lock_type => LOCK_EX,
blocking_timeout => 50, # 50 sec
stale_lock_timeout => 5 * 60};# 5 min
$DB::single = 1;
if ($lock) {
$lock->unlock()
}
Если я блокирую в точке отладки для процесса 1 более 5 минут, я наблюдаю это поведение