From 40dc283b2dfc027018a04938f22bffcc1afd7b45 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 15 Aug 2021 23:07:58 -0700 Subject: [PATCH] fix locating data chunks --- weed/Makefile | 2 +- weed/filer/stream.go | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/weed/Makefile b/weed/Makefile index 205104969..46034977e 100644 --- a/weed/Makefile +++ b/weed/Makefile @@ -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" 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