feat(connection): increase default query timeout

This commit is contained in:
t8y2 2026-07-13 09:30:33 +08:00
parent c720aeafd6
commit 0745fbc53c
4 changed files with 9 additions and 4 deletions

View File

@ -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<ConnectionConfig, "query_timeout_secs"> | null): number {
const value = Number(connection?.query_timeout_secs);

View File

@ -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(),

View File

@ -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`

View File

@ -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);