Bug 7302

Summary: Проверить возможность использования нового механизма работы блокировок в WINE с CIFS
Product: CIFS@Etersoft Reporter: Pavel Shilovsky <piastry>
Component: блокировки файлов и доступAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact: Vitaly Lipatov <lav>
Severity: minor    
Priority: P4 CC: amorozov, bahalyan, baraka, lav, night, sin
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Deadline: 2011-05-31   

Description Pavel Shilovsky 2011-05-17 15:35:04 MSK
В баге http://bugs.etersoft.ru/show_bug.cgi?id=5798 был разработан новый механизм работы блокировок для WINE. Данный подход существенно увеличил скорость работы с блокировками, но неприменим для существующего режима wine в CIFS. Надо проверить можно ли подобрать конфигурацию, при которой данный режим может работать на CIFS.
Comment 1 Pavel Shilovsky 2011-05-17 21:02:39 MSK
Начали разбираться с amorozov@ с данной багой. Столкнулись с проблемой fstat на cifs, из-за которой блокировка устанавливалась от вайн сервера, а не приложения.
Comment 2 Pavel Shilovsky 2011-05-18 00:12:37 MSK
Разобрался с проблемой. Использовалась структура stat, у которой поле айнод номера 32 битное. При взаимодействии с Windows сервером  клиент получал номер 64 битный номер от сервера - происходило преполнение. При работе с Samba сервером проблем замечено не было.

Решений два:
1) добавить __USE_FILE_OFFSET64 перед #include <sys/stat.h>.
2) использовать структуру stat64.

Так же заметил, что в man по mount.cifs присутствует ошибка:
"Client generates inode numbers (rather than using the actual one from the server) by default"

На самом же деле по умолчанию в клиенте используются номера айнодов со стороны сервера. Написал об этом разработчикам.

После применения одного из этих подходов, первые три пункта работают.
Comment 3 Александр Морозов 2011-05-18 16:43:14 MSK
Добавил #define _FILE_OFFSET_BITS 64.

Сделал, чтобы новый механизм работы блокировок можно было включить на cifs, установив в "yes" переменную окружения WINECIFSWITHOUTPIDFORWARD. Также можно прописать export WINECIFSWITHOUTPIDFORWARD=yes в /etc/wine/config. Потом можно будет сделать, чтобы этот механизм работал по умолчанию.
Comment 4 Pavel Shilovsky 2011-05-19 11:18:12 MSK
amorozov@, а что по поводу 4-ого пункта проверки?
4) 1С:
4.1) монитор пользователей, блокировка документа, одновременнная проводка.
4.2) открытие документа на запись и печать документа на принтере - после
окончании печати документ всё ещё заблокирован, а после закрытия документа
блокировка снимается успешно (проверка на то, что программа печати не влияет на
блокировки установленные самой 1С).
Comment 5 Александр Морозов 2011-05-19 15:15:11 MSK
> 4.1) монитор пользователей, блокировка документа, одновременнная проводка.
Что подразумевается под блокировкой документа и одновременной проводкой? Можно по-подробнее?
Comment 6 Pavel Shilovsky 2011-05-19 15:37:24 MSK
(В ответ на comment #5)
> > 4.1) монитор пользователей, блокировка документа, одновременнная проводка.
> Что подразумевается под блокировкой документа и одновременной
> проводкой? Можно по-подробнее?

Блокировка: открытие документа на запись из одного клиента, из другого - невозможность открыть этот же документ.

Одновременная проводка: на обоих клиентах практически одновременно начинается проведение одного и того же документа.
Comment 7 Александр Морозов 2011-05-19 15:40:21 MSK
> Одновременная проводка: на обоих клиентах практически одновременно начинается
> проведение одного и того же документа.
А можно ещё поподробнее про проведение документа.
Comment 8 Pavel Shilovsky 2011-05-19 15:42:39 MSK
Как запустить проведение документа - вопрос к @night или @baraka.
Comment 9 Александр Морозов 2011-05-19 18:30:38 MSK
При входе в монитор пользователей 1С зависает.
Comment 10 Александр Морозов 2011-05-19 18:33:33 MSK
> При входе в монитор пользователей 1С зависает.
1С 7.7, база base77 в //winxp/Rarus (1С:Бухгалтерия 7.7. Типовая конфигурация, редакция 4.5, 1C/1Cv77_configs/Tipovaya/478_20.06).
Если подождать, то выводится ошибка "Ошибка блокировки файла an unnamed file".
Comment 11 Александр Морозов 2011-05-19 19:59:14 MSK
Проблема вызвана неудачей при установке эксклюзивной блокировки на файл, открытый только для чтения.
Comment 12 Александр Морозов 2011-05-19 21:56:47 MSK
> При входе в монитор пользователей 1С зависает.
Исправил.
Comment 13 Александр Морозов 2011-05-20 19:26:00 MSK
Проверил работу 1С 7.7 по пунктам, укзанным в комментарии 4. Всё ОК.
Одновременную проводку проверял как описано здесь: http://bugs.etersoft.ru/show_bug.cgi?id=3807#c5

