Bug 45499

Summary: QMYSQL driver not loaded
Product: Branch p10 Reporter: Alexander Makeenkov <amakeenk>
Component: libmysqlclient21Assignee: Николай Костригин <nickel>
Status: NEW --- QA Contact: qa-p10 <qa-p10>
Severity: critical    
Priority: P5 CC: VadimZelenin, klark, rider, shevchenkodyu, zerg
Version: не указана   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
Отменяю Faster TLS model none

Description Alexander Makeenkov 2023-03-06 11:37:20 MSK
Версия пакета:
libmysqlclient21-8.0.30-alt1.1

Шаги воспроизведения:
# apt-get install python-module-PyQt4 libqt4-sql-mysql libmysqlclient21

Создать и запустить скрипт:
$ cat > test.py <<EOF
import sys
from PyQt4 import QtGui, QtCore, QtSql

appcore = QtCore.QCoreApplication(sys.argv)
db = QtSql.QSqlDatabase.addDatabase('QMYSQL')
EOF

$ python2 test.py

Получаемый результат:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QMYSQL3 QMYSQL

Примечание:
Ошибка не воспроизводится, если откатить libmysqlclient21 до версии 8.0.20-alt2
Comment 1 Sergey V Turchin 2023-03-07 16:49:59 MSK
Попробуйте с build#316279
Comment 2 Alexander Makeenkov 2023-03-07 16:55:05 MSK
(Ответ для Sergey V Turchin на комментарий #1)
> Попробуйте с build#316279

$ python2 test.py
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: 

Не помогло и "available drivers: " стало пустым.
Comment 3 Sergey V Turchin 2023-03-22 12:25:38 MSK
(Ответ для Alexander Makeenkov на комментарий #2)
> Не помогло и "available drivers: " стало пустым.
На чистом Qt4 и до обновления из build#316279 и после список драйверов не изменился.
Возможно, дело в PyQt4.
Comment 4 Sergey V Turchin 2023-03-22 12:30:40 MSK
(Ответ для Sergey V Turchin на комментарий #3)
> На чистом Qt4 и до обновления из build#316279 и после список драйверов не
> изменился.
Т.е. QMYSQL загружается корректно. Если попытаться использовать несуществующий драйвер, ругается:
QSqlDatabase: UNKNOWNSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL3 QMYSQL
Comment 5 Leonid Krivoshein 2023-03-23 15:40:23 MSK
Есть идеи, как чинить регрессию? Пока приходится откатывать libmysqlclient21.
Comment 6 Sergey V Turchin 2023-03-23 16:03:23 MSK
добавил в build#316279 пересборку python-module-PyQt4, авось поможет.
Comment 7 Sergey V Turchin 2023-03-23 17:45:41 MSK
(Ответ для Sergey V Turchin на комментарий #6)
> добавил в build#316279 пересборку python-module-PyQt4, авось поможет.
Не, не помогло.
Comment 8 Sergey V Turchin 2023-04-12 10:35:28 MSK
Может, посмотреть, какие изменения были в libmysqlclient21 и откатить что-то из этого?
Вдруг там что-то тривиальное?
Comment 9 Alexander Makeenkov 2023-11-28 13:17:33 MSK
Актуально для libmysqlclient21-8.0.35-alt1.1
Comment 10 Vadim Zelenin 2024-02-14 15:29:24 MSK
Столкнулся с этой проблемой,
нашёл в ltrace сообщение "cannot allocate memory in static TLS block"
далее нашёл https://bugs.mysql.com/bug.php?id=113029
совет оттуда 

$ LD_PRELOAD=/usr/lib64/libstdc++.so.6 python2 test.py

помогает, программа ругачих сообщений не пишет,
db создаёт, «print db.isValid()» печатает «True».

Товарищи из ubuntu вроде как решали подобную головоломку в 2020 году - 
https://bugs.launchpad.net/ubuntu/+source/opencv/+bug/1890170
https://bugs.launchpad.net/ubuntu/+source/mysql-8.0/+bug/1889851
Comment 11 Sergey V Turchin 2024-02-14 15:41:37 MSK
Видимо, mysql надо собирать с -ftls-model=initial-exec
Comment 12 Vadim Zelenin 2024-02-14 17:47:25 MSK
Created attachment 15555 [details]
Отменяю Faster TLS model
Comment 13 Vadim Zelenin 2024-02-14 17:59:02 MSK
(Ответ для Sergey V Turchin на комментарий #11)
> Видимо, mysql надо собирать с -ftls-model=initial-exec

Наоборот, для этой задачи нехорошо собирать mysql с tls-model=initial-exec.
патч приложил, у меня test.py заработал.
Comment 14 Vadim Zelenin 2024-04-15 12:46:15 MSK
Здравствуйте товарищи,
прошу пояснения по этой задаче.
Два месяца назад я предложил патч, который, как мне кажется, решает задачу.
Отсутствие реакции на этот патч несколько обескураживает.
Подскажите, пожалуйста, что пошло не так:
- я неправильно подал патч,
- этот патч не применим,
- этот патч не решает задачу,
- этот патч решает задачу, но создаёт новые,
- эту задачу правильнее решать изменениями в загрузчике (компиляторе, etc), поэтому решение из этого патча негодно,
- все кто способен проверить и как-то высказаться сильно заняты стратегическими задачами,
- эта задача совсем не важна, и необходимость даунгрейда libmysqlclient21 заботит только редких дятлов типа меня?
Comment 15 Шевченко Денис 2024-04-15 14:33:04 MSK
(Ответ для Vadim Zelenin на комментарий #14)
> Здравствуйте товарищи,
> прошу пояснения по этой задаче.
> Два месяца назад я предложил патч, который, как мне кажется, решает задачу.
> Отсутствие реакции на этот патч несколько обескураживает.
> Подскажите, пожалуйста, что пошло не так:
> - я неправильно подал патч,
> - этот патч не применим,
> - этот патч не решает задачу,
> - этот патч решает задачу, но создаёт новые,
> - эту задачу правильнее решать изменениями в загрузчике (компиляторе, etc),
> поэтому решение из этого патча негодно,
> - все кто способен проверить и как-то высказаться сильно заняты
> стратегическими задачами,
> - эта задача совсем не важна, и необходимость даунгрейда libmysqlclient21
> заботит только редких дятлов типа меня?

Добрый день, были собраны таски:
p10: https://packages.altlinux.org/ru/tasks/344380/ 
c10f1: https://packages.altlinux.org/ru/tasks/344393/

Сможете у себя проверить?
Comment 16 Vadim Zelenin 2024-04-15 15:43:55 MSK
(Ответ для Шевченко Денис на комментарий #15)
> Сможете у себя проверить?

для p10 - проверил, на первый взгляд всё работает.
с c10f1 проверить не могу - не располагаю.

Если бы подобый патч и до p9 дошёл, то тоже было бы хорошо - здесь тоже приходится даунгрейдить libmysqlclient21 :(
Comment 17 Шевченко Денис 2024-04-15 19:57:12 MSK
(Ответ для Vadim Zelenin на комментарий #16)
> (Ответ для Шевченко Денис на комментарий #15)
> > Сможете у себя проверить?
> 
> для p10 - проверил, на первый взгляд всё работает.
> с c10f1 проверить не могу - не располагаю.
> 
> Если бы подобый патч и до p9 дошёл, то тоже было бы хорошо - здесь тоже
> приходится даунгрейдить libmysqlclient21 :(

p9: https://packages.altlinux.org/ru/tasks/345206/
Comment 18 Vadim Zelenin 2024-04-16 11:01:18 MSK
(Ответ для Шевченко Денис на комментарий #17)
> p9: https://packages.altlinux.org/ru/tasks/345206/

Работает :)
Comment 19 Vadim Zelenin 2024-05-16 12:32:21 MSK
Простите за навязчивость,
просто прошёл ещё месяц.
Итого - три месяца назад я заслал патч решающий проблему,
месяц назад подтвердил что если этот патч применяет товарищ из alt , то он точно так же работает как если бы этот патч применял я сам.

Между прочим, эта проблема проявляется не только в python2+PyQt4, но и python3+PyQt5 и python3+PySide2.