Vendor Libnetwork v0.7.0-rc.6

Signed-off-by: Santhosh Manohar <santhosh@docker.com>
(cherry picked from commit 6dd2c33217)
This commit is contained in:
Santhosh Manohar 2016-04-08 19:00:35 -07:00 committed by Tibor Vass
parent 490c26524c
commit 3522bdfc99
7 changed files with 42 additions and 14 deletions

View File

@ -30,7 +30,7 @@ clone git github.com/RackSec/srslog 259aed10dfa74ea2961eddd1d9847619f6e98837
clone git github.com/imdario/mergo 0.2.1 clone git github.com/imdario/mergo 0.2.1
#get libnetwork packages #get libnetwork packages
clone git github.com/docker/libnetwork v0.7.0-rc.4 clone git github.com/docker/libnetwork v0.7.0-rc.6
clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b
clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4 clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4

View File

@ -1,5 +1,15 @@
# Changelog # Changelog
## 0.7.0-rc.6 (2016-04-10)
- Flush cached resolver socket on default gateway change
## 0.7.0-rc.5 (2016-04-08)
- Persist ipam driver options
- Fixes https://github.com/docker/libnetwork/issues/1087
- Use go vet from go tool
- Godep update to pick up latest docker/docker packages
- Validate remote driver response using docker plugins package method.
## 0.7.0-rc.4 (2016-04-06) ## 0.7.0-rc.4 (2016-04-06)
- Fix the handling for default gateway Endpoint join/leave. - Fix the handling for default gateway Endpoint join/leave.

View File

@ -3,6 +3,5 @@ RUN apt-get update && apt-get -y install iptables
RUN go get github.com/tools/godep \ RUN go get github.com/tools/godep \
github.com/golang/lint/golint \ github.com/golang/lint/golint \
golang.org/x/tools/cmd/vet \
golang.org/x/tools/cmd/cover\ golang.org/x/tools/cmd/cover\
github.com/mattn/goveralls github.com/mattn/goveralls

View File

@ -3,7 +3,6 @@ package remote
import ( import (
"fmt" "fmt"
"net" "net"
"strings"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/plugins" "github.com/docker/docker/pkg/plugins"
@ -14,10 +13,6 @@ import (
"github.com/docker/libnetwork/types" "github.com/docker/libnetwork/types"
) )
const (
missingMethod = "404 page not found"
)
type driver struct { type driver struct {
endpoint *plugins.Client endpoint *plugins.Client
networkType string networkType string
@ -260,7 +255,7 @@ func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string
Options: options, Options: options,
} }
err := d.call("ProgramExternalConnectivity", data, &api.ProgramExternalConnectivityResponse{}) err := d.call("ProgramExternalConnectivity", data, &api.ProgramExternalConnectivityResponse{})
if err != nil && strings.Contains(err.Error(), missingMethod) { if err != nil && plugins.IsNotFound(err) {
// It is not mandatory yet to support this method // It is not mandatory yet to support this method
return nil return nil
} }
@ -274,7 +269,7 @@ func (d *driver) RevokeExternalConnectivity(nid, eid string) error {
EndpointID: eid, EndpointID: eid,
} }
err := d.call("RevokeExternalConnectivity", data, &api.RevokeExternalConnectivityResponse{}) err := d.call("RevokeExternalConnectivity", data, &api.RevokeExternalConnectivityResponse{})
if err != nil && strings.Contains(err.Error(), missingMethod) { if err != nil && plugins.IsNotFound(err) {
// It is not mandatory yet to support this method // It is not mandatory yet to support this method
return nil return nil
} }

View File

