From 0ff8b4f7b11b8174b02d81a920e170cc7cfbb1d1 Mon Sep 17 00:00:00 2001 From: Vamsi Kalapala Date: Fri, 3 Dec 2021 15:12:00 -0800 Subject: [PATCH 1/3] fix: [NPM] wait for Azure network to be created in windows DP for 20 mins --- npm/pkg/dataplane/dataplane_windows.go | 40 ++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/npm/pkg/dataplane/dataplane_windows.go b/npm/pkg/dataplane/dataplane_windows.go index 491558876d..ff036eb015 100644 --- a/npm/pkg/dataplane/dataplane_windows.go +++ b/npm/pkg/dataplane/dataplane_windows.go @@ -2,6 +2,8 @@ package dataplane import ( "fmt" + "strings" + "time" "github.com/Azure/azure-container-networking/npm/pkg/dataplane/policies" npmerrors "github.com/Azure/azure-container-networking/npm/util/errors" @@ -10,8 +12,10 @@ import ( ) const ( - policyWithSets policyMode = "policyWithSets" - policyWithIPs policyMode = "policyWithIPs" + policyWithSets policyMode = "policyWithSets" + policyWithIPs policyMode = "policyWithIPs" + maxNoNetRetryCount int = 240 // max wait time 240*5 == 20 mins + maxNoNetSleepTime int = 5 // in seconds ) func (dp *DataPlane) setPolicyMode() { @@ -43,6 +47,34 @@ func (dp *DataPlane) initializeDataPlane() error { return nil } +func (dp *DataPlane) getNetworkInfo() error { + err := dp.setNetworkIDByName(AzureNetworkName) + if err == nil { + return nil + } + + if isNetworkNotFoundErr(err) { + retryNumber := 0 + ticker := time.NewTicker(time.Second * time.Duration(maxNoNetSleepTime)) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + err := dp.setNetworkIDByName(AzureNetworkName) + if err == nil || !isNetworkNotFoundErr(err) { + return nil + } + retryNumber++ + if retryNumber >= maxNoNetRetryCount { + return fmt.Errorf("failed to get network info after %d retries with err %w", maxNoNetRetryCount, err) + } + } + } + } + return err +} + func (dp *DataPlane) resetDataPlane() error { // initialize the DP so the podendpoints will get updated. if err := dp.initializeDataPlane(); err != nil { @@ -292,3 +324,7 @@ func (dp *DataPlane) getAllEndpointIDs() []string { } return endpointIDs } + +func isNetworkNotFoundErr(err error) bool { + return strings.Contains(err.Error(), fmt.Sprintf("Network name \"%s\" not found", AzureNetworkName)) +} From b3feb018318bf251f30bfb0f54ca55f304c6a3ec Mon Sep 17 00:00:00 2001 From: Vamsi Kalapala Date: Fri, 3 Dec 2021 15:14:24 -0800 Subject: [PATCH 2/3] calling getNetworkInfo in initialize --- npm/pkg/dataplane/dataplane_windows.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/pkg/dataplane/dataplane_windows.go b/npm/pkg/dataplane/dataplane_windows.go index ff036eb015..cec321452c 100644 --- a/npm/pkg/dataplane/dataplane_windows.go +++ b/npm/pkg/dataplane/dataplane_windows.go @@ -34,7 +34,7 @@ func (dp *DataPlane) initializeDataPlane() error { dp.setPolicyMode() } - err := dp.setNetworkIDByName(AzureNetworkName) + err := dp.getNetworkInfo() if err != nil { return err } From 133b6ec17551754c4e8148fb1a135999e30da522 Mon Sep 17 00:00:00 2001 From: Vamsi Kalapala Date: Tue, 7 Dec 2021 16:44:56 -0800 Subject: [PATCH 3/3] Addressing comments --- npm/pkg/dataplane/dataplane_windows.go | 44 ++++++++++++-------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/npm/pkg/dataplane/dataplane_windows.go b/npm/pkg/dataplane/dataplane_windows.go index cec321452c..7858b18221 100644 --- a/npm/pkg/dataplane/dataplane_windows.go +++ b/npm/pkg/dataplane/dataplane_windows.go @@ -48,31 +48,29 @@ func (dp *DataPlane) initializeDataPlane() error { } func (dp *DataPlane) getNetworkInfo() error { - err := dp.setNetworkIDByName(AzureNetworkName) - if err == nil { - return nil - } - - if isNetworkNotFoundErr(err) { - retryNumber := 0 - ticker := time.NewTicker(time.Second * time.Duration(maxNoNetSleepTime)) - defer ticker.Stop() - - for { - select { - case <-ticker.C: - err := dp.setNetworkIDByName(AzureNetworkName) - if err == nil || !isNetworkNotFoundErr(err) { - return nil - } - retryNumber++ - if retryNumber >= maxNoNetRetryCount { - return fmt.Errorf("failed to get network info after %d retries with err %w", maxNoNetRetryCount, err) - } - } + retryNumber := 0 + ticker := time.NewTicker(time.Second * time.Duration(maxNoNetSleepTime)) + defer ticker.Stop() + + var err error + for ; true; <-ticker.C { + err = dp.setNetworkIDByName(AzureNetworkName) + if err == nil || !isNetworkNotFoundErr(err) { + return err } + retryNumber++ + if retryNumber >= maxNoNetRetryCount { + break + } + klog.Infof("[DataPlane Windows] Network with name %s not found. Retrying in %d seconds, Current retry number %d, max retries: %d", + AzureNetworkName, + maxNoNetSleepTime, + retryNumber, + maxNoNetRetryCount, + ) } - return err + + return fmt.Errorf("failed to get network info after %d retries with err %w", maxNoNetRetryCount, err) } func (dp *DataPlane) resetDataPlane() error {