Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 6244 - Надо уйти от использования F_GETLK   Make a simular bug
Summary: Надо уйти от использования F_GETLK
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Сетевые файловые системы (show other bugs)
Version: 1.0.12
Hardware: PC All
: P3 normal
Target Milestone: ---
Assignee: Александр Морозов
QA Contact: Денис Баранов
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 3043 5991
  Show dependency treegraph
 
In work:
Reported: 2010-10-21 14:46 MSD by Александр Морозов
Modified: 2010-12-12 01:52 MSK (History)
2 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Александр Морозов 2010-10-21 14:46:29 MSD
Сейчас WINE@Etersoft не использует F_GETLK при работе с NFS. Надо сделать, чтобы F_GETLK не использовался и при работе с CIFS, так как он довольно медленно работает.
Comment 1 Александр Морозов 2010-11-09 14:49:23 MSK
Посмотрел, где используется F_GETLK. В закрытой части: в set_concurlock (проверка числа пользователей, работающих с одним файлом, лицензионное ограничение), в getc_lock. Эти функции используются при открытии файла. В открытой части: в set_unix_lock (установка блокировки), при работе с файлом /tmp/.wine-*/server-*/lock (думаю, это нам не интересно).

2 piastry@: что нам нужно оптимизировать: установку блокировки с помощью LockFile или открытие файла?
Comment 2 Pavel Shilovsky 2010-11-09 15:06:50 MSK
Любое использование GET_LK при работе через CIFS порождает два запроса на сервер, потому от него надо уходить везде, где это возможно - то есть и при открытии, и при установке блокировки.
Comment 3 Александр Морозов 2010-11-09 21:54:02 MSK
Функция getc_lock проверяет наличие блокировки либо с помощью двух F_SETLK, либо с помощью F_GETLK. Так что с ней, видимо, ничего не сделаешь.
Comment 4 Александр Морозов 2010-11-12 18:59:23 MSK
Заметил, что в случае с NFS функция set_concurlock вызывается 2 раза для одного и того же файла. Переделал.
Comment 5 Александр Морозов 2010-11-13 18:07:36 MSK
Ещё одно изменение, касающееся на самом деле NFS, а не CIFS.
Перенёс вызов release_lock в etersoft_sharing_post, где устанавливаются новые блокировки, ответственные за режим открытия файла. До этого мы могли сбросить блокировки, а новые не поставить (в случае выхода из check_sharing до вызова etersoft_sharing_post). Также сделал, чтобы release_lock использовала специально открытый для установки блокировок дескриптор.
Comment 6 Александр Морозов 2010-12-02 21:34:50 MSK
Сделал, чтобы в set_concurlock не использовалось F_GETLK (http://bugs.etersoft.ru/show_bug.cgi?id=6441).
Comment 7 Александр Морозов 2010-12-09 18:38:58 MSK
В set_unix_lock есть два места, в которых используется F_GETLK. В одно из них мы на CIFS не попадаем. В другое мы попадаем в случае файла, открытого только на чтение.
Comment 8 Александр Морозов 2010-12-09 19:57:37 MSK
Мне кажется, что установка блокировки на файл, открытый только на чтение - не очень частая ситуация. Она возникает в 1С7.7 при входе в некоторые базы (бутылка 1c77/1c77-scaner, конфигурация "Торговля+Склад") и при обновлении в мониторе пользователей. А для того, чтобы избежать использования F_GETLK в данном случае, придётся открывать дополнительный дескриптор, что не очень хорошо. Думаю, не стоит ничего делать с set_unix_lock, пока не выяснится, что это действительно узкое место.
Comment 9 Денис Баранов 2010-12-11 17:42:59 MSK
Принято.