1
0
mirror of https://github.com/containous/traefik.git synced 2025-01-11 05:17:52 +03:00

Merge branch 'v1.6' into master

This commit is contained in:
Fernandez Ludovic 2018-06-07 10:58:59 +02:00
commit bddb4cc33c
4 changed files with 44 additions and 1 deletions

2
Gopkg.lock generated
View File

@ -1215,7 +1215,7 @@
"roundrobin", "roundrobin",
"utils" "utils"
] ]
revision = "7a2284ad8d6f4d362a6b38f3cdcc812291dce293" revision = "d5b73186eed4aa34b52748699ad19e90f61d4059"
[[projects]] [[projects]]
name = "github.com/vulcand/predicate" name = "github.com/vulcand/predicate"

27
server/bufferpool.go Normal file
View File

@ -0,0 +1,27 @@
package server
import "sync"
const bufferPoolSize int = 32 * 1024
func newBufferPool() *bufferPool {
return &bufferPool{
pool: sync.Pool{
New: func() interface{} {
return make([]byte, bufferPoolSize)
},
},
}
}
type bufferPool struct {
pool sync.Pool
}
func (b *bufferPool) Get() []byte {
return b.pool.Get().([]byte)
}
func (b *bufferPool) Put(bytes []byte) {
b.pool.Put(bytes)
}

View File

@ -11,6 +11,7 @@ import (
stdlog "log" stdlog "log"
"net" "net"
"net/http" "net/http"
"net/http/httputil"
"net/url" "net/url"
"os" "os"
"os/signal" "os/signal"
@ -77,6 +78,7 @@ type Server struct {
provider provider.Provider provider provider.Provider
configurationListeners []func(types.Configuration) configurationListeners []func(types.Configuration)
entryPoints map[string]EntryPoint entryPoints map[string]EntryPoint
bufferPool httputil.BufferPool
} }
// EntryPoint entryPoint information (configuration + internalRouter) // EntryPoint entryPoint information (configuration + internalRouter)
@ -117,6 +119,8 @@ func NewServer(globalConfiguration configuration.GlobalConfiguration, provider p
server.globalConfiguration.API.CurrentConfigurations = &server.currentConfigurations server.globalConfiguration.API.CurrentConfigurations = &server.currentConfigurations
} }
server.bufferPool = newBufferPool()
server.routinesPool = safe.NewPool(context.Background()) server.routinesPool = safe.NewPool(context.Background())
server.defaultForwardingRoundTripper = createHTTPTransport(globalConfiguration) server.defaultForwardingRoundTripper = createHTTPTransport(globalConfiguration)
@ -988,6 +992,7 @@ func (s *Server) loadConfig(configurations types.Configurations, globalConfigura
forward.ErrorHandler(errorHandler), forward.ErrorHandler(errorHandler),
forward.Rewriter(rewriter), forward.Rewriter(rewriter),
forward.ResponseModifier(responseModifier), forward.ResponseModifier(responseModifier),
forward.BufferPool(s.bufferPool),
) )
if err != nil { if err != nil {

View File

@ -85,6 +85,14 @@ func ErrorHandler(h utils.ErrorHandler) optSetter {
} }
} }
// BufferPool specifies a buffer pool for httputil.ReverseProxy.
func BufferPool(pool httputil.BufferPool) optSetter {
return func(f *Forwarder) error {
f.bufferPool = pool
return nil
}
}
// Stream specifies if HTTP responses should be streamed. // Stream specifies if HTTP responses should be streamed.
func Stream(stream bool) optSetter { func Stream(stream bool) optSetter {
return func(f *Forwarder) error { return func(f *Forwarder) error {
@ -176,6 +184,8 @@ type httpForwarder struct {
tlsClientConfig *tls.Config tlsClientConfig *tls.Config
log OxyLogger log OxyLogger
bufferPool httputil.BufferPool
} }
const ( const (
@ -478,6 +488,7 @@ func (f *httpForwarder) serveHTTP(w http.ResponseWriter, inReq *http.Request, ct
Transport: f.roundTripper, Transport: f.roundTripper,
FlushInterval: f.flushInterval, FlushInterval: f.flushInterval,
ModifyResponse: f.modifyResponse, ModifyResponse: f.modifyResponse,
BufferPool: f.bufferPool,
} }
revproxy.ServeHTTP(pw, outReq) revproxy.ServeHTTP(pw, outReq)