Merge pull request #45658 from corhere/backport-24.0/libn/fix-embedded-resolver-live-reload
[24.0 backport] libnetwork: fix sandbox restore
This commit is contained in:
commit
ebe29481ec
4 changed files with 13 additions and 15 deletions
|
@ -470,16 +470,10 @@ func (n *networkNamespace) Destroy() error {
|
|||
}
|
||||
|
||||
// Restore restore the network namespace
|
||||
func (n *networkNamespace) Restore(ifsopt map[string][]IfaceOption, routes []*types.StaticRoute, gw net.IP, gw6 net.IP) error {
|
||||
func (n *networkNamespace) Restore(ifsopt map[Iface][]IfaceOption, routes []*types.StaticRoute, gw net.IP, gw6 net.IP) error {
|
||||
// restore interfaces
|
||||
for name, opts := range ifsopt {
|
||||
if !strings.Contains(name, "+") {
|
||||
return fmt.Errorf("wrong iface name in restore osl sandbox interface: %s", name)
|
||||
}
|
||||
seps := strings.Split(name, "+")
|
||||
srcName := seps[0]
|
||||
dstPrefix := seps[1]
|
||||
i := &nwIface{srcName: srcName, dstName: dstPrefix, ns: n}
|
||||
i := &nwIface{srcName: name.SrcName, dstName: name.DstPrefix, ns: n}
|
||||
i.processInterfaceOptions(opts...)
|
||||
if i.master != "" {
|
||||
i.dstMaster = n.findDst(i.master, true)
|
||||
|
@ -531,7 +525,7 @@ func (n *networkNamespace) Restore(ifsopt map[string][]IfaceOption, routes []*ty
|
|||
}
|
||||
|
||||
var index int
|
||||
indexStr := strings.TrimPrefix(i.dstName, dstPrefix)
|
||||
indexStr := strings.TrimPrefix(i.dstName, name.DstPrefix)
|
||||
if indexStr != "" {
|
||||
index, err = strconv.Atoi(indexStr)
|
||||
if err != nil {
|
||||
|
@ -540,8 +534,8 @@ func (n *networkNamespace) Restore(ifsopt map[string][]IfaceOption, routes []*ty
|
|||
}
|
||||
index++
|
||||
n.Lock()
|
||||
if index > n.nextIfIndex[dstPrefix] {
|
||||
n.nextIfIndex[dstPrefix] = index
|
||||
if index > n.nextIfIndex[name.DstPrefix] {
|
||||
n.nextIfIndex[name.DstPrefix] = index
|
||||
}
|
||||
n.iFaces = append(n.iFaces, i)
|
||||
n.Unlock()
|
||||
|
|
|
@ -17,6 +17,10 @@ const (
|
|||
SandboxTypeLoadBalancer = iota
|
||||
)
|
||||
|
||||
type Iface struct {
|
||||
SrcName, DstPrefix string
|
||||
}
|
||||
|
||||
// IfaceOption is a function option type to set interface options.
|
||||
type IfaceOption func(i *nwIface)
|
||||
|
||||
|
@ -89,7 +93,7 @@ type Sandbox interface {
|
|||
Destroy() error
|
||||
|
||||
// Restore restores the sandbox.
|
||||
Restore(ifsopt map[string][]IfaceOption, routes []*types.StaticRoute, gw net.IP, gw6 net.IP) error
|
||||
Restore(ifsopt map[Iface][]IfaceOption, routes []*types.StaticRoute, gw net.IP, gw6 net.IP) error
|
||||
|
||||
// ApplyOSTweaks applies operating system specific knobs on the sandbox.
|
||||
ApplyOSTweaks([]SandboxType)
|
||||
|
|
|
@ -765,7 +765,7 @@ func (sb *Sandbox) restoreOslSandbox() error {
|
|||
var routes []*types.StaticRoute
|
||||
|
||||
// restore osl sandbox
|
||||
Ifaces := make(map[string][]osl.IfaceOption)
|
||||
Ifaces := make(map[osl.Iface][]osl.IfaceOption)
|
||||
for _, ep := range sb.endpoints {
|
||||
ep.mu.Lock()
|
||||
joinInfo := ep.joinInfo
|
||||
|
@ -790,7 +790,7 @@ func (sb *Sandbox) restoreOslSandbox() error {
|
|||
if len(i.llAddrs) != 0 {
|
||||
ifaceOptions = append(ifaceOptions, sb.osSbox.InterfaceOptions().LinkLocalAddresses(i.llAddrs))
|
||||
}
|
||||
Ifaces[i.srcName+i.dstPrefix] = ifaceOptions
|
||||
Ifaces[osl.Iface{SrcName: i.srcName, DstPrefix: i.dstPrefix}] = ifaceOptions
|
||||
if joinInfo != nil {
|
||||
routes = append(routes, joinInfo.StaticRoutes...)
|
||||
}
|
||||
|
|
|
@ -260,7 +260,7 @@ func (c *Controller) sandboxCleanup(activeSandboxes map[string]interface{}) {
|
|||
// reconstruct osl sandbox field
|
||||
if !sb.config.useDefaultSandBox {
|
||||
if err := sb.restoreOslSandbox(); err != nil {
|
||||
logrus.Errorf("failed to populate fields for osl sandbox %s", sb.ID())
|
||||
logrus.Errorf("failed to populate fields for osl sandbox %s: %v", sb.ID(), err)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue