fix for io.ReaderAt used in filer.remote.sync
fix https://github.com/seaweedfs/seaweedfs/issues/4194
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user