Merge branch 'v1.6' into master
This commit is contained in:
commit
bddb4cc33c
4 changed files with 44 additions and 1 deletions
2
Gopkg.lock
generated
2
Gopkg.lock
generated
|
@ -1215,7 +1215,7 @@
|
|||
"roundrobin",
|
||||
"utils"
|
||||
]
|
||||
revision = "7a2284ad8d6f4d362a6b38f3cdcc812291dce293"
|
||||
revision = "d5b73186eed4aa34b52748699ad19e90f61d4059"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/vulcand/predicate"
|
||||
|
|
27
server/bufferpool.go
Normal file
27
server/bufferpool.go
Normal 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)
|
||||
}
|
|
@ -11,6 +11,7 @@ import (
|
|||
stdlog "log"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
@ -77,6 +78,7 @@ type Server struct {
|
|||
provider provider.Provider
|
||||
configurationListeners []func(types.Configuration)
|
||||
entryPoints map[string]EntryPoint
|
||||
bufferPool httputil.BufferPool
|
||||
}
|
||||
|
||||
// EntryPoint entryPoint information (configuration + internalRouter)
|
||||
|
@ -117,6 +119,8 @@ func NewServer(globalConfiguration configuration.GlobalConfiguration, provider p
|
|||
server.globalConfiguration.API.CurrentConfigurations = &server.currentConfigurations
|
||||
}
|
||||
|
||||
server.bufferPool = newBufferPool()
|
||||
|
||||
server.routinesPool = safe.NewPool(context.Background())
|
||||
server.defaultForwardingRoundTripper = createHTTPTransport(globalConfiguration)
|
||||
|
||||
|
@ -988,6 +992,7 @@ func (s *Server) loadConfig(configurations types.Configurations, globalConfigura
|
|||
forward.ErrorHandler(errorHandler),
|
||||
forward.Rewriter(rewriter),
|
||||
forward.ResponseModifier(responseModifier),
|
||||
forward.BufferPool(s.bufferPool),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
|
|
11
vendor/github.com/vulcand/oxy/forward/fwd.go
generated
vendored
11
vendor/github.com/vulcand/oxy/forward/fwd.go
generated
vendored
|
@ -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.
|
||||
func Stream(stream bool) optSetter {
|
||||
return func(f *Forwarder) error {
|
||||
|
@ -176,6 +184,8 @@ type httpForwarder struct {
|
|||
tlsClientConfig *tls.Config
|
||||
|
||||
log OxyLogger
|
||||
|
||||
bufferPool httputil.BufferPool
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -478,6 +488,7 @@ func (f *httpForwarder) serveHTTP(w http.ResponseWriter, inReq *http.Request, ct
|
|||
Transport: f.roundTripper,
|
||||
FlushInterval: f.flushInterval,
|
||||
ModifyResponse: f.modifyResponse,
|
||||
BufferPool: f.bufferPool,
|
||||
}
|
||||
revproxy.ServeHTTP(pw, outReq)
|
||||
|
||||
|
|
Loading…
Reference in a new issue