From 304c3480df84523cf649b4359203daf9d3ca16f2 Mon Sep 17 00:00:00 2001 From: Darren Yu Date: Thu, 16 Jul 2026 00:26:19 +0800 Subject: [PATCH] fix(upload): set concurrent chunk upload to 1 when disk pre-allocation is disabled --- pkg/filemanager/driver/local/local.go | 4 ++++ pkg/filemanager/driver/remote/remote.go | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/pkg/filemanager/driver/local/local.go b/pkg/filemanager/driver/local/local.go index 172effb8..3efb081e 100644 --- a/pkg/filemanager/driver/local/local.go +++ b/pkg/filemanager/driver/local/local.go @@ -226,6 +226,10 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio if err := Fallocate(f, 0, uploadSession.Props.Size); err != nil { handler.l.Warning("Failed to preallocate file: %s", err) } + } else { + // When disk pre-allocation is disabled, concurrent chunk uploads must be 1 + // to avoid disk fragmentation and write contention on local storage. + handler.Policy.Settings.ChunkConcurrency = 1 } return &fs.UploadCredential{ diff --git a/pkg/filemanager/driver/remote/remote.go b/pkg/filemanager/driver/remote/remote.go index 42b2b1af..7aeae5d5 100644 --- a/pkg/filemanager/driver/remote/remote.go +++ b/pkg/filemanager/driver/remote/remote.go @@ -150,6 +150,12 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio return nil, fmt.Errorf("failed to sign upload url: %w", err) } + // When disk pre-allocation is disabled, concurrent chunk uploads must be 1 + // to avoid disk fragmentation and write contention on slave storage. + if !handler.Policy.Settings.PreAllocate { + handler.Policy.Settings.ChunkConcurrency = 1 + } + return &fs.UploadCredential{ SessionID: uploadSession.Props.UploadSessionID, ChunkSize: handler.Policy.Settings.ChunkSize,