Skip to content

Commit

Permalink
Merge pull request #5786 from jsternberg/upload-provider-non-recursiv…
Browse files Browse the repository at this point in the history
…e-write

uploadprovider: remove recursion from uploadprovider write code
  • Loading branch information
tonistiigi authored Feb 27, 2025
2 parents 478f176 + 6707a2d commit a67e831
Showing 1 changed file with 12 additions and 15 deletions.
27 changes: 12 additions & 15 deletions session/upload/uploadprovider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,23 +63,20 @@ type writer struct {
grpc.ServerStream
}

func (w *writer) Write(dt []byte) (int, error) {
// avoid sending too big messages on grpc stream
func (w *writer) Write(dt []byte) (n int, err error) {
const maxChunkSize = 3 * 1024 * 1024
if len(dt) > maxChunkSize {
n1, err := w.Write(dt[:maxChunkSize])
if err != nil {
return n1, err
for len(dt) > 0 {
data := dt
if len(data) > maxChunkSize {
data = data[:maxChunkSize]
}
dt = dt[maxChunkSize:]
var n2 int
if n2, err := w.Write(dt); err != nil {
return n1 + n2, err

msg := &upload.BytesMessage{Data: data}
if err := w.SendMsg(msg); err != nil {
return n, err
}
return n1 + n2, nil
}
if err := w.SendMsg(&upload.BytesMessage{Data: dt}); err != nil {
return 0, err
n += len(data)
dt = dt[len(data):]
}
return len(dt), nil
return n, nil
}

0 comments on commit a67e831

Please sign in to comment.