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:
Bjorn Neergaard 2023-05-30 15:30:39 -06:00 committed by GitHub
commit ebe29481ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 13 additions and 15 deletions

View file

@ -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()

View file

@ -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)

View file

@ -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...)
}

View file

@ -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 {