Перестали правильно работать блокировки. winelocktest дает след результаты: Master: winelocktest -m Check Laraka_testC77 in single user mode... Checked: This filesystem in usual, case sensitivity mode Start test as MASTER 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 Slave: winelocktest -s Check L:\baraka_test\1C77 in single user mode... Checked: This filesystem in usual, case sensitivity mode Start test as SLAVE for lockfile.wine file... Test failed: couldn't create file "lockfile.wine" (err=4): Too many open files Test failed: couldn't create file "lockfile.wine" (err=4): Too many open files !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WINE LOCK TEST FAILED for /net/wine/bottles/1c77/.wine-1c77-eter29/dosdevices/l:/baraka_test/1C77! (see table above) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Проблему с работой слэйва и мастера 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 заканчивается успехом.