Summary: | Не работает CIFS на новой сборке | ||
---|---|---|---|
Product: | CIFS@Etersoft | Reporter: | Денис Баранов <baraka> |
Component: | блокировки файлов и доступ | Assignee: | Александр Морозов <amorozov> |
Status: | CLOSED FIXED | QA Contact: | Денис Баранов <baraka> |
Severity: | critical | ||
Priority: | P2 | CC: | sin |
Version: | не указана | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | 4132 | ||
Bug Blocks: | 493, 3043, 3589 |
Description
Денис Баранов
2009-07-16 21:12:06 MSD
Проблему с работой слэйва и мастера winelocktest на одной машине можно решить, если не открывать дополнительный файловый дескриптор (который используется для работы с блокировками на nfs) и устанавливать блокировку в set_unix_lock так, как это делалось раньше. Но после этих исправлений winelocktest в одиночном режиме всё ещё работает не совсем неправильно: G_R G_R G_R G_W G_W G_W G_R|W G_R|W G_R|W S_R S_W S_R|W S_R S_W S_R|W S_R S_W S_R|W G_R lVL F. lVL F. F. F. F. F. F. S_R G_R F. F. F. lVL F. Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[1, 2] - 2[2, 3] modes = 80000000/2/40000000/3 Fo F. F. F. S_W G_R lVL F. lVLTest failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[1, 3] - 2[2, 1] modes = 80000000/3/40000000/1 Fo F. Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[1, 3] - 2[2, 3] modes = 80000000/3/40000000/3 Fo Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[1, 3] - 2[3, 1] modes = 80000000/3/c0000000/1 Fo F. Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[1, 3] - 2[3, 3] modes = 80000000/3/c0000000/3 Fo S_R|W G_W F. lVL Fo F. F. F. F. F. F. S_R G_W F. F. F. F. lVL lVL F. F. F. S_W G_W F. lVL Fo F. Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[2, 3] - 2[2, 2] modes = 40000000/3/40000000/2 Fo lVL F. Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[2, 3] - 2[3, 2] modes = 40000000/3/c0000000/2 Fo Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and Windows XP GetLastError() = 0, but now it is 4. indexes = 1[2, 3] - 2[3, 3] modes = 40000000/3/c0000000/3 Fo S_R|W G_R|W F. F. lVL F. F. F. F. F. F. S_R G_R|W F. F. F. F. F. lVL F. F. F. S_W G_R|W F. F. lVL F. F. lVL F. F. lVL S_R|W От ошибки
> Test failed: Windows 95 sets GetLastError() = ERROR_SHARING_VIOLATION and
> Windows XP GetLastError() = 0, but now it is 4.
можно избавиться, если не вызывать set_concurlock в том случае, когда не удалось открыть файл.
Собрал 25/17. В одиночном режиме (без -s/-m) тоже наблюдаются ошибки: G_R lVL F. lVL F. F. F. F. F. F. S_R G_R F. F. F. lVL F. Fo F. F. F. S_W G_R lVL F. lVL Fo F. Fo Fo F. Fo S_R|W G_W F. lVL Fo F. F. F. F. F. F. S_R G_W F. F. F. F. lVL lVL F. F. F. S_W G_W F. lVL Fo F. Fo lVL F. Fo Fo S_R|W G_R|W F. F. lVL F. F. F. F. F. F. S_R G_R|W F. F. F. F. F. lVL F. F. F. S_W G_R|W F. F. lVL F. F. lVL F. F. lVL S_R|W Так что можно считать, что регрессия исправлена. Проблему с неудачным открытием файла (Fo в тесте) можно решить, если для CIFS закрывать файловые дескрипторы сразу, не ожидая, когда будут закрыты все дескрипторы для данного файла. CIFS так и не стал нормально работать. winelocktest в клиент-серверном варианте успешно завершается. При проверке через 1С77 - обнаруживается сразу ошибка: при входе 2 пользователей в базу у одного их них в Журнале пользователей не показывается второй. Так же winelocktest в одиночном варианте в большинстве случаев заканчивается неудачей: $ winelocktest Check M:Checked: This filesystem in usual, case sensitivity mode Start test as STANDALONE for lockfile.wine file... Info: Running on CIFS filesystem G_R G_R G_R G_W G_W G_W G_R|W G_R|W G_R|W S_R S_W S_R|W S_R S_W S_R|W S_R S_W S_R|W G_R lVL F. lVL F. F. F. F. F. F. S_R G_R F. F. F. lVL F. lVL F. F. F. S_W G_R lVL F. lVL lVL F. lVL lVL F. lVL S_R|W G_W F. lVL lVL F. F. F. F. F. F. S_R G_W F. F. F. F. lVL lVL F. F. F. S_W G_W F. lVL lVL F. lVL lVL F. lVL lVL S_R|W G_R|W F. F. lVL F. F. F. F. F. F. S_R G_R|W F. F. F. F. F. lVL F. F. F. S_W G_R|W F. F. lVL F. F. lVL F. F. lVL S_R|W wine-etersoft 1.0.11-eter2.1ubuntu wine-etersoft-sql 1.0.11-eter1ubuntu > Так же winelocktest в одиночном варианте в
> большинстве случаев заканчивается
> неудачей:
Где неудача?
(In reply to comment #6) > Где неудача? > По табличке ошибки наблюдаются и в конце таблички следующее: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WINE LOCK TEST FAILED for /home/baraka/.wine/dosdevices/m:/cifs/baraka_test/Test_winelock! (see table above) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! > При проверке через 1С77 - обнаруживается
> сразу ошибка: при входе 2 пользователей в
> базу у одного их них в Журнале
> пользователей не показывается второй.
Да, проблема есть. Запускаем первую 1С:
etersoft_sharing_open: /net/wine/bottles/peoples/amorozov/.wine-1c77/dosdevices/g:/amorozov/1c_base/SYSLOG/links.tmp -> 449
set_unix_lock: 449 2000000 - 2000001 F_SETLK F_WRLCK: ok
set_unix_lock: 449 2000001 - 2000002 F_SETLK F_WRLCK: ok
set_unix_lock: 449 2000000 - 2000001 F_SETLK F_UNLCK: ok
Запускам вторую 1С:
etersoft_sharing_open: /net/wine/bottles/peoples/amorozov/.wine-1c77_2/dosdevices/e:/amorozov/1c_base/SYSLOG/links.tmp -> 260
set_unix_lock: 260 2000000 - 2000001 F_SETLK F_WRLCK: ok
set_unix_lock: 260 2000001 - 2000002 F_SETLK F_WRLCK: errno 13
set_unix_lock: 260 2000002 - 2000003 F_SETLK F_WRLCK: ok
set_unix_lock: 260 2000000 - 2000001 F_SETLK F_UNLCK: ok
Смотрим в ней список активных пользователей:
etersoft_sharing_open: /net/wine/bottles/peoples/amorozov/.wine-1c77_2/dosdevices/e:/amorozov/1c_base/SYSLOG/links.tmp -> 317
set_unix_lock: 317 2000000 - 2000001 F_SETLK F_RDLCK: ok
set_unix_lock: 317 2000001 - 2000002 F_GETLK: already locked
set_unix_lock: 317 2000000 - 2000001 F_SETLK F_UNLCK: ok
Видим двух пользователей.
Смотрим список активных пользователей в первой 1С:
etersoft_sharing_open: /net/wine/bottles/peoples/amorozov/.wine-1c77/dosdevices/g:/amorozov/1c_base/SYSLOG/links.tmp -> 68
set_unix_lock: 68 2000000 - 2000001 F_SETLK F_RDLCK: ok
set_unix_lock: 68 2000002 - 2000003 F_SETLK F_RDLCK: ok
set_unix_lock: 68 2000002 - 2000003 F_SETLK F_UNLCK: ok
set_unix_lock: 68 2000000 - 2000001 F_SETLK F_UNLCK: ok
Видим одного пользователя. Блокировка, установленная при запуске второй 1С исчезла.
Блокировка, устанавливаемая 1C при открытии базы, сбрасывается при получении в ней списка активных пользователей. В этом можно убедиться с помощью простой программы, получающей информацию об установленных блокировках с помощью F_GETLK.
Блокировка сбрасывается при закрытии файлового дескриптора. Проблема со списком пользователей 1С исчезает, если откатить коммит server: Close CIFS file descriptors immediately. Но тогда появляется проблема с работой winelocktest в одиночном режиме: в некоторых случаях файлы не открываются, когда должны открываться. WINE@Etersoft 1.0.11 eter2.2/eter1, etercifs 4.3.8 eter1 1С7.7 работает без ошибок (блокировки работают). winelocktest по прежнему сообщает об ошибках. WINE@Etersoft 1.0.11 eter4/eter3 Проверка winelocktest заканчивается успехом. |