Skip to content

Commit d98f63b

Browse files
committed
manager/allocator/cnmallocator: use a map for initializers
Refactor the initializers slice to be a map (as driver-names should be unique, and they were not dynamically set here either way). Also inlining the code from initializeDrivers(), as it was only used in a single location, and the code lived far from where it was used. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
1 parent 470f0b5 commit d98f63b

4 files changed

Lines changed: 24 additions & 39 deletions

File tree

manager/allocator/cnmallocator/drivers_darwin.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import (
66
"github.com/moby/swarmkit/v2/manager/allocator/networkallocator"
77
)
88

9-
var initializers = []initializer{
10-
{remote.Init, "remote"},
11-
{ovmanager.Init, "overlay"},
9+
var initializers = map[string]driverRegisterFn{
10+
"remote": remote.Init,
11+
"overlay": ovmanager.Init,
1212
}
1313

1414
// PredefinedNetworks returns the list of predefined network structures

manager/allocator/cnmallocator/drivers_network_linux.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ import (
77
"github.com/docker/docker/libnetwork/drivers/macvlan/mvmanager"
88
"github.com/docker/docker/libnetwork/drivers/overlay/ovmanager"
99
"github.com/docker/docker/libnetwork/drivers/remote"
10+
"github.com/docker/docker/libnetwork/drvregistry"
1011
"github.com/moby/swarmkit/v2/manager/allocator/networkallocator"
1112
)
1213

13-
var initializers = []initializer{
14-
{remote.Init, "remote"},
15-
{ovmanager.Init, "overlay"},
16-
{mvmanager.Init, "macvlan"},
17-
{brmanager.Init, "bridge"},
18-
{ivmanager.Init, "ipvlan"},
19-
{host.Init, "host"},
14+
var initializers = map[string]drvregistry.InitFunc{
15+
"remote": remote.Init,
16+
"overlay": ovmanager.Init,
17+
"macvlan": mvmanager.Init,
18+
"bridge": brmanager.Init,
19+
"ipvlan": ivmanager.Init,
20+
"host": host.Init,
2021
}
2122

2223
// PredefinedNetworks returns the list of predefined network structures

manager/allocator/cnmallocator/drivers_network_windows.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ package cnmallocator
33
import (
44
"github.com/docker/docker/libnetwork/drivers/overlay/ovmanager"
55
"github.com/docker/docker/libnetwork/drivers/remote"
6+
"github.com/docker/docker/libnetwork/drvregistry"
67
"github.com/moby/swarmkit/v2/manager/allocator/networkallocator"
78
)
89

9-
var initializers = []initializer{
10-
{remote.Init, "remote"},
11-
{ovmanager.Init, "overlay"},
12-
{StubManagerInit("internal"), "internal"},
13-
{StubManagerInit("l2bridge"), "l2bridge"},
14-
{StubManagerInit("nat"), "nat"},
10+
var initializers = map[string]drvregistry.InitFunc{
11+
"remote": remote.Init,
12+
"overlay": ovmanager.Init,
13+
"internal": StubManagerInit("internal"),
14+
"l2bridge": StubManagerInit("l2bridge"),
15+
"nat": StubManagerInit("nat"),
1516
}
1617

1718
// PredefinedNetworks returns the list of predefined network structures

manager/allocator/cnmallocator/networkallocator.go

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,6 @@ type networkDriver struct {
8181
capability *driverapi.Capability
8282
}
8383

84-
type initializer struct {
85-
fn drvregistry.InitFunc
86-
ntype string
87-
}
88-
8984
// NetworkConfig is used to store network related cluster config in the Manager.
9085
type NetworkConfig struct {
9186
// DefaultAddrPool specifies default subnet pool for global scope networks
@@ -115,8 +110,10 @@ func New(pg plugingetter.PluginGetter, netConfig *NetworkConfig) (networkallocat
115110
return nil, err
116111
}
117112

118-
if err := initializeDrivers(reg); err != nil {
119-
return nil, err
113+
for name, register := range initializers {
114+
if err := register(reg, nil); err != nil {
115+
return nil, fmt.Errorf("failed to register %q driver: %w", name, err)
116+
}
120117
}
121118

122119
if err = initIPAMDrivers(reg, netConfig); err != nil {
@@ -978,15 +975,6 @@ func (na *cnmNetworkAllocator) allocatePools(n *api.Network) (map[string]string,
978975
return pools, nil
979976
}
980977

981-
func initializeDrivers(reg *drvregistry.DrvRegistry) error {
982-
for _, i := range initializers {
983-
if err := reg.AddDriver(i.ntype, i.fn, nil); err != nil {
984-
return err
985-
}
986-
}
987-
return nil
988-
}
989-
990978
func serviceNetworks(s *api.Service) []*api.NetworkAttachmentConfig {
991979
// Always prefer NetworkAttachmentConfig in the TaskSpec
992980
if len(s.Spec.Task.Networks) == 0 && len(s.Spec.Networks) != 0 {
@@ -1010,13 +998,8 @@ func (na *cnmNetworkAllocator) IsVIPOnIngressNetwork(vip *api.Endpoint_VirtualIP
1010998

1011999
// IsBuiltInDriver returns whether the passed driver is an internal network driver
10121000
func IsBuiltInDriver(name string) bool {
1013-
n := strings.ToLower(name)
1014-
for _, d := range initializers {
1015-
if n == d.ntype {
1016-
return true
1017-
}
1018-
}
1019-
return false
1001+
_, ok := initializers[strings.ToLower(name)]
1002+
return ok
10201003
}
10211004

10221005
// setIPAMSerialAlloc sets the ipam allocation method to serial

0 commit comments

Comments
 (0)