@ -477,6 +477,10 @@ func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) error {
ep.Name(), ep.ID(), err) ep.Name(), ep.ID(), err)
} }
} }
if sb.resolver != nil {
sb.resolver.FlushExtServers()
}
} }
if !sb.needDefaultGW() { if !sb.needDefaultGW() {

View File

@ -320,6 +320,13 @@ func (n *network) CopyTo(o datastore.KVObject) error {
dstN.labels[k] = v dstN.labels[k] = v
} }
if n.ipamOptions != nil {
dstN.ipamOptions = make(map[string]string, len(n.ipamOptions))
for k, v := range n.ipamOptions {
dstN.ipamOptions[k] = v
}
}
for _, v4conf := range n.ipamV4Config { for _, v4conf := range n.ipamV4Config {
dstV4Conf := &IpamConf{} dstV4Conf := &IpamConf{}
v4conf.CopyTo(dstV4Conf) v4conf.CopyTo(dstV4Conf)
@ -372,6 +379,7 @@ func (n *network) MarshalJSON() ([]byte, error) {
netMap["scope"] = n.scope netMap["scope"] = n.scope
netMap["labels"] = n.labels netMap["labels"] = n.labels
netMap["ipamType"] = n.ipamType netMap["ipamType"] = n.ipamType
netMap["ipamOptions"] = n.ipamOptions
netMap["addrSpace"] = n.addrSpace netMap["addrSpace"] = n.addrSpace
netMap["enableIPv6"] = n.enableIPv6 netMap["enableIPv6"] = n.enableIPv6
if n.generic != nil { if n.generic != nil {
@ -432,6 +440,15 @@ func (n *network) UnmarshalJSON(b []byte) (err error) {
} }
} }
if v, ok := netMap["ipamOptions"]; ok {
if iOpts, ok := v.(map[string]interface{}); ok {
n.ipamOptions = make(map[string]string, len(iOpts))
for k, v := range iOpts {
n.ipamOptions[k] = v.(string)
}
}
}
if v, ok := netMap["generic"]; ok { if v, ok := netMap["generic"]; ok {
n.generic = v.(map[string]interface{}) n.generic = v.(map[string]interface{})
// Restore opts in their map[string]string form // Restore opts in their map[string]string form

View File

@ -45,7 +45,7 @@ const (
ptrIPv6domain = ".ip6.arpa." ptrIPv6domain = ".ip6.arpa."
respTTL = 600 respTTL = 600
maxExtDNS = 3 //max number of external servers to try maxExtDNS = 3 //max number of external servers to try
extIOTimeout = 3 * time.Second extIOTimeout = 4 * time.Second
defaultRespSize = 512 defaultRespSize = 512
maxConcurrent = 50 maxConcurrent = 50
logInterval = 2 * time.Second logInterval = 2 * time.Second
@ -158,6 +158,10 @@ func (r *resolver) Start() error {
func (r *resolver) FlushExtServers() { func (r *resolver) FlushExtServers() {
for i := 0; i < maxExtDNS; i++ { for i := 0; i < maxExtDNS; i++ {
if r.extDNSList[i].extConn != nil {
r.extDNSList[i].extConn.Close()
}
r.extDNSList[i].extConn = nil r.extDNSList[i].extConn = nil
r.extDNSList[i].extOnce = sync.Once{} r.extDNSList[i].extOnce = sync.Once{}
} }
@ -344,9 +348,6 @@ func (r *resolver) ServeDNS(w dns.ResponseWriter, query *dns.Msg) {
if extDNS.ipStr == "" { if extDNS.ipStr == "" {
break break
} }
log.Debugf("Query %s[%d] from %s, forwarding to %s:%s", name, query.Question[0].Qtype,
w.LocalAddr().String(), proto, extDNS.ipStr)
extConnect := func() { extConnect := func() {
addr := fmt.Sprintf("%s:%d", extDNS.ipStr, 53) addr := fmt.Sprintf("%s:%d", extDNS.ipStr, 53)
extConn, err = net.DialTimeout(proto, addr, extIOTimeout) extConn, err = net.DialTimeout(proto, addr, extIOTimeout)
@ -378,6 +379,8 @@ func (r *resolver) ServeDNS(w dns.ResponseWriter, query *dns.Msg) {
if extConn == nil { if extConn == nil {
continue continue
} }
log.Debugf("Query %s[%d] from %s, forwarding to %s:%s", name, query.Question[0].Qtype,
extConn.LocalAddr().String(), proto, extDNS.ipStr)
// Timeout has to be set for every IO operation. // Timeout has to be set for every IO operation.
extConn.SetDeadline(time.Now().Add(extIOTimeout)) extConn.SetDeadline(time.Now().Add(extIOTimeout))
@ -424,7 +427,7 @@ func (r *resolver) ServeDNS(w dns.ResponseWriter, query *dns.Msg) {
break break
} }
if resp == nil { if resp == nil || w == nil {
return return
} }
} }