MCPcopy Create free account
hub / github.com/53AI/53AIHub / processUploadTask

Method processUploadTask

api/service/batch_upload_manager.go:308–359  ·  view source on GitHub ↗

processUploadTask 处理上传任务

(task *UploadTask)

Source from the content-addressed store, hash-verified

306
307// processUploadTask 处理上传任务
308func (m *BatchUploadManager) processUploadTask(task *UploadTask) {
309 defer func() { <-m.semaphore }()
310
311 batch, err := m.GetBatch(task.BatchID)
312 if err != nil {
313 return
314 }
315
316 // 获取 fileUpload 的安全副本并使用线程安全的更新方法,避免在持有 batch.mu 时重复加锁导致死锁
317 fileUploadPtr, exists := batch.GetFileUpload(task.FileID)
318 if !exists || fileUploadPtr == nil {
319 return
320 }
321 if m.IsBatchCancelled(task.BatchID) {
322 return
323 }
324 // 使用副本修改并通过 updateFileProgress 持久化,避免在同一 goroutine 中重复持有 mutex 导致死锁
325 fileUpload := *fileUploadPtr
326 // 更新文件状态为上传中
327 fileUpload.Status = "uploading"
328 fileUpload.StartTime = time.Now()
329 // 生成10-30之间的随机进度值
330 if progress, err := rand.Int(rand.Reader, big.NewInt(21)); err == nil {
331 fileUpload.Progress = float64(10 + progress.Int64())
332 } else {
333 fileUpload.Progress = 20 // 出错时使用默认值
334 }
335 // 使用线程安全的更新接口(内部对 batch.mu 加锁)
336 m.updateFileProgress(task.BatchID, task.FileID, &fileUpload)
337
338 // 执行上传
339 err = m.executeUpload(task)
340 if err != nil {
341 if errors.Is(err, errBatchUploadCancelled) {
342 return
343 }
344 fileUpload.Status = "failed"
345 fileUpload.Error = err.Error()
346 fileUpload.Progress = 0
347 batch.FailedFiles++
348 m.updateFileProgress(task.BatchID, task.FileID, &fileUpload)
349 } else {
350 if m.IsBatchCancelled(task.BatchID) {
351 return
352 }
353 // executeUpload已经处理了所有状态更新,这里只需要更新批次计数
354 batch.UploadedFiles++
355 }
356
357 fileUpload.UpdateTime = time.Now()
358 m.updateBatchStatus(batch)
359}
360
361// executeUpload 执行文件上传
362func (m *BatchUploadManager) executeUpload(task *UploadTask) error {

Callers 1

SubmitUploadTaskMethod · 0.95

Calls 8

GetBatchMethod · 0.95
IsBatchCancelledMethod · 0.95
updateFileProgressMethod · 0.95
executeUploadMethod · 0.95
updateBatchStatusMethod · 0.95
GetFileUploadMethod · 0.80
Int64Method · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected