Skip to content

Commit 7f52980

Browse files
authored
Merge pull request #367 from databacker/s3-upload-bytes
properly calculate bytes for S3.Push
2 parents eb35841 + 63cbbca commit 7f52980

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

pkg/storage/s3/reader.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package s3
2+
3+
import (
4+
"io"
5+
)
6+
7+
type CountingReader interface {
8+
io.Reader
9+
Bytes() int64
10+
}
11+
12+
func NewCountingReader(r io.Reader) CountingReader {
13+
return &countingReader{r: r}
14+
}
15+
16+
type countingReader struct {
17+
r io.Reader
18+
bytes int64
19+
}
20+
21+
func (cr *countingReader) Read(p []byte) (int, error) {
22+
n, err := cr.r.Read(p)
23+
cr.bytes += int64(n)
24+
return n, err
25+
}
26+
27+
func (cr *countingReader) Bytes() int64 {
28+
return cr.bytes
29+
}

pkg/storage/s3/s3.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ func (s *S3) Push(target, source string, logger *log.Entry) (int64, error) {
113113
return 0, fmt.Errorf("failed to read input file %q, %v", source, err)
114114
}
115115
defer f.Close()
116+
countingReader := NewCountingReader(f)
116117

117118
// S3 always prepends a /, so if it already has one, it would become //
118119
// For some services, that is ok, but for others, it causes issues.
@@ -122,12 +123,12 @@ func (s *S3) Push(target, source string, logger *log.Entry) (int64, error) {
122123
_, err = uploader.Upload(context.TODO(), &s3.PutObjectInput{
123124
Bucket: aws.String(bucket),
124125
Key: aws.String(key),
125-
Body: f,
126+
Body: countingReader,
126127
})
127128
if err != nil {
128129
return 0, fmt.Errorf("failed to upload file, %v", err)
129130
}
130-
return 0, nil
131+
return countingReader.Bytes(), nil
131132
}
132133

133134
func (s *S3) Clean(filename string) string {

0 commit comments

Comments
 (0)