fix for io.ReaderAt used in filer.remote.sync

fix https://github.com/seaweedfs/seaweedfs/issues/4194
This commit is contained in:
chrislu
2023-02-17 01:30:55 -08:00
parent a9aa2d581f
commit 545d5d0cc3

View File

@@ -300,31 +300,24 @@ func (c *ChunkStreamReader) prepareBufferFor(offset int64) (err error) {
if c.bufferOffset <= offset && offset < c.bufferOffset+int64(len(c.buffer)) { if c.bufferOffset <= offset && offset < c.bufferOffset+int64(len(c.buffer)) {
return nil return nil
} }
if c.chunkView == nil { glog.V(2).Infof("c.chunkView: %v buffer:[%d,%d) offset:%d totalSize:%d", c.chunkView, c.bufferOffset, c.bufferOffset+int64(len(c.buffer)), offset, c.totalSize)
return io.EOF
}
// fmt.Printf("fetch for offset %d\n", offset) // find a possible chunk view
c.chunkView = c.chunkView.Next p := c.chunkView
if c.chunkView == nil { for p != nil {
return io.EOF chunk := p.Value
} glog.V(2).Infof("prepareBufferFor check chunk:[%d,%d)", chunk.ViewOffset, chunk.ViewOffset+int64(chunk.ViewSize))
if insideChunk(offset, chunk) {
// positioning within the new chunk if c.isBufferEmpty() || c.bufferOffset != chunk.ViewOffset {
chunk := c.chunkView.Value c.chunkView = p
if insideChunk(offset, chunk) { return c.fetchChunkToBuffer(chunk)
if c.isBufferEmpty() || c.bufferOffset != chunk.ViewOffset {
return c.fetchChunkToBuffer(chunk)
}
} else {
for p := c.head; p != nil; p = p.Next {
chunk = p.Value
if insideChunk(offset, chunk) {
if c.isBufferEmpty() || c.bufferOffset != chunk.ViewOffset {
return c.fetchChunkToBuffer(chunk)
}
} }
} }
if offset < c.bufferOffset {
p = p.Prev
} else {
p = p.Next
}
} }
return io.EOF return io.EOF