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
Начали разбираться с amorozov@ с данной багой. Столкнулись с проблемой fstat на cifs, из-за которой блокировка устанавливалась от вайн сервера, а не приложения. Разобрался с проблемой. Использовалась структура 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" На самом же деле по умолчанию в клиенте используются номера айнодов со стороны сервера. Написал об этом разработчикам. После применения одного из этих подходов, первые три пункта работают. Добавил #define _FILE_OFFSET_BITS 64. Сделал, чтобы новый механизм работы блокировок можно было включить на cifs, установив в "yes" переменную окружения WINECIFSWITHOUTPIDFORWARD. Также можно прописать export WINECIFSWITHOUTPIDFORWARD=yes в /etc/wine/config. Потом можно будет сделать, чтобы этот механизм работал по умолчанию. amorozov@, а что по поводу 4-ого пункта проверки? 4) 1С: 4.1) монитор пользователей, блокировка документа, одновременнная проводка. 4.2) открытие документа на запись и печать документа на принтере - после окончании печати документ всё ещё заблокирован, а после закрытия документа блокировка снимается успешно (проверка на то, что программа печати не влияет на блокировки установленные самой 1С). > 4.1) монитор пользователей, блокировка документа, одновременнная проводка.
Что подразумевается под блокировкой документа и одновременной проводкой? Можно по-подробнее?
(В ответ на comment #5) > > 4.1) монитор пользователей, блокировка документа, одновременнная проводка. > Что подразумевается под блокировкой документа и одновременной > проводкой? Можно по-подробнее? Блокировка: открытие документа на запись из одного клиента, из другого - невозможность открыть этот же документ. Одновременная проводка: на обоих клиентах практически одновременно начинается проведение одного и того же документа. > Одновременная проводка: на обоих клиентах практически одновременно начинается
> проведение одного и того же документа.
А можно ещё поподробнее про проведение документа.
Как запустить проведение документа - вопрос к @night или @baraka. При входе в монитор пользователей 1С зависает. > При входе в монитор пользователей 1С зависает.
1С 7.7, база base77 в //winxp/Rarus (1С:Бухгалтерия 7.7. Типовая конфигурация, редакция 4.5, 1C/1Cv77_configs/Tipovaya/478_20.06).
Если подождать, то выводится ошибка "Ошибка блокировки файла an unnamed file".
Проблема вызвана неудачей при установке эксклюзивной блокировки на файл, открытый только для чтения. > При входе в монитор пользователей 1С зависает.
Исправил.
Проверил работу 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 #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. Если после этого уже вышла тестовая сборка - прошу извинить.. К сожалению testing сборки еще нету, в ближайшие пару дней будет. (В ответ на comment #14) > Когда примерно будет готова сборка с патчами по багам 5798 и 7302? А то везде > все хорошо - обе баги 100% завершены и исправлены - а тестить-использовать > нечего.. Последний раз проверял 24.05.11. Если после этого уже вышла тестовая > сборка - прошу извинить.. Заключение по данному вопросу: для правильной работы в новом режиме CIFS нужен механизм кэширования блокировок (наработки можно взять отсюда http://bugs.etersoft.ru/show_bug.cgi?id=5442), так как: VFS ядра имеет такую неприятную особенность - сбрасывать кэш когда ему покажется что его слишком много при этом сбрасывает оно от нулевого процесса. Если раньше можно было просто выставить пид от процесса открывшего файл(сохранённый в данных о файловом дескрипторе) то теперь нельзя выяснить, какой пид выставлять, чтобы не обломиться о собственную блокировку, так как по новому режиму блокировку ставит сам wine процесс. Если же все блокировки будут обрабатываться локально, то всё ок - можно сбрасывать данные под любым пидом. Всё вышесказанное справедливо при режиме работы одного пользователя. Когда два пользователя и на файле есть блокировки - кэш не используется вообще. Так же следует добавить, что такой режим необходим для правильной работы с жёсткими блокировками реализации нового режима кэширования из SMB2.1 в CIFS клиенте. (В ответ на comment #3) > Добавил #define _FILE_OFFSET_BITS 64. Так и не понял, куда добавил, вроде это везде (и в открытой и закрытой части) и так было. > > Добавил #define _FILE_OFFSET_BITS 64.
> Так и не понял, куда добавил, вроде это везде (и в открытой и закрытой части) и
> так было.
В lib/fd.c в закрытой части.
|