aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/filer2/filechunks.go2
-rw-r--r--weed/filer2/filechunks_test.go14
2 files changed, 15 insertions, 1 deletions
diff --git a/weed/filer2/filechunks.go b/weed/filer2/filechunks.go
index 6bdfbd48e..5877f2f71 100644
--- a/weed/filer2/filechunks.go
+++ b/weed/filer2/filechunks.go
@@ -66,7 +66,7 @@ func ReadFromChunks(chunks []*filer_pb.FileChunk, offset int64, size int) (views
stop := offset + int64(size)
for _, chunk := range visibles {
- if chunk.start <= offset && offset < chunk.stop {
+ if chunk.start <= offset && offset < chunk.stop && offset < stop {
views = append(views, &ChunkView{
FileId: chunk.fileId,
Offset: offset - chunk.start, // offset is the data starting location in this file id
diff --git a/weed/filer2/filechunks_test.go b/weed/filer2/filechunks_test.go
index 24897215e..033e66b1e 100644
--- a/weed/filer2/filechunks_test.go
+++ b/weed/filer2/filechunks_test.go
@@ -249,6 +249,20 @@ func TestChunksReading(t *testing.T) {
{Offset: 0, Size: 100, FileId: "abc", LogicOffset:0},
},
},
+ // case 7: edge cases
+ {
+ Chunks: []*filer_pb.FileChunk{
+ {Offset: 0, Size: 100, FileId: "abc", Mtime: 123},
+ {Offset: 100, Size: 100, FileId: "asdf", Mtime: 134},
+ {Offset: 200, Size: 100, FileId: "fsad", Mtime: 353},
+ },
+ Offset: 0,
+ Size: 200,
+ Expected: []*ChunkView{
+ {Offset: 0, Size: 100, FileId: "abc", LogicOffset:0},
+ {Offset: 0, Size: 100, FileId: "asdf", LogicOffset:100},
+ },
+ },
}
for i, testcase := range testcases {