package db import ( "context" "sync" ) // inflightCancels 在执行的请求注册表:requestId → cancel,供 /api/db/cancel 远程取消。 // 请求完成(正常/异常)必须 UnregisterInflight,避免 map 泄漏。 var inflightCancels = struct { sync.Mutex m map[string]context.CancelFunc }{m: make(map[string]context.CancelFunc)} // RegisterInflight 注册一个可按 requestId 取消的在执行请求。 // requestID 为空或 cancel 为 nil 时忽略。 func RegisterInflight(requestID string, cancel context.CancelFunc) { if requestID == "" || cancel == nil { return } inflightCancels.Lock() defer inflightCancels.Unlock() inflightCancels.m[requestID] = cancel } // UnregisterInflight 请求结束时注销(幂等)。 func UnregisterInflight(requestID string) { inflightCancels.Lock() defer inflightCancels.Unlock() delete(inflightCancels.m, requestID) } // CancelInflight 按 requestId 取消在执行的请求;不存在则返回 false。 // 取消后即注销,重复取消返回 false。 func CancelInflight(requestID string) bool { inflightCancels.Lock() cancel, ok := inflightCancels.m[requestID] if ok { delete(inflightCancels.m, requestID) } inflightCancels.Unlock() if ok { cancel() } return ok }