fix(diagnosis): tighten timeout handling and clarify timeout messaging

This commit is contained in:
sagitchu
2026-03-01 18:37:53 +08:00
parent cf51b305b0
commit d33814e18c
5 changed files with 102 additions and 12 deletions
@@ -110,9 +110,11 @@ func (h *Handler) buildDiagnosisStreamStartItems(workItems []diagnosisWorkItem)
const diagnosisMaxConcurrency = 8
const (
defaultNodeCommandTimeout = 6 * time.Second
diagnosisCommandTimeout = 2 * time.Minute
diagnosisRequestTimeout = 2 * time.Minute
defaultNodeCommandTimeout = 6 * time.Second
diagnosisCommandTimeout = 30 * time.Second
diagnosisRequestTimeout = 2 * time.Minute
diagnosisCommandTimeoutMsg = "诊断超时(30秒)"
diagnosisRequestTimeoutMsg = "诊断超时(2分钟)"
)
func (h *Handler) resolveForwardAccess(r *http.Request, forwardID int64) (*forwardRecord, int64, int, error) {
@@ -848,15 +850,15 @@ func resolveDiagnosisTargets(remoteAddr string) ([]diagnosisTarget, error) {
func diagnosisContextMessage(ctx context.Context) string {
if ctx == nil {
return "诊断超时(2分钟)"
return diagnosisRequestTimeoutMsg
}
switch ctx.Err() {
case context.DeadlineExceeded:
return "诊断超时(2分钟)"
return diagnosisRequestTimeoutMsg
case context.Canceled:
return "诊断已取消"
default:
return "诊断超时(2分钟)"
return diagnosisRequestTimeoutMsg
}
}
@@ -895,7 +897,7 @@ func newDiagnosisTimeoutItem(workItem diagnosisWorkItem, message string) map[str
item := newDiagnosisResultItem(workItem.fromNodeID, workItem.targetIP, targetPort, workItem.description, workItem.metadata)
item["success"] = false
if strings.TrimSpace(message) == "" {
message = "诊断超时(2分钟)"
message = diagnosisCommandTimeoutMsg
}
item["message"] = message
return item
@@ -993,7 +995,7 @@ enqueueLoop:
for i := range results {
if results[i] == nil {
results[i] = newDiagnosisTimeoutItem(workItems[i], "诊断超时(2分钟)")
results[i] = newDiagnosisTimeoutItem(workItems[i], diagnosisCommandTimeoutMsg)
}
}
return results