Skip to content

bug(core): silent exception swallowing catch (_) {} hides disconnect errors and storage failures #272

Description

@ZhuchkaTriplesix

Summary / Описание проблемы

По всей кодовой базе приложения массово используются конструкции try { ... } catch (_) {}, которые полностью молча игнорируют возникающие исключения без какого-либо логирования или уведомления:

  1. При закрытии соединений (disconnect / forceClose): В postgres_connection.dart (~L160, ~L171), mysql_connection.dart (~L195, ~L209), sqlite_connection.dart (~L65) и redis_connection.dart (~L336). Если сокет завис или при закрытии транзакции происходит сетевой сбой, пул соединений считает соединение закрытым, хотя сокет может оставаться в ОС или приводить к утечкам ресурсов.
  2. При сборе статистики и работе с хранилищем: В postgres_connection.dart (~L382, ~L389) при опросе системных таблиц pg_postmaster_start_time() и pg_database_size(), а также в folders_storage.dart (~L59). При ошибках прав доступа к системным вьюхам или повреждении локальных файлов настроек приложение молча возвращает пустые данные или падает без записи в лог.

Scope & Component

  • Scope: desktop
  • Component: Core / Error Handling & Logging
  • Kind: bug
  • Severity: medium
  • Detected in version: dev / 0.5.0

Местоположение в коде

  • Файлы:
    • lib/core/database/postgres_connection.dart (L160, L171, L382, L389)
    • lib/core/database/mysql_connection.dart (L195, L209)
    • lib/core/database/sqlite_connection.dart (L65)
    • lib/core/database/redis_connection.dart (L336)
    • lib/core/storage/folders_storage.dart (L59)

Шаги воспроизведения

  1. Подключиться к PostgreSQL пользователем без прав чтения pg_database_size() или смоделировать сетевой сбой при вызове disconnect().
  2. Проверить консольные выводы и системные логи (flutter_*.log или debugPrint).
  3. Фактический результат: Никакой информации об ошибке нет, исключение «съедено» пустым блоком catch (_) {}.
  4. Ожидаемый результат: Все перехватываемые исключения в низкоуровневых драйверах и сервисах должны записываться через системный логгер (debugPrint или внутренний сервис логирования), чтобы облегчить отладку и анализ сбоев у пользователей.

Acceptance Criteria / Критерии приемки

  • Пустые блоки catch (_) {} в драйверах соединений (postgres, mysql, sqlite, redis) заменены на логирование (debugPrint('Error disconnecting ...: $e') или вызов централизованного логгера).
  • В folders_storage.dart и при сборе статистики добавлены записи в лог при возникновении ошибок чтения/выполнения запросов.

Metadata

Metadata

Labels

bugSomething isn't workingcoreCore library logic and services

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions