fix: 修复请求头转发与任务状态流转问题

移除 util.ForwardHeaders,改为从原始请求精确提取 Authorization 或全部请求头;
任务创建时直接设为 Running 状态,避免二次更新与查询;
模型调用使用独立超时上下文,防止外层取消影响回调;
增加 OSS 上传耗时日志,调整数据库连接池参数。
This commit is contained in:
2026-06-18 10:08:36 +08:00
parent fddaf36f48
commit b21d7a8dbf
4 changed files with 90 additions and 45 deletions

View File

@@ -65,20 +65,20 @@ func (s *taskService) Create(ctx context.Context, req *dto.CreateTaskReq) (res *
Body: req.RequestPayload,
Headers: util.ParseHeadMsgHeaders(model.HeadMsg),
}
id, err := dao.ModelGatewayTask.Insert(ctx, &entity.ModelGatewayTask{
ModelName: req.ModelName,
TaskID: taskID,
State: public.TaskStatusPending,
BizName: req.BizName,
CallbackURL: req.CallbackUrl,
RequestPayload: &requestPayload,
EpicycleId: req.EpicycleId,
})
task := new(entity.ModelGatewayTask)
task.ModelName = model.ModelName
task.TaskID = taskID
task.State = public.TaskStatusRunning
task.BizName = req.BizName
task.CallbackURL = req.CallbackUrl
task.RequestPayload = &requestPayload
task.EpicycleId = req.EpicycleId
id, err := dao.ModelGatewayTask.Insert(ctx, task)
if err != nil { // 入库失败:回滚闸门占位
queue.ReleaseQueueSlot(ctx, req.ModelName, taskID)
return nil, err
}
task.Id = id
// 4) 写操作日志(不影响主流程,失败忽略)
ip := ""
ua := ""
@@ -107,25 +107,25 @@ func (s *taskService) Create(ctx context.Context, req *dto.CreateTaskReq) (res *
},
})
// 5) 抢占任务:改为执行中
rows, err := dao.ModelGatewayTask.Update(ctx, &entity.ModelGatewayTask{
SQLBaseDO: beans.SQLBaseDO{Id: id},
State: public.TaskStatusRunning,
})
if err != nil {
return nil, err
}
if rows == 0 {
return nil, fmt.Errorf("任务不存在: id=%d", id)
}
//// 5) 抢占任务:改为执行中
//rows, err := dao.ModelGatewayTask.Update(ctx, &entity.ModelGatewayTask{
// SQLBaseDO: beans.SQLBaseDO{Id: id},
// State: public.TaskStatusRunning,
//})
//if err != nil {
// return nil, err
//}
//if rows == 0 {
// return nil, fmt.Errorf("任务不存在: id=%d", id)
//}
// 6) 查询任务信息
task, err := dao.ModelGatewayTask.Get(ctx, &entity.ModelGatewayTask{
SQLBaseDO: beans.SQLBaseDO{Id: id},
})
if err != nil {
return nil, err
}
//task, err := dao.ModelGatewayTask.Get(ctx, &entity.ModelGatewayTask{
// SQLBaseDO: beans.SQLBaseDO{Id: id},
//})
//if err != nil {
// return nil, err
//}
// 7) 创建成功后立即异步尝试执行当前任务
go AsyncWorker.handleOne(util.AsyncCtx(ctx), task, model, req)