Compare commits

...
Author SHA1 Message Date
Chris Lu aff9aa7fa5 fmt 2025-12-01 10:34:10 -08:00
Chris Lu 2f007425c0 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
2025-12-01 09:52:18 -08:00
+6 -2
View File
@@ -4,14 +4,15 @@ import (
"crypto/tls"
"crypto/x509"
"fmt"
util "github.com/seaweedfs/seaweedfs/weed/util"
"github.com/spf13/viper"
"io"
"net/http"
"net/url"
"os"
"strings"
"sync"
util "github.com/seaweedfs/seaweedfs/weed/util"
"github.com/spf13/viper"
)
var (
@@ -119,6 +120,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 +132,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{