From db8e2066cd4feb2c5dc96b7d6303609b97a61841 Mon Sep 17 00:00:00 2001 From: emrocha <38505425+emrocha@users.noreply.github.com> Date: Mon, 19 Jun 2023 13:58:15 -0300 Subject: [PATCH] PutObjectAsync with Snowball header must not use multipart (#786) * PutObjectAsync with Snowball header must not use multipart PutObjectAsync must not use multipart if has header "X-Amz-Meta-Snowball-Auto-Extract=true" See https://github.com/minio/minio/issues/17033 * Lint changes --------- Co-authored-by: Ersan --- Minio/ApiEndpoints/ObjectOperations.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Minio/ApiEndpoints/ObjectOperations.cs b/Minio/ApiEndpoints/ObjectOperations.cs index abfe8d0f7..3b37077c9 100644 --- a/Minio/ApiEndpoints/ObjectOperations.cs +++ b/Minio/ApiEndpoints/ObjectOperations.cs @@ -561,8 +561,13 @@ public async Task PutObjectAsync(PutObjectArgs args, args?.Validate(); args.SSE?.Marshal(args.Headers); - // Upload object in single part if size falls under restricted part size. - if (args.ObjectSize < Constants.MinimumPartSize && args.ObjectSize >= 0 && args.ObjectStreamData is not null) + var isSnowball = args.Headers.ContainsKey("X-Amz-Meta-Snowball-Auto-Extract") && + Convert.ToBoolean(args.Headers["X-Amz-Meta-Snowball-Auto-Extract"]); + + // Upload object in single part if size falls under restricted part size + // or the request has snowball objects + if ((args.ObjectSize < Constants.MinimumPartSize || isSnowball) && args.ObjectSize >= 0 && + args.ObjectStreamData is not null) { var bytes = await ReadFullAsync(args.ObjectStreamData, (int)args.ObjectSize).ConfigureAwait(false); var bytesRead = bytes.Length;