aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-06-14 11:16:47 -0700
committerchrislu <chris.lu@gmail.com>2022-06-14 11:16:47 -0700
commit36d275697806678de4af19645a9110529ad13800 (patch)
treed037325b0a348904e339e99b8aa0d1a27b052121
parentcc5d7710880491b7c72ca0dbd60008a9c3a84f08 (diff)
downloadseaweedfs-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.go7
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)
}
}