При тестировании исользовал машины atlant (2.6.38-std-def-alt2), ALT Linux 5.0.2 school-master на virtualbox (2.6.32-std-def-alt20.M50P.1) и winxp.
Параметры монтирования и версия etercifs те же, что раньше (http://bugs.etersoft.ru/show_bug.cgi?id=5798#c49).
Comment 14 Alexandr 2011-05-26 13:26:30 MSK
(В ответ на comment #13)
> Проверил работу 1С 7.7 по пунктам, укзанным в комментарии 4. Всё ОК.
> Одновременную проводку проверял как описано здесь:
> http://bugs.etersoft.ru/show_bug.cgi?id=3807#c5
> 
> При тестировании исользовал машины atlant (2.6.38-std-def-alt2), ALT Linux
> 5.0.2 school-master на virtualbox (2.6.32-std-def-alt20.M50P.1) и winxp.
> Параметры монтирования и версия etercifs те же, что раньше
> (http://bugs.etersoft.ru/show_bug.cgi?id=5798#c49).

Когда примерно будет готова сборка с патчами по багам 5798 и 7302? А то везде все хорошо - обе баги 100% завершены и исправлены - а тестить-использовать нечего.. Последний раз проверял 24.05.11. Если после этого уже вышла тестовая сборка - прошу извинить..
Comment 15 Денис Баранов 2011-05-26 20:48:31 MSK
К сожалению testing сборки еще нету, в ближайшие пару дней будет.

(В ответ на comment #14)
> Когда примерно будет готова сборка с патчами по багам 5798 и 7302? А то везде
> все хорошо - обе баги 100% завершены и исправлены - а тестить-использовать
> нечего.. Последний раз проверял 24.05.11. Если после этого уже вышла тестовая
> сборка - прошу извинить..
Comment 16 Pavel Shilovsky 2011-05-26 21:09:58 MSK
Заключение по данному вопросу: для правильной работы в новом режиме CIFS нужен механизм кэширования блокировок (наработки можно взять отсюда http://bugs.etersoft.ru/show_bug.cgi?id=5442), так как:

VFS ядра имеет такую неприятную особенность - сбрасывать кэш когда ему покажется что его слишком много при этом сбрасывает оно от нулевого процесса. Если раньше можно было просто выставить пид от процесса открывшего файл(сохранённый в данных о файловом дескрипторе)
то теперь нельзя выяснить, какой пид выставлять, чтобы не обломиться о собственную блокировку, так как по новому режиму блокировку ставит сам wine процесс. Если же все блокировки будут обрабатываться локально, то всё ок - можно сбрасывать данные под любым пидом.

Всё вышесказанное справедливо при режиме работы одного пользователя. Когда два пользователя и на файле есть блокировки - кэш не используется вообще. Так же следует добавить, что такой режим необходим для правильной работы с жёсткими блокировками реализации нового режима кэширования из SMB2.1 в CIFS клиенте.
Comment 17 Vitaly Lipatov 2011-05-27 13:27:27 MSK
(В ответ на comment #3)
> Добавил #define _FILE_OFFSET_BITS 64.
Так и не понял, куда добавил, вроде это везде (и в открытой и закрытой части) и так было.
Comment 18 Александр Морозов 2011-05-27 13:30:32 MSK
> > Добавил #define _FILE_OFFSET_BITS 64.
> Так и не понял, куда добавил, вроде это везде (и в открытой и закрытой части) и
> так было.
В lib/fd.c в закрытой части.