From e53a086b77a2c5bbe8818df80ab252498f94f85a Mon Sep 17 00:00:00 2001 From: Evgenii Baidakov Date: Tue, 3 Sep 2024 15:22:55 +0400 Subject: [PATCH] layer: Use smaller buffer for small payload Closes #938. Signed-off-by: Evgenii Baidakov --- api/layer/multipart_upload.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/api/layer/multipart_upload.go b/api/layer/multipart_upload.go index c4213864..eb2b40b8 100644 --- a/api/layer/multipart_upload.go +++ b/api/layer/multipart_upload.go @@ -312,7 +312,19 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf }, } - chunk := n.buffers.Get().(*[]byte) + var ( + chunk *[]byte + isReturnToPool bool + ) + + if p.Size > n.neoFS.MaxObjectSize() { + chunk = n.buffers.Get().(*[]byte) + isReturnToPool = true + } else { + smallChunk := make([]byte, p.Size) + chunk = &smallChunk + } + var totalBytes int // slice part manually. Simultaneously considering the part is a single object for user. for { @@ -350,7 +362,10 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf break } - n.buffers.Put(chunk) + + if isReturnToPool { + n.buffers.Put(chunk) + } reqInfo := api.GetReqInfo(ctx) n.log.Debug("upload part",