Browse Source

fix locating data chunks

pull/2274/head
Chris Lu 3 years ago
parent
commit
40dc283b2d
  1. 2
      weed/Makefile
  2. 17
      weed/filer/stream.go

2
weed/Makefile

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

17
weed/filer/stream.go

@ -237,11 +237,26 @@ 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) {
// 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 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
chunk := c.chunkViews[currentChunkIndex] chunk := c.chunkViews[currentChunkIndex]

Loading…
Cancel
Save