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

Merge pull request #702 from mrjana/bugs

Avoid duplicate entries in /etc/hosts
This commit is contained in:
Madhu Venugopal 2015-10-24 03:00:44 +02:00
commit e550f1b840
2 changed files with 41 additions and 18 deletions

View file

@ -390,7 +390,7 @@ func (ep *endpoint) sbJoin(sbox Sandbox, options ...EndpointOption) error {
if ip := ep.getFirstInterfaceAddress(); ip != nil { if ip := ep.getFirstInterfaceAddress(); ip != nil {
address = ip.String() address = ip.String()
} }
if err = sb.updateHostsFile(address, network.getSvcRecords()); err != nil { if err = sb.updateHostsFile(address, network.getSvcRecords(ep)); err != nil {
return err return err
} }
@ -512,9 +512,6 @@ func (ep *endpoint) sbLeave(sbox Sandbox, options ...EndpointOption) error {
return err return err
} }
// unwatch for service records
n.getController().unWatchSvcRecord(ep)
if sb.needDefaultGW() { if sb.needDefaultGW() {
ep := sb.getEPwithoutGateway() ep := sb.getEPwithoutGateway()
if ep == nil { if ep == nil {
@ -546,17 +543,6 @@ func (ep *endpoint) Delete() error {
} }
ep.Unlock() ep.Unlock()
if err = n.getEpCnt().DecEndpointCnt(); err != nil {
return err
}
defer func() {
if err != nil {
if e := n.getEpCnt().IncEndpointCnt(); e != nil {
log.Warnf("failed to update network %s : %v", n.name, e)
}
}
}()
if err = n.getController().deleteFromStore(ep); err != nil { if err = n.getController().deleteFromStore(ep); err != nil {
return err return err
} }
@ -569,6 +555,20 @@ func (ep *endpoint) Delete() error {
} }
}() }()
if err = n.getEpCnt().DecEndpointCnt(); err != nil {
return err
}
defer func() {
if err != nil {
if e := n.getEpCnt().IncEndpointCnt(); e != nil {
log.Warnf("failed to update network %s : %v", n.name, e)
}
}
}()
// unwatch for service records
n.getController().unWatchSvcRecord(ep)
if err = ep.deleteEndpoint(); err != nil { if err = ep.deleteEndpoint(); err != nil {
return err return err
} }

View file

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"net" "net"
"strconv" "strconv"
"strings"
"sync" "sync"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
@ -685,6 +686,14 @@ func (n *network) CreateEndpoint(name string, options ...EndpointOption) (Endpoi
} }
}() }()
// Watch for service records
n.getController().watchSvcRecord(ep)
defer func() {
if err != nil {
n.getController().unWatchSvcRecord(ep)
}
}()
// Increment endpoint count to indicate completion of endpoint addition // Increment endpoint count to indicate completion of endpoint addition
if err = n.getEpCnt().IncEndpointCnt(); err != nil { if err = n.getEpCnt().IncEndpointCnt(); err != nil {
return nil, err return nil, err
@ -768,6 +777,12 @@ func (n *network) updateSvcRecord(ep *endpoint, localEps []*endpoint, isAdd bool
var recs []etchosts.Record var recs []etchosts.Record
if iface := ep.Iface(); iface.Address() != nil { if iface := ep.Iface(); iface.Address() != nil {
if isAdd { if isAdd {
// If we already have this endpoint in service db just return
if _, ok := sr[ep.Name()]; ok {
n.Unlock()
return
}
sr[ep.Name()] = iface.Address().IP sr[ep.Name()] = iface.Address().IP
sr[ep.Name()+"."+n.name] = iface.Address().IP sr[ep.Name()+"."+n.name] = iface.Address().IP
} else { } else {
@ -793,8 +808,12 @@ func (n *network) updateSvcRecord(ep *endpoint, localEps []*endpoint, isAdd bool
} }
var sbList []*sandbox var sbList []*sandbox
for _, ep := range localEps { for _, lEp := range localEps {
if sb, hasSandbox := ep.getSandbox(); hasSandbox { if ep.ID() == lEp.ID() {
continue
}
if sb, hasSandbox := lEp.getSandbox(); hasSandbox {
sbList = append(sbList, sb) sbList = append(sbList, sb)
} }
} }
@ -808,7 +827,7 @@ func (n *network) updateSvcRecord(ep *endpoint, localEps []*endpoint, isAdd bool
} }
} }
func (n *network) getSvcRecords() []etchosts.Record { func (n *network) getSvcRecords(ep *endpoint) []etchosts.Record {
n.Lock() n.Lock()
defer n.Unlock() defer n.Unlock()
@ -816,6 +835,10 @@ func (n *network) getSvcRecords() []etchosts.Record {
sr, _ := n.ctrlr.svcDb[n.id] sr, _ := n.ctrlr.svcDb[n.id]
for h, ip := range sr { for h, ip := range sr {
if ep != nil && strings.Split(h, ".")[0] == ep.Name() {
continue
}
recs = append(recs, etchosts.Record{ recs = append(recs, etchosts.Record{
Hosts: h, Hosts: h,
IP: ip.String(), IP: ip.String(),