Skip to content

bug(workspace): force-close connection upon query TimeoutException to prevent protocol errors #333

Description

@ZhuchkaTriplesix

Описание задачи

В рабочих пространствах выполнения SQL-запросов (postgres_sql_workspace.dart, mysql_sql_workspace.dart) при срабатывании тайм-аута выполнения запроса (TimeoutException) сокет подключения к серверу может оставаться в «отравленном» состоянии (когда клиент перестал ждать ответ, а сервер продолжает слать данные или удерживать транзакцию).

Зачем

  • Предотвратить критические сбои протокола (Packet sequence error в MySQL, рассинхронизацию потока данных в PostgreSQL) при выполнении следующих запросов через то же соединение после тайм-аута.
  • Гарантировать чистую и изолированную сессию после прерывания тяжелых запросов.

Предлагаемые изменения

  1. При возникновении TimeoutException или системных I/O ошибок во время выполнения запроса conn.execute(sql, timeout: to) в рабочих пространствах (PostgresSqlWorkspace, MysqlSqlWorkspace) принудительно разрывать соединение через unawaited(conn.forceClose()); или метод pool.interrupt(...).
  2. При следующем запросе пул автоматически откроет чистое соединение, исключая рассинхронизацию.

Технические требования

  • Обновить обработчики _execute() в lib/features/postgresql/postgres_sql_workspace.dart и lib/features/mysql/mysql_sql_workspace.dart, добавив отлов TimeoutException с принудительным закрытием текущего сокета.
  • Добавить unit-тест на корректное закрытие сокета при TimeoutException.

Место в коде (ориентир)

  • lib/features/postgresql/postgres_sql_workspace.dart
  • lib/features/mysql/mysql_sql_workspace.dart
  • lib/core/database/postgres_connection_pool.dart

Acceptance Criteria

  • Если запрос прерван по тайм-ауту, соединение закрывается (isConnected == false).
  • Следующий запрос в этой вкладке успешно открывает новое соединение и выполняется без ошибок протокола.

Scope

  • Scope: desktop
  • Component: Workspace / SQL Editor
  • Kind: bug

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions