aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2025-12-01 09:52:18 -0800
committerChris Lu <chris.lu@gmail.com>2025-12-01 09:52:18 -0800
commit2f007425c0e27c4778cbebeeeee933961985ae3b (patch)
tree7efdd2966d9263ccd0bc576381ef4793fc5d0e87
parent5461f85240c486a4f0e88ca016143e7392d2e552 (diff)
downloadseaweedfs-2f007425c0e27c4778cbebeeeee933961985ae3b.tar.xz
seaweedfs-2f007425c0e27c4778cbebeeeee933961985ae3b.zip
http: disable HTTP/2 to enable parallel connections
This fixes the mount read throughput issue where HTTP GET requests to the same volume server were being serialized even with high -concurrentReaders. The issue was that: 1. HTTP/2 multiplexes all requests over a single TCP connection 2. Even with HTTP/1.1, ForceAttemptHTTP2 defaults to true in Go Changes: - Set ForceAttemptHTTP2: false on http.Transport to disable HTTP/2 - Set MaxConnsPerHost: 0 (unlimited) to allow parallel connections per host - For HTTPS, set NextProtos to only 'http/1.1' to prevent HTTP/2 negotiation This allows multiple goroutines to use separate TCP connections to the same volume server, enabling true parallel chunk fetching and better network bandwidth utilization. Relates to: #7504
-rw-r--r--weed/util/http/client/http_client.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/weed/util/http/client/http_client.go b/weed/util/http/client/http_client.go
index d1d2f5c56..3e015ca2d 100644
--- a/weed/util/http/client/http_client.go
+++ b/weed/util/http/client/http_client.go
@@ -119,6 +119,7 @@ func NewHttpClient(clientName ClientName, opts ...HttpClientOpt) (*HTTPClient, e
Certificates: []tls.Certificate{},
RootCAs: caCertPool,
InsecureSkipVerify: false,
+ NextProtos: []string{"http/1.1"}, // Disable HTTP/2 for parallel connections
}
if clientCertPair != nil {
@@ -130,6 +131,8 @@ func NewHttpClient(clientName ClientName, opts ...HttpClientOpt) (*HTTPClient, e
httpClient.Transport = &http.Transport{
MaxIdleConns: 1024,
MaxIdleConnsPerHost: 1024,
+ MaxConnsPerHost: 0, // 0 means no limit, allows parallel connections
+ ForceAttemptHTTP2: false,
TLSClientConfig: tlsConfig,
}
httpClient.Client = &http.Client{