Skip to content

Commit 50ce792

Browse files
committed
refactor: 移除端点级别重试设置残留代码
解决 PR lich0821#38 review comments 中指出的问题: - 删除 endpoints 表中的 retry_count 和 retry_delay_sec 列定义 - 删除 migrateRetrySettings 迁移函数及其调用 - 删除 mergeEndpoints 中对重试列的引用 - 删除前端 modal 中重复的重试设置翻译(保留 settings 部分) - 修复 Validate 函数在读锁下修改状态的并发安全问题 - 改进 SetRetrySettings 验证逻辑,返回错误而非静默修正 - 添加 requestID 用于请求日志追踪 重试设置现在完全作为全局配置存储在 app_config 表中。
1 parent 4a88468 commit 50ce792

File tree

6 files changed

+12
-65
lines changed

6 files changed

+12
-65
lines changed

app.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,17 +1071,11 @@ func (a *App) GetRetryDelaySec() int {
10711071

10721072
// SetRetrySettings updates global retry settings
10731073
func (a *App) SetRetrySettings(retryCount, retryDelaySec int) error {
1074-
if retryCount <= 0 {
1075-
retryCount = 2
1074+
if retryCount < 1 || retryCount > 10 {
1075+
return fmt.Errorf("retryCount must be between 1 and 10, got %d", retryCount)
10761076
}
1077-
if retryCount > 10 {
1078-
retryCount = 10
1079-
}
1080-
if retryDelaySec < 0 {
1081-
retryDelaySec = 0
1082-
}
1083-
if retryDelaySec > 300 {
1084-
retryDelaySec = 300
1077+
if retryDelaySec < 0 || retryDelaySec > 300 {
1078+
return fmt.Errorf("retryDelaySec must be between 0 and 300, got %d", retryDelaySec)
10851079
}
10861080

10871081
a.config.UpdateRetrySettings(retryCount, retryDelaySec)

frontend/src/i18n/en.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ export default {
5555
modelHelpGemini: 'Required: Specify the Gemini model to use',
5656
remark: 'Remark',
5757
remarkHelp: 'Optional: Add a remark for this endpoint',
58-
retryCount: 'Retry Count',
59-
retryCountHelp: 'How many attempts before switching to next endpoint (1-10)',
60-
retryDelaySec: 'Retry Delay (seconds)',
61-
retryDelaySecHelp: 'Wait time between retries for this endpoint (0-300s)',
6258
cancel: 'Cancel',
6359
save: 'Save',
6460
close: 'Close',

frontend/src/i18n/zh-CN.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ export default {
5555
modelHelpGemini: '必填:指定要使用的 Gemini 模型',
5656
remark: '备注',
5757
remarkHelp: '可选:为此端点添加备注说明',
58-
retryCount: '重试次数',
59-
retryCountHelp: '单个端点连续重试次数后再切换(1-10)',
60-
retryDelaySec: '重试间隔(秒)',
61-
retryDelaySecHelp: '该端点每次重试前的等待时间(0-300 秒)',
6258
cancel: '取消',
6359
save: '保存',
6460
close: '关闭',

internal/config/config.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,7 @@ func (c *Config) Validate() error {
7979
return fmt.Errorf("invalid port: %d", c.Port)
8080
}
8181

82-
if c.RetryCount <= 0 {
83-
c.RetryCount = 2
84-
} else if c.RetryCount > 10 {
82+
if c.RetryCount < 1 || c.RetryCount > 10 {
8583
return fmt.Errorf("retryCount out of range (1-10)")
8684
}
8785
if c.RetryDelaySec < 0 || c.RetryDelaySec > 300 {

internal/proxy/proxy.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ func (p *Proxy) SetCurrentEndpoint(targetName string) error {
219219
// handleProxy handles the main proxy logic
220220
// handleProxy handles the main proxy logic
221221
func (p *Proxy) handleProxy(w http.ResponseWriter, r *http.Request) {
222+
requestID := fmt.Sprintf("%d", time.Now().UnixNano())
222223
bodyBytes, err := io.ReadAll(r.Body)
223224
if err != nil {
224225
logger.Error("Failed to read request body: %v", err)
@@ -227,7 +228,7 @@ func (p *Proxy) handleProxy(w http.ResponseWriter, r *http.Request) {
227228
}
228229
defer r.Body.Close()
229230

230-
logger.DebugLog("=== Proxy Request ===")
231+
logger.DebugLog("=== Proxy Request [%s] ===", requestID)
231232
logger.DebugLog("Method: %s, Path: %s", r.Method, r.URL.Path)
232233
logger.DebugLog("Request Body: %s", string(bodyBytes))
233234

@@ -368,7 +369,7 @@ func (p *Proxy) handleProxy(w http.ResponseWriter, r *http.Request) {
368369
}
369370

370371
if shouldRetry(resp.StatusCode) {
371-
logger.Warn("[%s] Request failed with status %d, retrying...", endpoint.Name, resp.StatusCode)
372+
logger.Warn("[%s][Req:%s] Request failed with status %d, retrying...", endpoint.Name, requestID, resp.StatusCode)
372373
p.stats.RecordError(endpoint.Name)
373374
p.markRequestInactive(endpoint.Name)
374375
if endpointAttempts >= retryCount {

internal/storage/sqlite.go

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ func (s *SQLiteStorage) initSchema() error {
4545
model TEXT,
4646
remark TEXT,
4747
sort_order INTEGER DEFAULT 0,
48-
retry_count INTEGER DEFAULT 2,
49-
retry_delay_sec INTEGER DEFAULT 0,
5048
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
5149
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
5250
);
@@ -84,11 +82,6 @@ func (s *SQLiteStorage) initSchema() error {
8482
return err
8583
}
8684

87-
// Migration: Add retry settings columns if they don't exist
88-
if err := s.migrateRetrySettings(); err != nil {
89-
return err
90-
}
91-
9285
return nil
9386
}
9487

@@ -117,38 +110,7 @@ func (s *SQLiteStorage) migrateSortOrder() error {
117110
return nil
118111
}
119112

120-
// migrateRetrySettings adds retry_count and retry_delay_sec columns when missing
121-
func (s *SQLiteStorage) migrateRetrySettings() error {
122-
var count int
123-
124-
// retry_count
125-
if err := s.db.QueryRow(`SELECT COUNT(*) FROM pragma_table_info('endpoints') WHERE name='retry_count'`).Scan(&count); err != nil {
126-
return err
127-
}
128-
if count == 0 {
129-
if _, err := s.db.Exec(`ALTER TABLE endpoints ADD COLUMN retry_count INTEGER DEFAULT 2`); err != nil {
130-
return err
131-
}
132-
if _, err := s.db.Exec(`UPDATE endpoints SET retry_count = 2 WHERE retry_count IS NULL`); err != nil {
133-
return err
134-
}
135-
}
136-
137-
// retry_delay_sec
138-
if err := s.db.QueryRow(`SELECT COUNT(*) FROM pragma_table_info('endpoints') WHERE name='retry_delay_sec'`).Scan(&count); err != nil {
139-
return err
140-
}
141-
if count == 0 {
142-
if _, err := s.db.Exec(`ALTER TABLE endpoints ADD COLUMN retry_delay_sec INTEGER DEFAULT 0`); err != nil {
143-
return err
144-
}
145-
if _, err := s.db.Exec(`UPDATE endpoints SET retry_delay_sec = 0 WHERE retry_delay_sec IS NULL`); err != nil {
146-
return err
147-
}
148-
}
149113

150-
return nil
151-
}
152114

153115
func (s *SQLiteStorage) GetEndpoints() ([]Endpoint, error) {
154116
s.mu.RLock()
@@ -654,17 +616,17 @@ func (s *SQLiteStorage) mergeEndpoints(tx *sql.Tx, strategy MergeStrategy) error
654616
// Insert only new endpoints (ignore conflicts)
655617
_, err := tx.Exec(`
656618
INSERT OR IGNORE INTO endpoints
657-
(name, api_url, api_key, enabled, transformer, model, remark, sort_order, retry_count, retry_delay_sec)
658-
SELECT name, api_url, api_key, enabled, transformer, model, remark, COALESCE(sort_order, 0), COALESCE(retry_count, 2), COALESCE(retry_delay_sec, 0)
619+
(name, api_url, api_key, enabled, transformer, model, remark, sort_order)
620+
SELECT name, api_url, api_key, enabled, transformer, model, remark, COALESCE(sort_order, 0)
659621
FROM backup.endpoints
660622
`)
661623
return err
662624
case MergeStrategyOverwriteLocal:
663625
// Replace existing endpoints
664626
_, err := tx.Exec(`
665627
INSERT OR REPLACE INTO endpoints
666-
(name, api_url, api_key, enabled, transformer, model, remark, sort_order, retry_count, retry_delay_sec)
667-
SELECT name, api_url, api_key, enabled, transformer, model, remark, COALESCE(sort_order, 0), COALESCE(retry_count, 2), COALESCE(retry_delay_sec, 0)
628+
(name, api_url, api_key, enabled, transformer, model, remark, sort_order)
629+
SELECT name, api_url, api_key, enabled, transformer, model, remark, COALESCE(sort_order, 0)
668630
FROM backup.endpoints
669631
`)
670632
return err

0 commit comments

Comments
 (0)