diff options
| author | chrislu <chris.lu@gmail.com> | 2022-06-14 11:16:47 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-06-14 11:16:47 -0700 |
| commit | 36d275697806678de4af19645a9110529ad13800 (patch) | |
| tree | d037325b0a348904e339e99b8aa0d1a27b052121 | |
| parent | cc5d7710880491b7c72ca0dbd60008a9c3a84f08 (diff) | |
| download | seaweedfs-36d275697806678de4af19645a9110529ad13800.tar.xz seaweedfs-36d275697806678de4af19645a9110529ad13800.zip | |
volume: avoid writing too much data for range requests in large files
related to https://github.com/chrislusf/seaweedfs/issues/3178
| -rw-r--r-- | weed/storage/needle/needle_read_page.go | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/weed/storage/needle/needle_read_page.go b/weed/storage/needle/needle_read_page.go index c00195e93..e909869f3 100644 --- a/weed/storage/needle/needle_read_page.go +++ b/weed/storage/needle/needle_read_page.go @@ -14,9 +14,10 @@ func (n *Needle) ReadNeedleDataInto(r backend.BackendStorageFile, volumeOffset i crc := CRC(0) for x := needleOffset; x < needleOffset+size; x += int64(len(buf)) { count, err := n.ReadNeedleData(r, volumeOffset, buf, x) - if count > 0 { - crc = crc.Update(buf[0:count]) - if _, err = writer.Write(buf[0:count]); err != nil { + toWrite := min(int64(count), needleOffset+size-x) + if toWrite > 0 { + crc = crc.Update(buf[0:toWrite]) + if _, err = writer.Write(buf[0:toWrite]); err != nil { return fmt.Errorf("ReadNeedleData write: %v", err) } } |
