From 690b93143ab879f8b0b347ae1e1be521cceaa873 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 14 Feb 2014 15:25:25 -0800 Subject: [PATCH 1/2] Move proxy into pkg Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) Upstream-commit: 8c39db8f96ac2a7ec479a679bc060410cee1a567 Component: engine --- .../engine/networkdriver/portmapper/mapper.go | 2 +- .../networkdriver/portmapper/mapper_test.go | 2 +- components/engine/{ => pkg}/proxy/MAINTAINERS | 0 .../{ => pkg}/proxy/network_proxy_test.go | 0 components/engine/{ => pkg}/proxy/proxy.go | 0 .../engine/{ => pkg}/proxy/stub_proxy.go | 0 .../engine/{ => pkg}/proxy/tcp_proxy.go | 10 +++---- .../engine/{ => pkg}/proxy/udp_proxy.go | 26 +++++++++++++------ components/engine/utils/utils.go | 10 ------- 9 files changed, 25 insertions(+), 25 deletions(-) rename components/engine/{ => pkg}/proxy/MAINTAINERS (100%) rename components/engine/{ => pkg}/proxy/network_proxy_test.go (100%) rename components/engine/{ => pkg}/proxy/proxy.go (100%) rename components/engine/{ => pkg}/proxy/stub_proxy.go (100%) rename components/engine/{ => pkg}/proxy/tcp_proxy.go (81%) rename components/engine/{ => pkg}/proxy/udp_proxy.go (77%) diff --git a/components/engine/networkdriver/portmapper/mapper.go b/components/engine/networkdriver/portmapper/mapper.go index f052c48143..e29959a245 100644 --- a/components/engine/networkdriver/portmapper/mapper.go +++ b/components/engine/networkdriver/portmapper/mapper.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" "github.com/dotcloud/docker/pkg/iptables" - "github.com/dotcloud/docker/proxy" + "github.com/dotcloud/docker/pkg/proxy" "net" "sync" ) diff --git a/components/engine/networkdriver/portmapper/mapper_test.go b/components/engine/networkdriver/portmapper/mapper_test.go index 05718063e3..4c09f3c651 100644 --- a/components/engine/networkdriver/portmapper/mapper_test.go +++ b/components/engine/networkdriver/portmapper/mapper_test.go @@ -2,7 +2,7 @@ package portmapper import ( "github.com/dotcloud/docker/pkg/iptables" - "github.com/dotcloud/docker/proxy" + "github.com/dotcloud/docker/pkg/proxy" "net" "testing" ) diff --git a/components/engine/proxy/MAINTAINERS b/components/engine/pkg/proxy/MAINTAINERS similarity index 100% rename from components/engine/proxy/MAINTAINERS rename to components/engine/pkg/proxy/MAINTAINERS diff --git a/components/engine/proxy/network_proxy_test.go b/components/engine/pkg/proxy/network_proxy_test.go similarity index 100% rename from components/engine/proxy/network_proxy_test.go rename to components/engine/pkg/proxy/network_proxy_test.go diff --git a/components/engine/proxy/proxy.go b/components/engine/pkg/proxy/proxy.go similarity index 100% rename from components/engine/proxy/proxy.go rename to components/engine/pkg/proxy/proxy.go diff --git a/components/engine/proxy/stub_proxy.go b/components/engine/pkg/proxy/stub_proxy.go similarity index 100% rename from components/engine/proxy/stub_proxy.go rename to components/engine/pkg/proxy/stub_proxy.go diff --git a/components/engine/proxy/tcp_proxy.go b/components/engine/pkg/proxy/tcp_proxy.go similarity index 81% rename from components/engine/proxy/tcp_proxy.go rename to components/engine/pkg/proxy/tcp_proxy.go index e7c460f61d..b84483eff9 100644 --- a/components/engine/proxy/tcp_proxy.go +++ b/components/engine/pkg/proxy/tcp_proxy.go @@ -1,7 +1,6 @@ package proxy import ( - "github.com/dotcloud/docker/utils" "io" "log" "net" @@ -49,7 +48,8 @@ func (proxy *TCPProxy) clientLoop(client *net.TCPConn, quit chan bool) { to.CloseRead() event <- written } - utils.Debugf("Forwarding traffic between tcp/%v and tcp/%v", client.RemoteAddr(), backend.RemoteAddr()) + + log.Printf("Forwarding traffic between tcp/%v and tcp/%v", client.RemoteAddr(), backend.RemoteAddr()) go broker(client, backend) go broker(backend, client) @@ -71,17 +71,17 @@ func (proxy *TCPProxy) clientLoop(client *net.TCPConn, quit chan bool) { client.Close() backend.Close() done: - utils.Debugf("%v bytes transferred between tcp/%v and tcp/%v", transferred, client.RemoteAddr(), backend.RemoteAddr()) + log.Printf("%v bytes transferred between tcp/%v and tcp/%v", transferred, client.RemoteAddr(), backend.RemoteAddr()) } func (proxy *TCPProxy) Run() { quit := make(chan bool) defer close(quit) - utils.Debugf("Starting proxy on tcp/%v for tcp/%v", proxy.frontendAddr, proxy.backendAddr) + log.Printf("Starting proxy on tcp/%v for tcp/%v", proxy.frontendAddr, proxy.backendAddr) for { client, err := proxy.listener.Accept() if err != nil { - utils.Debugf("Stopping proxy on tcp/%v for tcp/%v (%v)", proxy.frontendAddr, proxy.backendAddr, err.Error()) + log.Printf("Stopping proxy on tcp/%v for tcp/%v (%v)", proxy.frontendAddr, proxy.backendAddr, err.Error()) return } go proxy.clientLoop(client.(*net.TCPConn), quit) diff --git a/components/engine/proxy/udp_proxy.go b/components/engine/pkg/proxy/udp_proxy.go similarity index 77% rename from components/engine/proxy/udp_proxy.go rename to components/engine/pkg/proxy/udp_proxy.go index 7d34988f70..9395516464 100644 --- a/components/engine/proxy/udp_proxy.go +++ b/components/engine/pkg/proxy/udp_proxy.go @@ -2,9 +2,9 @@ package proxy import ( "encoding/binary" - "github.com/dotcloud/docker/utils" "log" "net" + "strings" "sync" "syscall" "time" @@ -66,7 +66,7 @@ func (proxy *UDPProxy) replyLoop(proxyConn *net.UDPConn, clientAddr *net.UDPAddr proxy.connTrackLock.Lock() delete(proxy.connTrackTable, *clientKey) proxy.connTrackLock.Unlock() - utils.Debugf("Done proxying between udp/%v and udp/%v", clientAddr.String(), proxy.backendAddr.String()) + log.Printf("Done proxying between udp/%v and udp/%v", clientAddr.String(), proxy.backendAddr.String()) proxyConn.Close() }() @@ -92,24 +92,24 @@ func (proxy *UDPProxy) replyLoop(proxyConn *net.UDPConn, clientAddr *net.UDPAddr return } i += written - utils.Debugf("Forwarded %v/%v bytes to udp/%v", i, read, clientAddr.String()) + log.Printf("Forwarded %v/%v bytes to udp/%v", i, read, clientAddr.String()) } } } func (proxy *UDPProxy) Run() { readBuf := make([]byte, UDPBufSize) - utils.Debugf("Starting proxy on udp/%v for udp/%v", proxy.frontendAddr, proxy.backendAddr) + log.Printf("Starting proxy on udp/%v for udp/%v", proxy.frontendAddr, proxy.backendAddr) for { read, from, err := proxy.listener.ReadFromUDP(readBuf) if err != nil { // NOTE: Apparently ReadFrom doesn't return // ECONNREFUSED like Read do (see comment in // UDPProxy.replyLoop) - if utils.IsClosedError(err) { - utils.Debugf("Stopping proxy on udp/%v for udp/%v (socket was closed)", proxy.frontendAddr, proxy.backendAddr) + if isClosedError(err) { + log.Printf("Stopping proxy on udp/%v for udp/%v (socket was closed)", proxy.frontendAddr, proxy.backendAddr) } else { - utils.Errorf("Stopping proxy on udp/%v for udp/%v (%v)", proxy.frontendAddr, proxy.backendAddr, err.Error()) + log.Printf("Stopping proxy on udp/%v for udp/%v (%v)", proxy.frontendAddr, proxy.backendAddr, err.Error()) } break } @@ -134,7 +134,7 @@ func (proxy *UDPProxy) Run() { break } i += written - utils.Debugf("Forwarded %v/%v bytes to udp/%v", i, read, proxy.backendAddr.String()) + log.Printf("Forwarded %v/%v bytes to udp/%v", i, read, proxy.backendAddr.String()) } } } @@ -150,3 +150,13 @@ func (proxy *UDPProxy) Close() { func (proxy *UDPProxy) FrontendAddr() net.Addr { return proxy.frontendAddr } func (proxy *UDPProxy) BackendAddr() net.Addr { return proxy.backendAddr } + +func isClosedError(err error) bool { + /* This comparison is ugly, but unfortunately, net.go doesn't export errClosing. + * See: + * http://golang.org/src/pkg/net/net.go + * https://code.google.com/p/go/issues/detail?id=4337 + * https://groups.google.com/forum/#!msg/golang-nuts/0_aaCvBmOcM/SptmDyX1XJMJ + */ + return strings.HasSuffix(err.Error(), "use of closed network connection") +} diff --git a/components/engine/utils/utils.go b/components/engine/utils/utils.go index 2f7e408621..1aba80ff41 100644 --- a/components/engine/utils/utils.go +++ b/components/engine/utils/utils.go @@ -879,16 +879,6 @@ func ShellQuoteArguments(args []string) string { return buf.String() } -func IsClosedError(err error) bool { - /* This comparison is ugly, but unfortunately, net.go doesn't export errClosing. - * See: - * http://golang.org/src/pkg/net/net.go - * https://code.google.com/p/go/issues/detail?id=4337 - * https://groups.google.com/forum/#!msg/golang-nuts/0_aaCvBmOcM/SptmDyX1XJMJ - */ - return strings.HasSuffix(err.Error(), "use of closed network connection") -} - func PartParser(template, data string) (map[string]string, error) { // ip:public:private var ( From 5f4d37b73db36fa8c970b73ff7f2558d2acfe87c Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Mon, 17 Feb 2014 13:31:13 -0800 Subject: [PATCH 2/2] Remove verbose logging for non errors Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) Upstream-commit: 055f1a1f8181d51d3386b4270f810efd59d51d30 Component: engine --- components/engine/pkg/proxy/tcp_proxy.go | 10 +++------- components/engine/pkg/proxy/udp_proxy.go | 14 ++++---------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/components/engine/pkg/proxy/tcp_proxy.go b/components/engine/pkg/proxy/tcp_proxy.go index b84483eff9..1aa6d9fd70 100644 --- a/components/engine/pkg/proxy/tcp_proxy.go +++ b/components/engine/pkg/proxy/tcp_proxy.go @@ -30,7 +30,7 @@ func NewTCPProxy(frontendAddr, backendAddr *net.TCPAddr) (*TCPProxy, error) { func (proxy *TCPProxy) clientLoop(client *net.TCPConn, quit chan bool) { backend, err := net.DialTCP("tcp", nil, proxy.backendAddr) if err != nil { - log.Printf("Can't forward traffic to backend tcp/%v: %v\n", proxy.backendAddr, err.Error()) + log.Printf("Can't forward traffic to backend tcp/%v: %s\n", proxy.backendAddr, err) client.Close() return } @@ -49,7 +49,6 @@ func (proxy *TCPProxy) clientLoop(client *net.TCPConn, quit chan bool) { event <- written } - log.Printf("Forwarding traffic between tcp/%v and tcp/%v", client.RemoteAddr(), backend.RemoteAddr()) go broker(client, backend) go broker(backend, client) @@ -65,23 +64,20 @@ func (proxy *TCPProxy) clientLoop(client *net.TCPConn, quit chan bool) { for ; i < 2; i++ { transferred += <-event } - goto done + return } } client.Close() backend.Close() -done: - log.Printf("%v bytes transferred between tcp/%v and tcp/%v", transferred, client.RemoteAddr(), backend.RemoteAddr()) } func (proxy *TCPProxy) Run() { quit := make(chan bool) defer close(quit) - log.Printf("Starting proxy on tcp/%v for tcp/%v", proxy.frontendAddr, proxy.backendAddr) for { client, err := proxy.listener.Accept() if err != nil { - log.Printf("Stopping proxy on tcp/%v for tcp/%v (%v)", proxy.frontendAddr, proxy.backendAddr, err.Error()) + log.Printf("Stopping proxy on tcp/%v for tcp/%v (%s)", proxy.frontendAddr, proxy.backendAddr, err) return } go proxy.clientLoop(client.(*net.TCPConn), quit) diff --git a/components/engine/pkg/proxy/udp_proxy.go b/components/engine/pkg/proxy/udp_proxy.go index 9395516464..14f2306a5a 100644 --- a/components/engine/pkg/proxy/udp_proxy.go +++ b/components/engine/pkg/proxy/udp_proxy.go @@ -66,7 +66,6 @@ func (proxy *UDPProxy) replyLoop(proxyConn *net.UDPConn, clientAddr *net.UDPAddr proxy.connTrackLock.Lock() delete(proxy.connTrackTable, *clientKey) proxy.connTrackLock.Unlock() - log.Printf("Done proxying between udp/%v and udp/%v", clientAddr.String(), proxy.backendAddr.String()) proxyConn.Close() }() @@ -92,24 +91,20 @@ func (proxy *UDPProxy) replyLoop(proxyConn *net.UDPConn, clientAddr *net.UDPAddr return } i += written - log.Printf("Forwarded %v/%v bytes to udp/%v", i, read, clientAddr.String()) } } } func (proxy *UDPProxy) Run() { readBuf := make([]byte, UDPBufSize) - log.Printf("Starting proxy on udp/%v for udp/%v", proxy.frontendAddr, proxy.backendAddr) for { read, from, err := proxy.listener.ReadFromUDP(readBuf) if err != nil { // NOTE: Apparently ReadFrom doesn't return // ECONNREFUSED like Read do (see comment in // UDPProxy.replyLoop) - if isClosedError(err) { - log.Printf("Stopping proxy on udp/%v for udp/%v (socket was closed)", proxy.frontendAddr, proxy.backendAddr) - } else { - log.Printf("Stopping proxy on udp/%v for udp/%v (%v)", proxy.frontendAddr, proxy.backendAddr, err.Error()) + if !isClosedError(err) { + log.Printf("Stopping proxy on udp/%v for udp/%v (%s)", proxy.frontendAddr, proxy.backendAddr, err) } break } @@ -120,7 +115,7 @@ func (proxy *UDPProxy) Run() { if !hit { proxyConn, err = net.DialUDP("udp", nil, proxy.backendAddr) if err != nil { - log.Printf("Can't proxy a datagram to udp/%s: %v\n", proxy.backendAddr.String(), err) + log.Printf("Can't proxy a datagram to udp/%s: %s\n", proxy.backendAddr, err) continue } proxy.connTrackTable[*fromKey] = proxyConn @@ -130,11 +125,10 @@ func (proxy *UDPProxy) Run() { for i := 0; i != read; { written, err := proxyConn.Write(readBuf[i:read]) if err != nil { - log.Printf("Can't proxy a datagram to udp/%s: %v\n", proxy.backendAddr.String(), err) + log.Printf("Can't proxy a datagram to udp/%s: %s\n", proxy.backendAddr, err) break } i += written - log.Printf("Forwarded %v/%v bytes to udp/%v", i, read, proxy.backendAddr.String()) } } }