Skip to content

Commit a688671

Browse files
committed
some optimizations for uploading to minio
1 parent 42e62fa commit a688671

File tree

4 files changed

+47
-2
lines changed

4 files changed

+47
-2
lines changed

modules/io/reader.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright 2021 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package io
6+
7+
import "io"
8+
9+
// ReadSizer represents a reader which have size information
10+
type ReadSizer interface {
11+
io.Reader
12+
Size() int64
13+
}
14+
15+
type readSizer struct {
16+
io.Reader
17+
size int64
18+
}
19+
20+
func (r *readSizer) Size() int64 {
21+
return r.size
22+
}
23+
24+
// WithSize binding io.Reader and size into a ReadSizer
25+
func WithSize(rd io.Reader, size int64) ReadSizer {
26+
return &readSizer{
27+
Reader: rd,
28+
size: size,
29+
}
30+
}

modules/lfs/content_store.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"os"
1515

1616
"code.gitea.io/gitea/models"
17+
myio "code.gitea.io/gitea/modules/io"
1718
"code.gitea.io/gitea/modules/log"
1819
"code.gitea.io/gitea/modules/storage"
1920
)
@@ -125,6 +126,10 @@ type hashingReader struct {
125126
expectedHash string
126127
}
127128

129+
var (
130+
_ myio.ReadSizer = &hashingReader{}
131+
)
132+
128133
func (r *hashingReader) Read(b []byte) (int, error) {
129134
n, err := r.internal.Read(b)
130135

@@ -150,6 +155,10 @@ func (r *hashingReader) Read(b []byte) (int, error) {
150155
return n, err
151156
}
152157

158+
func (r *hashingReader) Size() int64 {
159+
return r.expectedSize
160+
}
161+
153162
func newHashingReader(expectedSize int64, expectedHash string, reader io.Reader) *hashingReader {
154163
return &hashingReader{
155164
internal: reader,

modules/migrations/gitea_uploader.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717

1818
"code.gitea.io/gitea/models"
1919
"code.gitea.io/gitea/modules/git"
20+
myio "code.gitea.io/gitea/modules/io"
2021
"code.gitea.io/gitea/modules/log"
2122
"code.gitea.io/gitea/modules/migrations/base"
2223
"code.gitea.io/gitea/modules/repository"
@@ -283,7 +284,7 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error {
283284
}
284285
}
285286
defer rc.Close()
286-
_, err = storage.Attachments.Save(attach.RelativePath(), rc)
287+
_, err = storage.Attachments.Save(attach.RelativePath(), myio.WithSize(rc, attach.Size))
287288
return err
288289
}()
289290
if err != nil {

modules/storage/minio.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"strings"
1414
"time"
1515

16+
myio "code.gitea.io/gitea/modules/io"
1617
"code.gitea.io/gitea/modules/log"
1718

1819
"github.com/minio/minio-go/v7"
@@ -132,12 +133,16 @@ func (m *MinioStorage) Open(path string) (Object, error) {
132133

133134
// Save save a file to minio
134135
func (m *MinioStorage) Save(path string, r io.Reader) (int64, error) {
136+
var size int64 = -1
137+
if sizer, ok := r.(myio.ReadSizer); ok {
138+
size = sizer.Size()
139+
}
135140
uploadInfo, err := m.client.PutObject(
136141
m.ctx,
137142
m.bucket,
138143
m.buildMinioPath(path),
139144
r,
140-
-1,
145+
size,
141146
minio.PutObjectOptions{ContentType: "application/octet-stream"},
142147
)
143148
if err != nil {

0 commit comments

Comments
 (0)