daemon: remove some intermediate vars and some cleanup

Remove some intermediate vars, move vars closer to where they're used,
and introduce local var for `nw.Name()` to reduce some locking/unlocking in:

- `Daemon.allocateNetwork()`
- `Daemon.releaseNetwork()`
- `Daemon.connectToNetwork()`
- `Daemon.disconnectFromNetwork()`
- `Daemon.findAndAttachNetwork()`

Also un-wrapping some lines to make it slightly easier to read the conditions.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2023-07-23 23:58:31 +02:00
parent 8153a7760e
commit 4f9540f19f
No known key found for this signature in database
GPG key ID: 76698F39D527CE8C

View file

@ -356,8 +356,7 @@ func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrN
n, err := daemon.FindNetwork(id)
if err != nil {
// We should always be able to find the network for a
// managed container.
// We should always be able to find the network for a managed container.
if container.Managed {
return nil, nil, err
}
@ -385,22 +384,18 @@ func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrN
if epConfig.IPAMConfig.IPv4Address != "" {
addresses = append(addresses, epConfig.IPAMConfig.IPv4Address)
}
if epConfig.IPAMConfig.IPv6Address != "" {
addresses = append(addresses, epConfig.IPAMConfig.IPv6Address)
}
}
var (
nwCfg *networktypes.NetworkingConfig
retryCount int
)
if n == nil && daemon.attachableNetworkLock != nil {
daemon.attachableNetworkLock.Lock(id)
defer daemon.attachableNetworkLock.Unlock(id)
}
retryCount := 0
var nwCfg *networktypes.NetworkingConfig
for {
// In all other cases, attempt to attach to the network to
// trigger attachment in the swarm cluster manager.
@ -526,13 +521,10 @@ func (daemon *Daemon) allocateNetwork(cfg *config.Config, container *container.C
return nil
}
var (
start = time.Now()
controller = daemon.netController
)
start := time.Now()
// Cleanup any stale sandbox left over due to ungraceful daemon shutdown
if err := controller.SandboxDestroy(container.ID); err != nil {
if err := daemon.netController.SandboxDestroy(container.ID); err != nil {
log.G(context.TODO()).WithError(err).Errorf("failed to cleanup up stale network sandbox for container %s", container.ID)
}
@ -541,7 +533,6 @@ func (daemon *Daemon) allocateNetwork(cfg *config.Config, container *container.C
}
updateSettings := false
if len(container.NetworkSettings.Networks) == 0 {
daemon.updateContainerNetworkSettings(container, nil)
updateSettings = true
@ -728,8 +719,7 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container.
if container.HostConfig.NetworkMode.IsContainer() {
return runconfig.ErrConflictSharedNetwork
}
if containertypes.NetworkMode(idOrName).IsBridge() &&
cfg.DisableBridge {
if cfg.DisableBridge && containertypes.NetworkMode(idOrName).IsBridge() {
container.Config.NetworkDisabled = true
return nil
}
@ -744,14 +734,12 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container.
if n == nil {
return nil
}
nwName := n.Name()
var operIPAM bool
if nwCfg != nil {
if epConfig, ok := nwCfg.EndpointsConfig[n.Name()]; ok {
if endpointConfig.IPAMConfig == nil ||
(endpointConfig.IPAMConfig.IPv4Address == "" &&
endpointConfig.IPAMConfig.IPv6Address == "" &&
len(endpointConfig.IPAMConfig.LinkLocalIPs) == 0) {
if epConfig, ok := nwCfg.EndpointsConfig[nwName]; ok {
if endpointConfig.IPAMConfig == nil || (endpointConfig.IPAMConfig.IPv4Address == "" && endpointConfig.IPAMConfig.IPv6Address == "" && len(endpointConfig.IPAMConfig.LinkLocalIPs) == 0) {
operIPAM = true
}
@ -765,7 +753,6 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container.
return err
}
controller := daemon.netController
sb := daemon.getNetworkSandbox(container)
createOptions, err := buildCreateEndpointOptions(container, n, endpointConfig, sb, cfg.DNS)
if err != nil {
@ -784,7 +771,7 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container.
}
}
}()
container.NetworkSettings.Networks[n.Name()] = &network.EndpointSettings{
container.NetworkSettings.Networks[nwName] = &network.EndpointSettings{
EndpointSettings: endpointConfig,
IPAMOperational: operIPAM,
}
@ -800,7 +787,7 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container.
if err != nil {
return err
}
sb, err = controller.NewSandbox(container.ID, sbOptions...)
sb, err = daemon.netController.NewSandbox(container.ID, sbOptions...)
if err != nil {
return err
}
@ -885,8 +872,7 @@ func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n *l
ep *libnetwork.Endpoint
sbox *libnetwork.Sandbox
)
s := func(current *libnetwork.Endpoint) bool {
n.WalkEndpoints(func(current *libnetwork.Endpoint) bool {
epInfo := current.Info()
if epInfo == nil {
return false
@ -899,19 +885,17 @@ func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n *l
}
}
return false
}
n.WalkEndpoints(s)
if ep == nil && force {
epName := strings.TrimPrefix(container.Name, "/")
ep, err := n.EndpointByName(epName)
if err != nil {
return err
}
return ep.Delete(force)
}
})
if ep == nil {
if force {
var err error
ep, err = n.EndpointByName(strings.TrimPrefix(container.Name, "/"))
if err != nil {
return err
}
return ep.Delete(force)
}
return fmt.Errorf("container %s is not connected to network %s", container.ID, n.Name())
}
@ -1005,16 +989,14 @@ func (daemon *Daemon) releaseNetwork(container *container.Container) {
return
}
sid := container.NetworkSettings.SandboxID
settings := container.NetworkSettings.Networks
container.NetworkSettings.Ports = nil
sid := container.NetworkSettings.SandboxID
if sid == "" {
return
}
var networks []*libnetwork.Network
for n, epSettings := range settings {
for n, epSettings := range container.NetworkSettings.Networks {
if nw, err := daemon.FindNetwork(getNetworkID(n, epSettings.EndpointSettings)); err == nil {
networks = append(networks, nw)
}