From 8955e513aa2b82d89657c208560e630ca5f36edf Mon Sep 17 00:00:00 2001 From: dailz Date: Tue, 21 Apr 2026 13:35:21 +0800 Subject: [PATCH] fix(upload): add 30s timeout to background chunk cleanup goroutine The cleanup goroutine used context.Background() with no timeout, so if MinIO accepted TCP connections but never responded, the goroutine would block indefinitely. Now uses context.WithTimeout to prevent leaks. --- internal/service/upload_service.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/service/upload_service.go b/internal/service/upload_service.go index bf6ea25..6c482ac 100644 --- a/internal/service/upload_service.go +++ b/internal/service/upload_service.go @@ -357,8 +357,9 @@ func (s *UploadService) CompleteUpload(ctx context.Context, sessionID int64) (*m keys[i] = fmt.Sprintf("%schunk_%05d", minioPrefix, i) } go func() { - bgCtx := context.Background() - if delErr := s.storage.RemoveObjects(bgCtx, s.cfg.Bucket, keys, storage.RemoveObjectsOptions{}); delErr != nil { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + if delErr := s.storage.RemoveObjects(ctx, s.cfg.Bucket, keys, storage.RemoveObjectsOptions{}); delErr != nil { s.logger.Warn("delete temp chunks", zap.Error(delErr)) } }()