mirror of
https://github.com/chrislusf/seaweedfs
synced 2024-07-06 00:57:10 +02:00
fix for stream reader
fix https://github.com/seaweedfs/seaweedfs/issues/4112
This commit is contained in:
parent
e367444586
commit
2abf817580
|
@ -187,6 +187,7 @@ func ReadAll(buffer []byte, masterClient *wdclient.MasterClient, chunks []*filer
|
||||||
|
|
||||||
// ---------------- ChunkStreamReader ----------------------------------
|
// ---------------- ChunkStreamReader ----------------------------------
|
||||||
type ChunkStreamReader struct {
|
type ChunkStreamReader struct {
|
||||||
|
head *Interval[*ChunkView]
|
||||||
chunkView *Interval[*ChunkView]
|
chunkView *Interval[*ChunkView]
|
||||||
totalSize int64
|
totalSize int64
|
||||||
logicOffset int64
|
logicOffset int64
|
||||||
|
@ -211,6 +212,7 @@ func doNewChunkStreamReader(lookupFileIdFn wdclient.LookupFileIdFunctionType, ch
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ChunkStreamReader{
|
return &ChunkStreamReader{
|
||||||
|
head: chunkViews.Front(),
|
||||||
chunkView: chunkViews.Front(),
|
chunkView: chunkViews.Front(),
|
||||||
lookupFileId: lookupFileIdFn,
|
lookupFileId: lookupFileIdFn,
|
||||||
totalSize: totalSize,
|
totalSize: totalSize,
|
||||||
|
@ -309,15 +311,20 @@ func (c *ChunkStreamReader) prepareBufferFor(offset int64) (err error) {
|
||||||
chunk := c.chunkView.Value
|
chunk := c.chunkView.Value
|
||||||
if insideChunk(offset, chunk) {
|
if insideChunk(offset, chunk) {
|
||||||
if c.isBufferEmpty() || c.bufferOffset != chunk.ViewOffset {
|
if c.isBufferEmpty() || c.bufferOffset != chunk.ViewOffset {
|
||||||
if err = c.fetchChunkToBuffer(chunk); err != nil {
|
return c.fetchChunkToBuffer(chunk)
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// glog.Fatalf("unexpected3 offset %d in %s [%d,%d)", offset, chunk.FileId, chunk.ViewOffset, chunk.ViewOffset+int64(chunk.ViewSize))
|
for p := c.head; p != nil; p = p.Next {
|
||||||
return fmt.Errorf("unexpected3 offset %d in %s [%d,%d)", offset, chunk.FileId, chunk.ViewOffset, chunk.ViewOffset+int64(chunk.ViewSize))
|
chunk = p.Value
|
||||||
|
if insideChunk(offset, chunk) {
|
||||||
|
if c.isBufferEmpty() || c.bufferOffset != chunk.ViewOffset {
|
||||||
|
return c.fetchChunkToBuffer(chunk)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
|
||||||
|
return io.EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ChunkStreamReader) fetchChunkToBuffer(chunkView *ChunkView) error {
|
func (c *ChunkStreamReader) fetchChunkToBuffer(chunkView *ChunkView) error {
|
||||||
|
|
Loading…
Reference in a new issue