LINUX.ORG.RU
ФорумAdmin

Samba<=>Linux: странное поведение кэширования?


0

0

Такая вот проблема: есть сервер с самбой, клиент с linux-2.6 с ядрёной
smbfs. Каталог экспортируется самбой и монтируется этим клиентом. На 
клиенте 2 процесса параллельно с некоторой периодичностью проверяют 
содержимое одного из файлов с сервера (файл маленький, меньше 
килобайта) и в соответствии с тем, что там записано, выполняют некие 
действия. Этот файл обновляется также по smb, но с другого хоста. Так 
вот: когда на "клиенте" эти 2 процесса работают параллельно, через 
некоторое время этот файл как будто "замораживается" в состоянии, 
которое он имел на некоторый момент времени, и последующие попытки 
чтения его всё время возвращают старое содержимое, даже после того, 
как он обновился на сервере. Это состояние сохраняется и далее, даже 
если прибить процессы - на клиенте файл не обновляется. На сервере при
этом содержимое файла обновляется нормально, связь клиента с сервером
тоже сохраняется (если на сервере создать новый файл - клиент его
увидит; но вот обновление "проблемного" файла - не воспринимает).
Судя по всему, проблема возникает, когда два процесса на клиенте 
пытаются открыть этот файл одновременно - если запустить только один 
из них, то всё работает без проблем. Проблем не возникает также если 
smb-ресурс с упомянутым файлом смонтировать 2 раза в разные каталоги, 
и разным процессам указать этот файл в них - тогда и при параллельном 
доступе всё работает нормально. Файл открывается только на чтение 
(std::ifstream(filename)).


Ещё после такого "замораживания" smbstatus на сервере показывает вот 
это (pusk - это тот самый файл):
Locked files:
Pid          DenyMode   Access      R/W        Oplock           SharePath           Name
--------------------------------------------------------------------------------
--------
17416        DENY_NONE  0x12019f    RDWR       NONE             /tmp/test   pusk   Sun May 13 19:26:12 2007

Этот файл так там и остаётся висеть пока не отмонтировать каталог.
На клиенте при этом lsof не показывает чтобы этот файл был открыт.

Пытался крутить разные параметры самбы, связанные с блокировкой
(oplock-и, режимы блокировки) - не помогает. Что ещё странно: если в
качестве сервера используется не самба, а оффтопик, то всё работает
без проблем.

В чём тут может быть дело? Это нормальное поведение или баг?
И если баг - то чего (ядрёного smbfs или самбы)?
★★

а может сделать два файла, что б каждый процесс работал со своим файлом.

Какая самба?

SlavikSS ★★
()
Ответ на: комментарий от SlavikSS

> а может сделать два файла, что б каждый процесс работал со своим файлом.

Ну в качестве временного решения я просто один ресурс смонтировал в два места - так работает нормально. Но всё же это костыль...

> Какая самба? Последняя, 3.0.24

slav ★★
() автор топика

Ну лок надо полагать вешает система которая смонтировала шару через smbfs (те два процесса в принципе лишь косвенно это дело спровоцировали). Я так понимаю что система не может нормально разрулить множественный доступ к смонтированной шаре.

Я бы, если честно, монтировал как cifs, а потом бы начинал искать грабли.

ЗЫ А что с оплоками Вы крутили?

Bebop ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.