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: debug_filer_remote_sync:
go build -gcflags="all=-N -l" 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: debug_master_follower:
go build -gcflags="all=-N -l" 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 // need to seek to a different chunk
currentChunkIndex := sort.Search(len(c.chunkViews), func(i int) bool { 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) { 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 // positioning within the new chunk