diff --git a/weed/filer2/stream.go b/weed/filer2/stream.go index bf1b4c24a..4e785fade 100644 --- a/weed/filer2/stream.go +++ b/weed/filer2/stream.go @@ -98,18 +98,20 @@ func NewChunkStreamReaderFromFiler(masterClient *wdclient.MasterClient, chunks [ } } - func (c *ChunkStreamReader) Read(p []byte) (n int, err error) { - if c.isBufferEmpty() { - if c.chunkIndex >= len(c.chunkViews) { - return 0, io.EOF + for n < len(p) { + if c.isBufferEmpty() { + if c.chunkIndex >= len(c.chunkViews) { + return n, io.EOF + } + chunkView := c.chunkViews[c.chunkIndex] + c.fetchChunkToBuffer(chunkView) + c.chunkIndex++ } - chunkView := c.chunkViews[c.chunkIndex] - c.fetchChunkToBuffer(chunkView) - c.chunkIndex++ + t := copy(p[n:], c.buffer[c.bufferPos:]) + c.bufferPos += t + n += t } - n = copy(p, c.buffer[c.bufferPos:]) - c.bufferPos += n return }