From 7c10602b49dca54591337597f48da6e228a7068d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 29 Apr 2020 02:42:58 -0700 Subject: [PATCH] read in case cross chunks --- weed/filer2/stream.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) 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 }