From 0745fbc53c23cc97d85b29f30c2662dcd353afd2 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Mon, 13 Jul 2026 09:30:33 +0800 Subject: [PATCH] feat(connection): increase default query timeout --- apps/desktop/src/lib/sql/queryTimeout.ts | 2 +- crates/dbx-core/src/models/connection.rs | 7 ++++++- docs/pips/PIP-0001-database-connection-timeout-recovery.md | 3 +-- packages/app-tests/queryTimeout.test.ts | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/desktop/src/lib/sql/queryTimeout.ts b/apps/desktop/src/lib/sql/queryTimeout.ts index 3b6c5e47c..d3b440923 100644 --- a/apps/desktop/src/lib/sql/queryTimeout.ts +++ b/apps/desktop/src/lib/sql/queryTimeout.ts @@ -1,7 +1,7 @@ import { splitSqlStatementRanges } from "@/lib/sql/sqlStatementRanges"; import type { ConnectionConfig, DatabaseType } from "@/types/database"; -export const DEFAULT_QUERY_TIMEOUT_SECS = 30; +export const DEFAULT_QUERY_TIMEOUT_SECS = 60; export function queryTimeoutSecsForConnection(connection?: Pick | null): number { const value = Number(connection?.query_timeout_secs); diff --git a/crates/dbx-core/src/models/connection.rs b/crates/dbx-core/src/models/connection.rs index 91846350d..cb4c1040d 100644 --- a/crates/dbx-core/src/models/connection.rs +++ b/crates/dbx-core/src/models/connection.rs @@ -317,7 +317,7 @@ pub fn default_connect_timeout_secs() -> u64 { } pub fn default_query_timeout_secs() -> u64 { - 30 + 60 } pub fn default_idle_timeout_secs() -> u64 { @@ -1880,6 +1880,11 @@ mod tests { }; use std::str::FromStr; + #[test] + fn default_query_timeout_is_sixty_seconds() { + assert_eq!(default_query_timeout_secs(), 60); + } + fn mysql_config(username: &str, password: &str, database: Option<&str>) -> ConnectionConfig { ConnectionConfig { id: "id".to_string(), diff --git a/docs/pips/PIP-0001-database-connection-timeout-recovery.md b/docs/pips/PIP-0001-database-connection-timeout-recovery.md index a60c05ca6..83db548b0 100644 --- a/docs/pips/PIP-0001-database-connection-timeout-recovery.md +++ b/docs/pips/PIP-0001-database-connection-timeout-recovery.md @@ -102,7 +102,7 @@ pub struct DbOperationBudget { - `query_timeout_secs = 0`:表示 SQL 执行本身不设超时。前端不得静默将其变为有限值(如 60s)。现有代码已正确处理:前端 `withFrontendQueryTimeout` 在 `timeoutSecs === 0` 时直接返回 promise 不加超时;后端 `resolve_query_timeout` 在 `Some(0)` 时返回 `None`。 - `query_timeout_secs > 0`:SQL 执行超时为用户配置值。前端兜底超时设为配置值的 2 倍,让后端先触发自己的超时,前端超时仅作为网络异常下的兜底。 -- `query_timeout_secs` 缺失或无效:使用默认值 30s(`DEFAULT_QUERY_TIMEOUT_SECS`)。 +- `query_timeout_secs` 缺失或无效:使用默认值 60s(`DEFAULT_QUERY_TIMEOUT_SECS`)。 **2. 基础设施超时 — 始终有硬性上限** @@ -468,4 +468,3 @@ Windows 环境验证: ## 相关文档 - `docs/pips/plans/2026-06-24-database-connection-timeout-recovery.md` - \ No newline at end of file diff --git a/packages/app-tests/queryTimeout.test.ts b/packages/app-tests/queryTimeout.test.ts index b8379321e..83b692661 100644 --- a/packages/app-tests/queryTimeout.test.ts +++ b/packages/app-tests/queryTimeout.test.ts @@ -3,6 +3,7 @@ import { test } from "vitest"; import { DEFAULT_QUERY_TIMEOUT_SECS, frontendQueryTimeoutSecsForSql, queryTimeoutSecsForConnection } from "../../apps/desktop/src/lib/sql/queryTimeout.ts"; test("queryTimeoutSecsForConnection falls back to the default timeout", () => { + assert.equal(DEFAULT_QUERY_TIMEOUT_SECS, 60); assert.equal(queryTimeoutSecsForConnection(undefined), DEFAULT_QUERY_TIMEOUT_SECS); assert.equal(queryTimeoutSecsForConnection({ query_timeout_secs: -1 }), DEFAULT_QUERY_TIMEOUT_SECS); assert.equal(queryTimeoutSecsForConnection({ query_timeout_secs: 0 }), 0);