fix locating data chunks

This commit is contained in:
Chris Lu 2021-08-15 23:07:58 -07:00
parent 72eb6d5b9d
commit 40dc283b2d
2 changed files with 18 additions and 3 deletions

View file

@ -40,7 +40,7 @@ debug_filer_copy:
debug_filer_remote_sync:
go build -gcflags="all=-N -l"
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec weed -- -v=4 filer.remote.sync -filer="localhost:8888" -dir=/buckets/b2 -timeAgo=10000h
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec weed -- -v=4 filer.remote.sync -filer="localhost:8888" -dir=/buckets/b2 -timeAgo=1h
debug_master_follower:
go build -gcflags="all=-N -l"

View file

@ -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