Описание задачи
В рабочих пространствах выполнения SQL-запросов (postgres_sql_workspace.dart, mysql_sql_workspace.dart) при срабатывании тайм-аута выполнения запроса (TimeoutException) сокет подключения к серверу может оставаться в «отравленном» состоянии (когда клиент перестал ждать ответ, а сервер продолжает слать данные или удерживать транзакцию).
Зачем
- Предотвратить критические сбои протокола (
Packet sequence error в MySQL, рассинхронизацию потока данных в PostgreSQL) при выполнении следующих запросов через то же соединение после тайм-аута.
- Гарантировать чистую и изолированную сессию после прерывания тяжелых запросов.
Предлагаемые изменения
- При возникновении
TimeoutException или системных I/O ошибок во время выполнения запроса conn.execute(sql, timeout: to) в рабочих пространствах (PostgresSqlWorkspace, MysqlSqlWorkspace) принудительно разрывать соединение через unawaited(conn.forceClose()); или метод pool.interrupt(...).
- При следующем запросе пул автоматически откроет чистое соединение, исключая рассинхронизацию.
Технические требования
Место в коде (ориентир)
lib/features/postgresql/postgres_sql_workspace.dart
lib/features/mysql/mysql_sql_workspace.dart
lib/core/database/postgres_connection_pool.dart
Acceptance Criteria
Scope
- Scope:
desktop
- Component:
Workspace / SQL Editor
- Kind:
bug
Описание задачи
В рабочих пространствах выполнения SQL-запросов (
postgres_sql_workspace.dart,mysql_sql_workspace.dart) при срабатывании тайм-аута выполнения запроса (TimeoutException) сокет подключения к серверу может оставаться в «отравленном» состоянии (когда клиент перестал ждать ответ, а сервер продолжает слать данные или удерживать транзакцию).Зачем
Packet sequence errorв MySQL, рассинхронизацию потока данных в PostgreSQL) при выполнении следующих запросов через то же соединение после тайм-аута.Предлагаемые изменения
TimeoutExceptionили системных I/O ошибок во время выполнения запросаconn.execute(sql, timeout: to)в рабочих пространствах (PostgresSqlWorkspace,MysqlSqlWorkspace) принудительно разрывать соединение черезunawaited(conn.forceClose());или методpool.interrupt(...).Технические требования
_execute()вlib/features/postgresql/postgres_sql_workspace.dartиlib/features/mysql/mysql_sql_workspace.dart, добавив отловTimeoutExceptionс принудительным закрытием текущего сокета.TimeoutException.Место в коде (ориентир)
lib/features/postgresql/postgres_sql_workspace.dartlib/features/mysql/mysql_sql_workspace.dartlib/core/database/postgres_connection_pool.dartAcceptance Criteria
isConnected == false).Scope
desktopWorkspace / SQL Editorbug