aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzemul <zemul@foxmail.com>2023-04-24 22:00:48 +0800
committerGitHub <noreply@github.com>2023-04-24 07:00:48 -0700
commitf352616b7da093c15a66eb5a3e40df4dd545668a (patch)
treec6a299626bdea29cd44b8227e0bbca50657bc417
parent18686b7375cb02e6a3cda9d2f80387009c21826f (diff)
downloadseaweedfs-f352616b7da093c15a66eb5a3e40df4dd545668a.tar.xz
seaweedfs-f352616b7da093c15a66eb5a3e40df4dd545668a.zip
Volume range read use sync.pool (#4422)
-rw-r--r--weed/server/common.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/weed/server/common.go b/weed/server/common.go
index ee1122726..d88298402 100644
--- a/weed/server/common.go
+++ b/weed/server/common.go
@@ -15,6 +15,7 @@ import (
"path/filepath"
"strconv"
"strings"
+ "sync"
"time"
"google.golang.org/grpc"
@@ -30,6 +31,10 @@ import (
var serverStats *stats.ServerStats
var startTime = time.Now()
+var writePool = sync.Pool{New: func() interface{} {
+ return bufio.NewWriterSize(nil, 128*1024)
+},
+}
func init() {
serverStats = stats.NewServerStats()
@@ -279,8 +284,12 @@ func adjustHeaderContentDisposition(w http.ResponseWriter, r *http.Request, file
func processRangeRequest(r *http.Request, w http.ResponseWriter, totalSize int64, mimeType string, writeFn func(writer io.Writer, offset int64, size int64) error) error {
rangeReq := r.Header.Get("Range")
- bufferedWriter := bufio.NewWriterSize(w, 128*1024)
- defer bufferedWriter.Flush()
+ bufferedWriter := writePool.Get().(*bufio.Writer)
+ bufferedWriter.Reset(w)
+ defer func() {
+ bufferedWriter.Flush()
+ writePool.Put(bufferedWriter)
+ }()
if rangeReq == "" {
w.Header().Set("Content-Length", strconv.FormatInt(totalSize, 10))