Bug 5572

Summary: Зависание 1С с базой на NFS при разрыве сети
Product: WINE@Etersoft Reporter: Калюхович Юрий <goga>
Component: Сетевые возможности ; TCP/IPAssignee: Александр Морозов <amorozov>
Status: CLOSED WONTFIX QA Contact: Денис Баранов <baraka>
Severity: critical    
Priority: P2 CC: hunte.r, lav, piastry, regan, shpigor
Version: 1.0.12   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 14282 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 5634    
Attachments: Вывод команды strace -p pid_процесса_1С
Вывод strace -p pid_процесса_1С на ALT Linux 4.1 Desktop
1-я ошибка, которую вывела 1С при разрыве связи
2-я ошибка, которую вывела 1С при разрыве связи

Description Калюхович Юрий 2010-05-13 11:54:52 MSD
протестировать/подтвердить зависание 1С7.7 с базой на NFS-ресурсе при разрыве сети (выдергиванием витой пары) с целью дальнейшего исправления.

правильное поведение (как в windows) - сообщение об ошибке и вылет
возможно, при использовании cifs будет все правильно?
Comment 1 Vitaly Lipatov 2010-05-13 15:34:15 MSD
Если NFS монтировать с параметрами soft,intr, то после таймаута соединение будет отваливаться и ошибка передаваться в программу с соответствующим результатом.

Тестировать ничего не надо. По умолчанию NFS бесконечно ждёт восстановления связи, поэтому при обращении к файлу возникает эффект «зависания».
Comment 2 hunte.r 2010-05-14 07:17:39 MSD
Мы монтируем NFS с параметрами rw,soft,sync,intr,timeo=3,retrans=2
Пробовали также подключение с параметрами только rw,soft,intr

На NFS-сервере для экспорта файловых ресурсов используются ключи rw,root_squash,no_subtree_check,sync

В случае разрыва связи обращение на клиенте NFS к сетевым ресурсам NFS завершается с ошибкой.
1С при разрыве связи "зависает", не отвечает на команды, в том числе kill -9 pid_процесса_1C. При восстановлении работы сети 1С "отвисает" и продолжает работу. 

Мы считаем, что такое поведение вредит целостности данных в таблицах базы 1С.
Comment 3 hunte.r 2010-05-14 07:29:41 MSD
Еще добавлю - операционная система OpenSuse 11.1
Просьба разобраться с вопросом. 
Comment 4 hunte.r 2010-05-14 07:36:42 MSD
Отвисает она не всегда, а в некоторых случаях:
Если идет активная работа с файлами (запись/чтение) то не отвисает, а если пассивная (открыт журнал документов для просмотра) то чаще всего отвисает.

