Merge pull request #1620 from sanimej/extdns
Fix the data model inconsistency that breaks upgrade to 1.14-dev
This commit is contained in:
commit
dc9966db82
3 changed files with 36 additions and 11 deletions
|
@ -72,8 +72,8 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type extDNSEntry struct {
|
type extDNSEntry struct {
|
||||||
ipStr string
|
IPStr string
|
||||||
hostLoopback bool
|
HostLoopback bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// resolver implements the Resolver interface
|
// resolver implements the Resolver interface
|
||||||
|
@ -413,15 +413,15 @@ func (r *resolver) ServeDNS(w dns.ResponseWriter, query *dns.Msg) {
|
||||||
} else {
|
} else {
|
||||||
for i := 0; i < maxExtDNS; i++ {
|
for i := 0; i < maxExtDNS; i++ {
|
||||||
extDNS := &r.extDNSList[i]
|
extDNS := &r.extDNSList[i]
|
||||||
if extDNS.ipStr == "" {
|
if extDNS.IPStr == "" {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
if extDNS.hostLoopback {
|
if extDNS.HostLoopback {
|
||||||
extConnect()
|
extConnect()
|
||||||
} else {
|
} else {
|
||||||
execErr := r.backend.ExecFunc(extConnect)
|
execErr := r.backend.ExecFunc(extConnect)
|
||||||
|
@ -435,7 +435,7 @@ func (r *resolver) ServeDNS(w dns.ResponseWriter, query *dns.Msg) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
logrus.Debugf("Query %s[%d] from %s, forwarding to %s:%s", name, query.Question[0].Qtype,
|
logrus.Debugf("Query %s[%d] from %s, forwarding to %s:%s", name, query.Question[0].Qtype,
|
||||||
extConn.LocalAddr().String(), proto, extDNS.ipStr)
|
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))
|
||||||
|
|
|
@ -174,8 +174,8 @@ func (sb *sandbox) setExternalResolvers(content []byte, addrType int, checkLoopb
|
||||||
hostLoopback = dns.IsIPv4Localhost(ip)
|
hostLoopback = dns.IsIPv4Localhost(ip)
|
||||||
}
|
}
|
||||||
sb.extDNS = append(sb.extDNS, extDNSEntry{
|
sb.extDNS = append(sb.extDNS, extDNSEntry{
|
||||||
ipStr: ip,
|
IPStr: ip,
|
||||||
hostLoopback: hostLoopback,
|
HostLoopback: hostLoopback,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,12 @@ type sbState struct {
|
||||||
dbExists bool
|
dbExists bool
|
||||||
Eps []epState
|
Eps []epState
|
||||||
EpPriority map[string]int
|
EpPriority map[string]int
|
||||||
ExtDNS []extDNSEntry
|
// external servers have to be persisted so that on restart of a live-restore
|
||||||
|
// enabled daemon we get the external servers for the running containers.
|
||||||
|
// We have two versions of ExtDNS to support upgrade & downgrade of the daemon
|
||||||
|
// between >=1.14 and <1.14 versions.
|
||||||
|
ExtDNS []string
|
||||||
|
ExtDNS2 []extDNSEntry
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sbs *sbState) Key() []string {
|
func (sbs *sbState) Key() []string {
|
||||||
|
@ -114,8 +119,16 @@ func (sbs *sbState) CopyTo(o datastore.KVObject) error {
|
||||||
dstSbs.Eps = append(dstSbs.Eps, eps)
|
dstSbs.Eps = append(dstSbs.Eps, eps)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(sbs.ExtDNS2) > 0 {
|
||||||
|
for _, dns := range sbs.ExtDNS2 {
|
||||||
|
dstSbs.ExtDNS2 = append(dstSbs.ExtDNS2, dns)
|
||||||
|
dstSbs.ExtDNS = append(dstSbs.ExtDNS, dns.IPStr)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
for _, dns := range sbs.ExtDNS {
|
for _, dns := range sbs.ExtDNS {
|
||||||
dstSbs.ExtDNS = append(dstSbs.ExtDNS, dns)
|
dstSbs.ExtDNS = append(dstSbs.ExtDNS, dns)
|
||||||
|
dstSbs.ExtDNS2 = append(dstSbs.ExtDNS2, extDNSEntry{IPStr: dns})
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -131,7 +144,11 @@ func (sb *sandbox) storeUpdate() error {
|
||||||
ID: sb.id,
|
ID: sb.id,
|
||||||
Cid: sb.containerID,
|
Cid: sb.containerID,
|
||||||
EpPriority: sb.epPriority,
|
EpPriority: sb.epPriority,
|
||||||
ExtDNS: sb.extDNS,
|
ExtDNS2: sb.extDNS,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ext := range sb.extDNS {
|
||||||
|
sbs.ExtDNS = append(sbs.ExtDNS, ext.IPStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
|
@ -205,7 +222,15 @@ func (c *controller) sandboxCleanup(activeSandboxes map[string]interface{}) {
|
||||||
dbIndex: sbs.dbIndex,
|
dbIndex: sbs.dbIndex,
|
||||||
isStub: true,
|
isStub: true,
|
||||||
dbExists: true,
|
dbExists: true,
|
||||||
extDNS: sbs.ExtDNS,
|
}
|
||||||
|
// If we are restoring from a older version extDNSEntry won't have the
|
||||||
|
// HostLoopback field
|
||||||
|
if len(sbs.ExtDNS2) > 0 {
|
||||||
|
sb.extDNS = sbs.ExtDNS2
|
||||||
|
} else {
|
||||||
|
for _, dns := range sbs.ExtDNS {
|
||||||
|
sb.extDNS = append(sb.extDNS, extDNSEntry{IPStr: dns})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := " for cleanup"
|
msg := " for cleanup"
|
||||||
|
|
Loading…
Add table
Reference in a new issue