aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/stream.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/filer/stream.go')
-rw-r--r--weed/filer/stream.go19
1 files changed, 17 insertions, 2 deletions
diff --git a/weed/filer/stream.go b/weed/filer/stream.go
index 9f28056cd..05621a5c3 100644
--- a/weed/filer/stream.go
+++ b/weed/filer/stream.go
@@ -237,10 +237,25 @@ func (c *ChunkStreamReader) prepareBufferFor(offset int64) (err error) {
// need to seek to a different chunk
currentChunkIndex := sort.Search(len(c.chunkViews), func(i int) bool {
- return c.chunkViews[i].LogicOffset <= offset
+ return offset < c.chunkViews[i].LogicOffset
})
if currentChunkIndex == len(c.chunkViews) {
- return io.EOF
+ // not found
+ if c.chunkViews[0].LogicOffset <= offset {
+ currentChunkIndex = 0
+ } else if c.chunkViews[len(c.chunkViews)-1].LogicOffset <= offset {
+ currentChunkIndex = len(c.chunkViews) -1
+ } else {
+ return io.EOF
+ }
+ } else if currentChunkIndex > 0 {
+ if c.chunkViews[currentChunkIndex-1].LogicOffset <= offset {
+ currentChunkIndex -= 1
+ } else {
+ return fmt.Errorf("unexpected1 offset %d", offset)
+ }
+ } else {
+ return fmt.Errorf("unexpected2 offset %d", offset)
}
// positioning within the new chunk