diff options
| author | Marin Ivanov <[email protected]> | 2022-08-15 06:16:55 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2022-08-15 06:16:55 +0300 |
| commit | f8fc14b2e0a10c64de0bd87f831ebde4f705b79b (patch) | |
| tree | 5477a9fbca3be41a7e3ecb9a73eb37ae51b5fbfb /fs.go | |
| parent | 88951333595a63af7bdcc91e1519be38cfbce82a (diff) | |
Optimize for files larger than 16MiB
Diffstat (limited to 'fs.go')
| -rw-r--r-- | fs.go | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -230,12 +230,28 @@ func (fs *Fs) newObjectWriter(key string) (io.WriteCloser, context.CancelFunc, < errc := make(chan error, 1) go func() { - b, err := io.ReadAll(r) + maxAtomicSize := int64(16 * (1 << 20)) + lr := io.LimitReader(r, maxAtomicSize) + b, err := io.ReadAll(lr) if err != nil { errc <- err return } - _, err = fs.client.PutObject(ctx, fs.bucket, key, bytes.NewReader(b), int64(len(b)), minio.PutObjectOptions{}) + if ctx.Err() != nil { + errc <- ctx.Err() + return + } + var rd io.Reader + var size int64 + if int64(len(b)) == maxAtomicSize { + rd = io.MultiReader(bytes.NewReader(b), r) + size = -1 + } else { + rd = bytes.NewReader(b) + size = int64(len(b)) + } + + _, err = fs.client.PutObject(ctx, fs.bucket, key, rd, size, minio.PutObjectOptions{}) errc <- fromErrorResponse(err) }() |
