libnetwork: Controller.NewNetwork: inline arrangeUserFilterRule()
arrangeUserFilterRule uses the package-level [`ctrl` variable][1], which holds a reference to a controller instance. This variable is set by [`setupArrangeUserFilterRule()`][2], which is called when initialization a controller ([`libnetwork.New`][3]). In normal circumstances, there would only be one controller, created during daemon startup, and the instance of the controller would be the same as the controller that `NewNetwork` is called from, but there's no protection for the `ctrl` variable, and various integration tests create their own controller instance. The global `ctrl` var was introduced in [54e7900fb89b1aeeb188d935f29cf05514fd419b][4], with the assumption that [only one controller could ever exist][5]. This patch tries to reduce uses of the `ctrl` variable, and as we're calling this code from inside a method on a specific controller, we inline the code and use that specific controller instead. [1]:37b908aa62/libnetwork/firewall_linux.go (L12)
[2]:37b908aa62/libnetwork/firewall_linux.go (L14-L17)
[3]:37b908aa62/libnetwork/controller.go (L163)
[4]:54e7900fb8
[5]: https://github.com/moby/libnetwork/pull/2471#discussion_r343457183 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
9484520327
commit
e57b807a42
1 changed files with 8 additions and 1 deletions
|
@ -664,7 +664,14 @@ addToStore:
|
|||
arrangeIngressFilterRule()
|
||||
c.mu.Unlock()
|
||||
}
|
||||
arrangeUserFilterRule()
|
||||
|
||||
// Sets up the DOCKER-USER chain for each iptables version (IPv4, IPv6)
|
||||
// that's enabled in the controller's configuration.
|
||||
for _, ipVersion := range c.enabledIptablesVersions() {
|
||||
if err := setupUserChain(ipVersion); err != nil {
|
||||
log.G(context.TODO()).WithError(err).Warnf("Controller.NewNetwork %s:", name)
|
||||
}
|
||||
}
|
||||
|
||||
return nw, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue