1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #8526 from vbatts/vbatts-too_many_open_files

client: even cleaner use of Transport
This commit is contained in:
Michael Crosby 2014-10-16 13:53:31 -07:00
commit f0eb1ef4e1
2 changed files with 19 additions and 18 deletions

View file

@ -5,10 +5,13 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"net"
"net/http"
"os" "os"
"reflect" "reflect"
"strings" "strings"
"text/template" "text/template"
"time"
flag "github.com/docker/docker/pkg/mflag" flag "github.com/docker/docker/pkg/mflag"
"github.com/docker/docker/pkg/term" "github.com/docker/docker/pkg/term"
@ -34,6 +37,7 @@ type DockerCli struct {
isTerminalIn bool isTerminalIn bool
// isTerminalOut describes if client's STDOUT is a TTY // isTerminalOut describes if client's STDOUT is a TTY
isTerminalOut bool isTerminalOut bool
transport *http.Transport
} }
var funcMap = template.FuncMap{ var funcMap = template.FuncMap{
@ -131,6 +135,19 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, key libtrust.PrivateKey,
err = out err = out
} }
// The transport is created here for reuse during the client session
tr := &http.Transport{
TLSClientConfig: tlsConfig,
Dial: func(dial_network, dial_addr string) (net.Conn, error) {
// Why 32? See issue 8035
return net.DialTimeout(proto, addr, 32*time.Second)
},
}
if proto == "unix" {
// no need in compressing for local communications
tr.DisableCompression = true
}
return &DockerCli{ return &DockerCli{
proto: proto, proto: proto,
addr: addr, addr: addr,
@ -144,5 +161,6 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, key libtrust.PrivateKey,
isTerminalOut: isTerminalOut, isTerminalOut: isTerminalOut,
tlsConfig: tlsConfig, tlsConfig: tlsConfig,
scheme: scheme, scheme: scheme,
transport: tr,
} }
} }

View file

@ -8,7 +8,6 @@ import (
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"net"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
@ -16,7 +15,6 @@ import (
"strconv" "strconv"
"strings" "strings"
"syscall" "syscall"
"time"
"github.com/docker/docker/api" "github.com/docker/docker/api"
"github.com/docker/docker/dockerversion" "github.com/docker/docker/dockerversion"
@ -33,22 +31,7 @@ var (
) )
func (cli *DockerCli) HTTPClient() *http.Client { func (cli *DockerCli) HTTPClient() *http.Client {
tr := &http.Transport{ return &http.Client{Transport: cli.transport}
TLSClientConfig: cli.tlsConfig,
Dial: func(network, addr string) (net.Conn, error) {
// Why 32? See issue 8035
return net.DialTimeout(cli.proto, cli.addr, 32*time.Second)
},
}
if cli.proto == "unix" {
// XXX workaround for net/http Transport which caches connections, but is
// intended for tcp connections, not unix sockets.
tr.DisableKeepAlives = true
// no need in compressing for local communications
tr.DisableCompression = true
}
return &http.Client{Transport: tr}
} }
func (cli *DockerCli) encodeData(data interface{}) (*bytes.Buffer, error) { func (cli *DockerCli) encodeData(data interface{}) (*bytes.Buffer, error) {