Skip to content

Commit 251b95f

Browse files
authored
Merge pull request containerd#3491 from apostasie/bug-proactive-net-lock
Make CreateNetwork safer wrt concurrency
2 parents 8a06614 + bd1eefa commit 251b95f

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

pkg/netutil/netutil.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -253,16 +253,17 @@ type cniNetworkConfig struct {
253253

254254
func (e *CNIEnv) CreateNetwork(opts types.NetworkCreateOptions) (*NetworkConfig, error) { //nolint:revive
255255
var net *NetworkConfig
256-
netMap, err := e.NetworkMap()
257-
if err != nil {
258-
return nil, err
259-
}
260-
261-
if _, ok := netMap[opts.Name]; ok {
262-
return nil, errdefs.ErrAlreadyExists
263-
}
264256

265257
fn := func() error {
258+
netMap, err := e.NetworkMap()
259+
if err != nil {
260+
return err
261+
}
262+
263+
if _, ok := netMap[opts.Name]; ok {
264+
return errdefs.ErrAlreadyExists
265+
}
266+
266267
ipam, err := e.generateIPAM(opts.IPAMDriver, opts.Subnets, opts.Gateway, opts.IPRange, opts.IPAMOptions, opts.IPv6)
267268
if err != nil {
268269
return err
@@ -277,7 +278,7 @@ func (e *CNIEnv) CreateNetwork(opts types.NetworkCreateOptions) (*NetworkConfig,
277278
}
278279
return e.writeNetworkConfig(net)
279280
}
280-
err = lockutil.WithDirLock(e.NetconfPath, fn)
281+
err := lockutil.WithDirLock(e.NetconfPath, fn)
281282
if err != nil {
282283
return nil, err
283284
}

0 commit comments

Comments
 (0)