Уже не раз подобные проблемы приводили к потере данных в таблицах 1С.
Comment 5 Vitaly Lipatov 2010-05-14 13:19:07 MSD
(In reply to comment #2)
> Мы монтируем NFS с параметрами
> rw,soft,sync,intr,timeo=3,retrans=2
> Пробовали также подключение с параметрами
> только rw,soft,intr
Вообще мы столкнулись с тем, что NFSv4 ведёт себя
лучше в случае пропадания сервера или его перезагрузки.
http://bugs.etersoft.ru/show_bug.cgi?id=5447

> В случае разрыва связи обращение на
> клиенте NFS к сетевым ресурсам NFS
> завершается с ошибкой.
> 1С при разрыве связи "зависает", не отвечает
> на команды, в том числе kill -9 pid_процесса_1C.
Вы не могли бы приложить вывод $ strace -p pid_процесса_1C
в этом случае?

> При восстановлении работы сети 1С
> "отвисает" и продолжает работу. 
Это поведение противоречит параметрам intr,soft
 
Будем воспроизводить.
Comment 6 hunte.r 2010-05-14 14:36:14 MSD
Created attachment 1699 [details]
Вывод команды strace -p pid_процесса_1С

Вот вывод команды strace до сосента отключения сетевого кабеля
Comment 7 hunte.r 2010-05-14 14:39:43 MSD
... вывод команды strace до момента
отключения сетевого кабеля

Последний эксперимент был проведен на операционной системе OpenSuse 11.2
Поведение 1С аналогично предыдущим экспериментам с OpenSuse 11.1
 

Comment 8 hunte.r 2010-05-17 07:58:49 MSD
Created attachment 1700 [details]
Вывод strace -p pid_процесса_1С на ALT Linux 4.1 Desktop

Это вывод strace -p pid_процесса_1С на ALT Linux 4.1 Desktop, версия Wine 1.0.11
При отключении кабеля 1С зависла (был открыт полный журнал документов). При включении кабеля, примерно через 10 секунд 1С отвисла, и продолжила работу в штатном режиме.

Мы можем предоставить вам копию нашей базы 1С, если это поможет разобраться с вопросом.
Comment 9 Vitaly Lipatov 2010-05-26 18:06:49 MSD
Насколько я понимаю, проблему следует сформулировать следующим образом:
При работе через NFS используется отложенная запись (кэширование на стороне клиента), что приводит к потере данных при разрыве соединения.

Тут важны следующие моменты:
1. За сколько времени до разрыва соединения производилась запись данных.
2. Насколько существенна реакция 1С на потерю связи  — ожидание возобновления связи, или выдача ошибки?

С нашей стороны, видимо, нужно провести эксперимент:
Сохранить документ (с проведением) и через секунду разорвать соединение.
После этого заново зайти в базу и проверить наличие записей.
Возможно, какие-то чудеса с flush?
Comment 10 hunte.r 2010-05-27 08:24:08 MSD
Мы думаем, что тут существенно именно то, что после восстановления связи до NFS-сервера 1С возобновляет работу с файлами как будто так и надо. При этом нарушается вся система блокировок файлов. Например, с другого компьютера можно войти монопольно. Т.е. клиент начинает работать с базой 1с несмотря на то что там уже кто то работает монопольно на момент востановления связи.
Comment 11 Денис Баранов 2010-05-27 15:43:00 MSD
(In reply to comment #9)
> С нашей стороны, видимо, нужно провести
> эксперимент:
> Сохранить документ (с проведением) и через
> секунду разорвать соединение.
> После этого заново зайти в базу и проверить
> наличие записей.
> Возможно, какие-то чудеса с flush?
> 

Протестировал на виртуальной машине:
смонтировал NFS-раздел с базой конфигурации.
запустил 1С, создал новый документ, провел его, отключил кабель, 1С ничего не выдало, просто висела, после подключения кабеля обратно работа без проблем возобновляется.
Comment 12 Денис Баранов 2010-05-27 15:44:28 MSD
Монтировал: mount -t nfs -o rw,soft,nointr cellar:/var/local/share /mnt/nfs/
Comment 13 Александр Морозов 2010-05-27 17:36:21 MSD
Экспериментировал с чтением с nfs-раздела.
Монтировал с параметрами rw,soft,intr.
Linux-программа, читающая с помощью pread, зависает на некоторое время в системном вызове, а затем тот завершается с ошибкой EIO. pread использовался, чтобы читать всё время с начала файла.
Win-программа зависает на ReadFile из-за того, что зависает read. Потом read возвращает EIO, и ReadFile возвращает ERROR_NOT_READY. Вызов CloseHandle также проходит довольно долго, так как подвисает wineserver: cначала на fstat, затем на close.
Comment 14 Александр Морозов 2010-05-27 18:53:27 MSD
При монтировании с rw,soft,intr 1С при разрыве связи на самом деле не зависает намертво, а иногда выдаёт ошибки. То есть при таких параметрах монтирования зависания при работе с файлами по nfs не происходит, просто очень большой таймаут.
Comment 15 Александр Морозов 2010-05-27 18:54:46 MSD
Created attachment 1710 [details]
1-я ошибка, которую вывела 1С при разрыве связи
Comment 16 Александр Морозов 2010-05-27 18:55:05 MSD
Created attachment 1711 [details]
2-я ошибка, которую вывела 1С при разрыве связи
Comment 17 Александр Морозов 2010-05-27 20:29:01 MSD
При монтировании с rw,soft,intr,timeo=1,retrans=1 ReadFile завершается сразу же, но на CloseHandle по-прежнему происходит зависание: fstat64 завершается сразу же, а вот close выполняется довольно долго. В случае с 1С при таких параметрах монтирования wineserver подвис на fcntl64, затем 1С вывела 2 сообщения об ошибках (см. скриншоты), потом окно 1С исчезло, wineserver подвис на close, далее процесс 1cv7s довольно долго что-то делал, я не дождался его завершения.
Comment 18 hunte.r 2010-06-01 05:44:43 MSD
(In reply to comment #14)
> При монтировании с rw,soft,intr 1С при разрыве
> связи на самом деле не зависает намертво, а
> иногда выдаёт ошибки. То есть при таких
> параметрах монтирования зависания при
> работе с файлами по nfs не происходит, просто
> очень большой таймаут.
> 

Да, это так и есть.. в некоторых случаях 1с показывает ошибку, скорее всего при попытке записывать в файл. В других случаях (когда документ просто для просмотра) при разрыве связи 1С зависает (или очень долго ждет ответа), а при восстановлении связи работа восстанавливается.
Comment 19 Александр Морозов 2010-06-01 21:33:27 MSD
Провёл ещё небольшой тест с UNIX-программой, читающей файл на NFS (rw,soft,intr,timeo=1,retrans=1). Если открыть файл на чтение-запись и установить блокировку на запись перед чтением, то при разрыве связи происходит длительное зависание на close. Блокировка после разрыва связи иногда сбрасывается, а иногда остаётся как будто навсегда. Если блокировку не ставить, то close завершается быстро. WINE, по-видимому, из-за блокировок и тормозит на close.

Сомневаюсь, что мы тут что-то можем изменить. Это подвисание - особенность NFS.
Comment 20 Vitaly Lipatov 2010-06-10 18:28:07 MSD
2 hunter.r:

И всё-таки, как воспроизвести ситуацию потери данных? Понятно, что если прервать связь в середине операции записи, то записываемые данные будут повреждены.

Мы пока не смогли понять, какое изменение вы от нас ждёте.
Comment 21 hunte.r 2010-06-25 06:27:59 MSD
(In reply to comment #20)
> 2 hunter.r:
> 
> И всё-таки, как воспроизвести ситуацию
> потери данных? Понятно, что если прервать
> связь в середине операции записи, то
> записываемые данные будут повреждены.
> 
> Мы пока не смогли понять, какое изменение
> вы от нас ждёте.
> 

Вообще мы начали разбираться с этими вещами всвязи с тем, что после перехода с Windows на Linux+wine@Etersoft в наших магазинах часто происходят непонятные вещи. Привиду самые типичные примеры:

1. Пропадают документы за произвольную дату например чеки из журнала чеков. Например в день продажи чек точно был в журнале, а через 2-3 дня или другое время он пропадает. Персоналу магазина и системному администратору приходится разбираться, перепроводить документы. Рабочий процесс очень усложнился.

2. Если на компьютере с базой 1С запустить какой-то отчет (заведующий магазином), то на других компьютерах 1С начинает очень медленно работать.

Рассмотренная ситуация с обрывом связи похоже может и не является причиной таких ошибок. Так что мы не в претензиях.
Спасибо, что потратили время на разбирательство.
Comment 22 Александр Морозов 2010-09-17 19:41:55 MSD
Закрываю, так как это особенность NFS, а не баг в WINE.
Comment 23 Marat Sharipov 2010-11-14 16:23:05 MSK
Закрываю