Skip to content

Commit

Permalink
Merge pull request #995 from tinou98/patch-1
Browse files Browse the repository at this point in the history
Update object Put to avoid loosing last chunk
  • Loading branch information
derekcollison committed Jun 9, 2022
2 parents 69f0e65 + 9654d96 commit 1a55cb9
Showing 1 changed file with 28 additions and 22 deletions.
50 changes: 28 additions & 22 deletions object.go
Expand Up @@ -372,37 +372,43 @@ func (obs *obs) Put(meta *ObjectMeta, r io.Reader, opts ...ObjectOpt) (*ObjectIn

// Actual read.
// TODO(dlc) - Deadline?
n, err := r.Read(chunk)
n, readErr := r.Read(chunk)

// Handle all non EOF errors
if readErr != nil && readErr != io.EOF {
purgePartial()
return nil, readErr
}

// Add chunk only if we received data
if n > 0 {
// Chunk processing.
m.Data = chunk[:n]
h.Write(m.Data)

// Send msg itself.
if _, err := js.PublishMsgAsync(m); err != nil {
purgePartial()
return nil, err
}
if err := getErr(); err != nil {
purgePartial()
return nil, err
}
// Update totals.
sent++
total += uint64(n)
}

// EOF Processing.
if err == io.EOF {
if readErr == io.EOF {
// Finalize sha.
sha := h.Sum(nil)
// Place meta info.
info.Size, info.Chunks = uint64(total), uint32(sent)
info.Digest = fmt.Sprintf(objDigestTmpl, base64.URLEncoding.EncodeToString(sha[:]))
break
} else if err != nil {
purgePartial()
return nil, err
}

// Chunk processing.
m.Data = chunk[:n]
h.Write(m.Data)

// Send msg itself.
if _, err := js.PublishMsgAsync(m); err != nil {
purgePartial()
return nil, err
}
if err := getErr(); err != nil {
purgePartial()
return nil, err
}
// Update totals.
sent++
total += uint64(n)
}

// Publish the metadata.
Expand Down

0 comments on commit 1a55cb9

Please sign in to comment.