From 6d61795352e530bc67364ea74e9774ef149de03c Mon Sep 17 00:00:00 2001 From: Predrag Rogic Date: Mon, 15 Feb 2021 16:43:37 +0000 Subject: [PATCH] simplify free subnet query for oci net create --- pkg/drivers/kic/oci/network_create.go | 30 ++++++++------------------- pkg/drivers/kvm/network.go | 3 ++- pkg/network/network.go | 2 +- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/pkg/drivers/kic/oci/network_create.go b/pkg/drivers/kic/oci/network_create.go index 3fbb9a6500..2766044e05 100644 --- a/pkg/drivers/kic/oci/network_create.go +++ b/pkg/drivers/kic/oci/network_create.go @@ -71,30 +71,18 @@ func CreateNetwork(ociBin string, networkName string) (net.IP, error) { if err != nil { klog.Warningf("failed to get mtu information from the %s's default network %q: %v", ociBin, defaultBridgeName, err) } - attempts := 0 - subnetAddr := firstSubnetAddr // Rather than iterate through all of the valid subnets, give up at 20 to avoid a lengthy user delay for something that is unlikely to work. // will be like 192.168.49.0/24 ,...,192.168.239.0/24 - for attempts < 2 { - subnet, err := network.FreeSubnet(subnetAddr, 10, 10) - if err != nil { - klog.Warningf("failed to find free private network subnet starting with %q, step %d, tries %d: %v", subnetAddr, 10, 10, err) - } - subnetAddr = subnet.IP - - info.gateway, err = tryCreateDockerNetwork(ociBin, subnetAddr, defaultSubnetMask, info.mtu, networkName) - if err == nil { - return info.gateway, nil - } - - // don't retry if error is not adddress is taken - if !(errors.Is(err, ErrNetworkSubnetTaken) || errors.Is(err, ErrNetworkGatewayTaken)) { - klog.Errorf("error while trying to create network %v", err) - return nil, errors.Wrap(err, "un-retryable") - } - attempts++ + subnet, err := network.FreeSubnet(firstSubnetAddr, 10, 20) + if err != nil { + klog.Errorf("error while trying to create network: %v", err) + return nil, errors.Wrap(err, "un-retryable") } - return info.gateway, fmt.Errorf("failed to create network after 20 attempts") + info.gateway, err = tryCreateDockerNetwork(ociBin, subnet.IP, defaultSubnetMask, info.mtu, networkName) + if err != nil { + return info.gateway, fmt.Errorf("failed to create network after 20 attempts") + } + return info.gateway, nil } func tryCreateDockerNetwork(ociBin string, subnetAddr string, subnetMask int, mtu int, name string) (net.IP, error) { diff --git a/pkg/drivers/kvm/network.go b/pkg/drivers/kvm/network.go index 00b582e196..289a9d5fb8 100644 --- a/pkg/drivers/kvm/network.go +++ b/pkg/drivers/kvm/network.go @@ -159,7 +159,8 @@ func (d *Driver) createNetwork() error { if err != nil { subnet, err := network.FreeSubnet(firstSubnetAddr, 10, 20) if err != nil { - return errors.Wrapf(err, "failed to find free private network subnet starting with %q, step: %d, tries:%d", firstSubnetAddr, 10, 20) + log.Debugf("error while trying to create network: %v", err) + return errors.Wrap(err, "un-retryable") } tryNet := kvmNetwork{ Name: d.PrivateNetwork, diff --git a/pkg/network/network.go b/pkg/network/network.go index 5cd3f1a362..049329e6d8 100644 --- a/pkg/network/network.go +++ b/pkg/network/network.go @@ -206,5 +206,5 @@ func FreeSubnet(startSubnet string, step, tries int) (*Parameters, error) { } startSubnet = nextSubnet.String() } - return nil, fmt.Errorf("no free private network subnets found with given parameters") + return nil, fmt.Errorf("no free private network subnets found with given parameters (start: %q, step: %d, tries: %d)", startSubnet, step, tries) }