From: Matt Joiner Date: Wed, 20 Aug 2025 01:41:25 +0000 (+1000) Subject: Avoid buffering to write zeroes X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=73284a700c84ec718e4a103c8147eb966d54e497;p=btrtrc.git Avoid buffering to write zeroes --- diff --git a/storage/file-piece.go b/storage/file-piece.go index f9b73c25..b753de9b 100644 --- a/storage/file-piece.go +++ b/storage/file-piece.go @@ -367,7 +367,7 @@ func (me *filePieceImpl) writeFileTo(w io.Writer, fileIndex int, extent segments // Write zeroes until the end of the hole we're in. var n1 int64 n := min(dataOffset-extent.Start, extent.Length) - n1, err = io.CopyN(w, zeroReader{}, n) + n1, err = writeZeroes(w, n) packageExpvarMap.Add("bytesReadSkippedHole", n1) written += n1 if err != nil { diff --git a/storage/io.go b/storage/io.go new file mode 100644 index 00000000..947be816 --- /dev/null +++ b/storage/io.go @@ -0,0 +1,20 @@ +package storage + +import ( + "io" +) + +var zeroes [4 << 10]byte + +func writeZeroes(w io.Writer, n int64) (written int64, err error) { + for n > 0 { + var w1 int + w1, err = w.Write(zeroes[:min(int64(len(zeroes)), n)][:]) + written += int64(w1) + if err != nil { + break + } + n -= int64(w1) + } + return +}