diff options
| author | Chris Lu <chris.lu@gmail.com> | 2018-05-24 23:19:56 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2018-05-24 23:19:56 -0700 |
| commit | e18c7e160c075b44d2982e452cf4882ba0bfe895 (patch) | |
| tree | 82211e61206529f7e5efaf81c65a3148bca3cf18 | |
| parent | d773e11c7a65903b3ee1adea801a20f91cb0c7aa (diff) | |
| download | seaweedfs-e18c7e160c075b44d2982e452cf4882ba0bfe895.tar.xz seaweedfs-e18c7e160c075b44d2982e452cf4882ba0bfe895.zip | |
avoid empty chunk view
| -rw-r--r-- | weed/filer2/filechunks.go | 2 | ||||
| -rw-r--r-- | weed/filer2/filechunks_test.go | 14 |
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 { |
