Handle buffer pool for oxy
This commit is contained in:
parent
446d73fcf5
commit
62ded580ce
4 changed files with 44 additions and 1 deletions
2
Gopkg.lock
generated
2
Gopkg.lock
generated
|
@ -1217,7 +1217,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
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"
|
stdlog "log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/httputil"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
@ -75,6 +76,7 @@ type Server struct {
|
||||||
metricsRegistry metrics.Registry
|
metricsRegistry metrics.Registry
|
||||||
provider provider.Provider
|
provider provider.Provider
|
||||||
configurationListeners []func(types.Configuration)
|
configurationListeners []func(types.Configuration)
|
||||||
|
bufferPool httputil.BufferPool
|
||||||
}
|
}
|
||||||
|
|
||||||
type serverEntryPoints map[string]*serverEntryPoint
|
type serverEntryPoints map[string]*serverEntryPoint
|
||||||
|
@ -106,6 +108,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)
|
||||||
|
|
||||||
|
@ -1001,6 +1005,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 {
|
||||||
|
|
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.
|
// 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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue