Use actual size for buffer selection (#11687)

For compressed inputs, this will be -1, but the object may be small.
This commit is contained in:
Klaus Post 2021-03-03 16:28:10 -08:00 committed by GitHub
parent f14cc6c943
commit c3217bd6eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 2 deletions

View File

@ -452,7 +452,14 @@ func (er erasureObjects) PutObjectPart(ctx context.Context, bucket, object, uplo
switch size := data.Size(); { switch size := data.Size(); {
case size == 0: case size == 0:
buffer = make([]byte, 1) // Allocate atleast a byte to reach EOF buffer = make([]byte, 1) // Allocate atleast a byte to reach EOF
case size == -1 || size >= fi.Erasure.BlockSize: case size == -1:
if size := data.ActualSize(); size > 0 && size < fi.Erasure.BlockSize {
buffer = make([]byte, data.ActualSize()+256, data.ActualSize()*2+512)
} else {
buffer = er.bp.Get()
defer er.bp.Put(buffer)
}
case size >= fi.Erasure.BlockSize:
buffer = er.bp.Get() buffer = er.bp.Get()
defer er.bp.Put(buffer) defer er.bp.Put(buffer)
case size < fi.Erasure.BlockSize: case size < fi.Erasure.BlockSize:

View File

@ -683,7 +683,14 @@ func (er erasureObjects) putObject(ctx context.Context, bucket string, object st
switch size := data.Size(); { switch size := data.Size(); {
case size == 0: case size == 0:
buffer = make([]byte, 1) // Allocate atleast a byte to reach EOF buffer = make([]byte, 1) // Allocate atleast a byte to reach EOF
case size == -1 || size >= fi.Erasure.BlockSize: case size == -1:
if size := data.ActualSize(); size > 0 && size < fi.Erasure.BlockSize {
buffer = make([]byte, data.ActualSize()+256, data.ActualSize()*2+512)
} else {
buffer = er.bp.Get()
defer er.bp.Put(buffer)
}
case size >= fi.Erasure.BlockSize:
buffer = er.bp.Get() buffer = er.bp.Get()
defer er.bp.Put(buffer) defer er.bp.Put(buffer)
case size < fi.Erasure.BlockSize: case size < fi.Erasure.BlockSize: