Skip to content

Commit d861e91

Browse files
authored
Add proxy server timeout config options (#420)
1 parent e769043 commit d861e91

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

cmd/litefs/config.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ func NewConfig() Config {
6767

6868
config.Proxy.MaxLag = http.DefaultMaxLag
6969
config.Proxy.PrimaryRedirectTimeout = http.DefaultPrimaryRedirectTimeout
70+
config.Proxy.ReadTimeout = http.DefaultReadTimeout
71+
config.Proxy.ReadHeaderTimeout = http.DefaultReadHeaderTimeout
72+
config.Proxy.WriteTimeout = http.DefaultWriteTimeout
73+
config.Proxy.IdleTimeout = http.DefaultIdleTimeout
7074

7175
config.Tracing.Enabled = true
7276
config.Tracing.MaxSize = DefaultTracingMaxSize
@@ -130,6 +134,11 @@ type ProxyConfig struct {
130134
Passthrough []string `yaml:"passthrough"`
131135
AlwaysForward []string `yaml:"always-forward"`
132136
PrimaryRedirectTimeout time.Duration `yaml:"primary-redirect-timeout"`
137+
138+
ReadTimeout time.Duration `yaml:"read-timeout"`
139+
ReadHeaderTimeout time.Duration `yaml:"read-header-timeout"`
140+
WriteTimeout time.Duration `yaml:"write-timeout"`
141+
IdleTimeout time.Duration `yaml:"idle-timeout"`
133142
}
134143

135144
// LeaseConfig represents a generic configuration for all lease types.

cmd/litefs/mount_linux.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,11 @@ func (c *MountCommand) runProxyServer(ctx context.Context) error {
541541
server.Passthroughs = passthroughs
542542
server.AlwaysForward = alwaysForward
543543
server.PrimaryRedirectTimeout = c.Config.Proxy.PrimaryRedirectTimeout
544+
server.ReadTimeout = c.Config.Proxy.ReadTimeout
545+
server.ReadHeaderTimeout = c.Config.Proxy.ReadHeaderTimeout
546+
server.WriteTimeout = c.Config.Proxy.WriteTimeout
547+
server.IdleTimeout = c.Config.Proxy.IdleTimeout
548+
544549
if err := server.Listen(); err != nil {
545550
return err
546551
}

http/proxy_server.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ const (
2929
DefaultMaxLag = 10 * time.Second
3030

3131
DefaultCookieExpiry = 5 * time.Minute
32+
33+
DefaultReadTimeout = 0
34+
DefaultReadHeaderTimeout = 10 * time.Second
35+
DefaultWriteTimeout = 0
36+
DefaultIdleTimeout = 30 * time.Second
3237
)
3338

3439
var ErrProxyServerClosed = fmt.Errorf("canceled, proxy server closed")
@@ -76,6 +81,12 @@ type ProxyServer struct {
7681
// Time before cookie expires on client.
7782
CookieExpiry time.Duration
7883

84+
// HTTP server timeouts
85+
ReadTimeout time.Duration
86+
ReadHeaderTimeout time.Duration
87+
WriteTimeout time.Duration
88+
IdleTimeout time.Duration
89+
7990
HTTPTransport *http.Transport
8091
}
8192

@@ -89,6 +100,10 @@ func NewProxyServer(store *litefs.Store) *ProxyServer {
89100
MaxLag: DefaultMaxLag,
90101
CookieExpiry: DefaultCookieExpiry,
91102
PrimaryRedirectTimeout: DefaultPrimaryRedirectTimeout,
103+
ReadTimeout: DefaultReadTimeout,
104+
ReadHeaderTimeout: DefaultReadHeaderTimeout,
105+
WriteTimeout: DefaultWriteTimeout,
106+
IdleTimeout: DefaultIdleTimeout,
92107
}
93108

94109
s.ctx, s.cancel = context.WithCancelCause(context.Background())
@@ -129,6 +144,11 @@ func (s *ProxyServer) Listen() (err error) {
129144
}
130145

131146
func (s *ProxyServer) Serve() {
147+
s.httpServer.ReadTimeout = s.ReadTimeout
148+
s.httpServer.ReadHeaderTimeout = s.ReadHeaderTimeout
149+
s.httpServer.WriteTimeout = s.WriteTimeout
150+
s.httpServer.IdleTimeout = s.IdleTimeout
151+
132152
s.g.Go(func() error {
133153
if err := s.httpServer.Serve(s.ln); s.ctx.Err() != nil {
134154
return err

0 commit comments

Comments
 (0)