[Devel] Бага 3239

Evgeny Sinelnikov =?iso-8859-1?q?sin_=CE=C1_etersoft=2Eru?=
Чт Фев 26 00:56:53 MSK 2009


26 февраля 2009 г. 0:31 пользователь Pavel Shilovsky
<piastry на etersoft.ru> написал:
> On Wednesday 25 February 2009 23:17:15 Evgeny Sinelnikov wrote:
>> Здравствуйте.
>>
>> 25 февраля 2009 г. 22:44 пользователь Pavel Shilovsky
>>
>> <piastry на etersoft.ru> написал:
>> > Хочу прояснить ситуацию по этому вопросу.
>> > Version 0.72
>> > ------------
>> > Add resume key support to search (readdir) code to workaround
>> > Windows bug.  Add /proc/fs/cifs/LookupCacheEnable which
>> > allows disabling caching of attribute information for
>> > lookups.
>> >
>> > Это отрывок из файла CHANGES. Смысл такой: был введён параметр, который
>> > принудительно кешировал атрибуты файлов на 1 секунду - что собственно и
>> > подтвердили исследования Димы. Раньше существовала опция монтирования,
>> > отключающая это теперь же её убрали. Изменить поведение можно с помощью
>> > echo "0" > /proc/fs/cifs/LookupCacheEnabled от рута) Я пробовал - у меня
>> > заработало!
>>
>> В нашем случае не хотелось бы лишать себя всех кешей, если они влияют
>> на производительность... Вообще проблема ведь не в кешировании, как
>> таковом... А в особой ситуации, которая возникает с использованием
>> опций при создании каталогов (или любых файлов?)
>
> Любых файлов. И проблема именно в кешировании, а не в использовании отдельных
> опций. Любые изменения атрибутов айнода не будут применяться на сервер, пока
> не пройдёт одна(!) секунда. echo "0" > /proc/fs/cifs/LookupCacheEnabled -
> выключает это поведение. Сделано было это по всей видимости для того, чтобы не
> гонять лишний раз трафик.

Дело в том, что стоит различать изменения айнода вызванные действиями
клиента (для драйвера это процесс, его использующий) от изменений,
которые от действий пользователя не зависят. Проблема в том, что при
указании uid=XXX и не совпадении этого XXX на сервере в течении одной
секунды информация, которая представлена клиенту не валидна... Причём
к обновлению этот вообще не имеет никакого непосредственного
отношения... Ибо драйвер, которому указано подсовывать, вместо
серверного, другой uid не обновляет айноду в течении этой самой
секунды... Желая, работать с кешем, в самую первую секунду работы
драйвера, эта самая айнода не валидна... Драйвер же обманывает сам
себя да ещё и клиента в придачу...


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

Нет, никакая это не фича - это баг... Ещё раз прочти... Подумай...
Если не поможет, приходи - я завтра тебе объясню... ))

>>
>> Хотя workaround стоит проверить и использовать... У нас уже есть
>> механизм загрузки, туда можно этот костыль добавить... Но, в
>> дальнейшем (в смысле, не в далёком будущем, а в продолжении текущих
>> бесед в рассылках), хотелось бы разъяснить эту проблему деятелям,
>> придумавшим LookupCacheEnabled, и решить эту проблему менее
>> радикально.
>
> А что тут разъяснять? Они и так её понимают, потому и сделали возможность её
> отключить.
>

Они, а теперь уже вы вместе, как этот самый драйвер, обманываете сами
себя в первую секунду... Но этой секунды хватает, чтобы всё не
работало... :)

Оно может и должно работать в включенным кешем...


-- 
Sin (Sinelnikov Evgeny)


Подробная информация о списке рассылки devel