From d9b5c5adf089899ab3080da39d3c745ef6ec0dff Mon Sep 17 00:00:00 2001 From: Mathew Merrick Date: Thu, 13 Aug 2020 11:15:43 -0700 Subject: [PATCH 1/2] fix: present podinfo to delete --- cns/cnsclient/cnsclient.go | 4 ++-- cns/cnsclient/cnsclient_test.go | 6 +++++- cns/restserver/ipam.go | 12 +++++++----- cns/restserver/util.go | 13 +++++++------ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/cns/cnsclient/cnsclient.go b/cns/cnsclient/cnsclient.go index e7e40f1e81..06954565d8 100644 --- a/cns/cnsclient/cnsclient.go +++ b/cns/cnsclient/cnsclient.go @@ -218,7 +218,7 @@ func (cnsClient *CNSClient) RequestIPAddress(orchestratorContext []byte) (*cns.G httpc := &http.Client{} url := cnsClient.connectionURL + cns.RequestIPConfig - payload := &cns.GetNetworkContainerRequest{ + payload := &cns.GetIPConfigRequest{ OrchestratorContext: orchestratorContext, } @@ -268,7 +268,7 @@ func (cnsClient *CNSClient) ReleaseIPAddress(orchestratorContext []byte) error { url := cnsClient.connectionURL + cns.ReleaseIPConfig log.Printf("ReleaseIPAddress url %v", url) - payload := &cns.GetNetworkContainerRequest{ + payload := &cns.GetIPConfigRequest{ OrchestratorContext: orchestratorContext, } diff --git a/cns/cnsclient/cnsclient_test.go b/cns/cnsclient/cnsclient_test.go index 2b7747f1af..689cb45ece 100644 --- a/cns/cnsclient/cnsclient_test.go +++ b/cns/cnsclient/cnsclient_test.go @@ -108,11 +108,15 @@ func TestMain(m *testing.M) { defer os.RemoveAll(tmpLogDir) defer os.Remove(tmpFileState.Name()) + logName := "azure-cns.log" + fmt.Printf("Test logger file: %v", tmpLogDir+"/"+logName) + fmt.Printf("Test state :%v", tmpFileState.Name()) + if err != nil { panic(err) } - logger.InitLogger("azure-cns.log", 0, 0, tmpLogDir) + logger.InitLogger(logName, 0, 0, tmpLogDir+"/") config := common.ServiceConfig{} httpRestService, err := restserver.NewHTTPRestService(&config) diff --git a/cns/restserver/ipam.go b/cns/restserver/ipam.go index 4ae8eebb45..1685861bfa 100644 --- a/cns/restserver/ipam.go +++ b/cns/restserver/ipam.go @@ -30,7 +30,7 @@ func (service *HTTPRestService) requestIPConfigHandler(w http.ResponseWriter, r } // retrieve ipconfig from nc - returnCode, returnMessage = service.validateIpConfigRequest(ipconfigRequest) + _, returnCode, returnMessage = service.validateIpConfigRequest(ipconfigRequest) if returnCode == Success { if ipconfiguration, err = requestIPConfigHelper(service, ipconfigRequest); err != nil { returnCode = FailedToAllocateIpConfig @@ -54,7 +54,7 @@ func (service *HTTPRestService) requestIPConfigHandler(w http.ResponseWriter, r func (service *HTTPRestService) releaseIPConfigHandler(w http.ResponseWriter, r *http.Request) { var ( - podInfo cns.KubernetesPodInfo + podInfo *cns.KubernetesPodInfo req cns.GetIPConfigRequest statusCode int returnMessage string @@ -81,9 +81,9 @@ func (service *HTTPRestService) releaseIPConfigHandler(w http.ResponseWriter, r logger.Response(service.Name, resp, resp.ReturnCode, ReturnCodeToString(resp.ReturnCode), err) }() - statusCode, returnMessage = service.validateIpConfigRequest(req) + podInfo, statusCode, returnMessage = service.validateIpConfigRequest(req) - if err = service.releaseIPConfig(podInfo); err != nil { + if err = service.releaseIPConfig(*podInfo); err != nil { statusCode = NotFound returnMessage = err.Error() return @@ -146,12 +146,14 @@ func (service *HTTPRestService) releaseIPConfig(podInfo cns.KubernetesPodInfo) e if ipID != "" { if ipconfig, isExist := service.PodIPConfigState[ipID]; isExist { service.setIPConfigAsAvailable(ipconfig, podInfo) + logger.Printf("Released IP %+v for pod %+v", ipconfig.IPSubnet, podInfo) + } else { logger.Errorf("Failed to get release ipconfig. Pod to IPID exists, but IPID to IPConfig doesn't exist, CNS State potentially corrupt") return fmt.Errorf("releaseIPConfig failed. Pod to IPID exists, but IPID to IPConfig doesn't exist, CNS State potentially corrupt") } } else { - logger.Printf("SetIPConfigAsAvailable failed to release, no allocation found for pod") + logger.Errorf("SetIPConfigAsAvailable failed to release, no allocation found for pod") return nil } return nil diff --git a/cns/restserver/util.go b/cns/restserver/util.go index 836cab42dc..229cdaeede 100644 --- a/cns/restserver/util.go +++ b/cns/restserver/util.go @@ -622,22 +622,23 @@ func (service *HTTPRestService) SendNCSnapShotPeriodically(ncSnapshotIntervalInM } } -func (service *HTTPRestService) validateIpConfigRequest(ipConfigRequest cns.GetIPConfigRequest) (int, string) { +func (service *HTTPRestService) validateIpConfigRequest(ipConfigRequest cns.GetIPConfigRequest) (*cns.KubernetesPodInfo, int, string) { + var podInfo cns.KubernetesPodInfo + if service.state.OrchestratorType != cns.KubernetesCRD { - return UnsupportedOrchestratorType, fmt.Sprintf("ReleaseIPConfig API supported only for kubernetes orchestrator") + return &podInfo, UnsupportedOrchestratorType, fmt.Sprintf("ReleaseIPConfig API supported only for kubernetes orchestrator") } if ipConfigRequest.OrchestratorContext == nil { - return EmptyOrchestratorContext, fmt.Sprintf("OrchastratorContext is not set in the req: %+v", ipConfigRequest) + return &podInfo, EmptyOrchestratorContext, fmt.Sprintf("OrchastratorContext is not set in the req: %+v", ipConfigRequest) } // retrieve podinfo from orchestrator context - var podInfo cns.KubernetesPodInfo if err := json.Unmarshal(ipConfigRequest.OrchestratorContext, &podInfo); err != nil { - return UnsupportedOrchestratorContext, err.Error() + return &podInfo, UnsupportedOrchestratorContext, err.Error() } - return Success, "" + return &podInfo, Success, "" } func (service *HTTPRestService) populateIpConfigInfoFromNCUntransacted(ncId string, ipConfiguration *cns.IPConfiguration) error { From f0d26ca67892f032c54364e52bd66a509b9e3e1e Mon Sep 17 00:00:00 2001 From: Mathew Merrick Date: Thu, 13 Aug 2020 12:56:54 -0700 Subject: [PATCH 2/2] fix: return empty struct instead of pointer --- cns/restserver/ipam.go | 5 ++--- cns/restserver/util.go | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/cns/restserver/ipam.go b/cns/restserver/ipam.go index 1685861bfa..ad36a5f040 100644 --- a/cns/restserver/ipam.go +++ b/cns/restserver/ipam.go @@ -54,7 +54,6 @@ func (service *HTTPRestService) requestIPConfigHandler(w http.ResponseWriter, r func (service *HTTPRestService) releaseIPConfigHandler(w http.ResponseWriter, r *http.Request) { var ( - podInfo *cns.KubernetesPodInfo req cns.GetIPConfigRequest statusCode int returnMessage string @@ -81,9 +80,9 @@ func (service *HTTPRestService) releaseIPConfigHandler(w http.ResponseWriter, r logger.Response(service.Name, resp, resp.ReturnCode, ReturnCodeToString(resp.ReturnCode), err) }() - podInfo, statusCode, returnMessage = service.validateIpConfigRequest(req) + podInfo, statusCode, returnMessage := service.validateIpConfigRequest(req) - if err = service.releaseIPConfig(*podInfo); err != nil { + if err = service.releaseIPConfig(podInfo); err != nil { statusCode = NotFound returnMessage = err.Error() return diff --git a/cns/restserver/util.go b/cns/restserver/util.go index 229cdaeede..88637e569c 100644 --- a/cns/restserver/util.go +++ b/cns/restserver/util.go @@ -622,23 +622,23 @@ func (service *HTTPRestService) SendNCSnapShotPeriodically(ncSnapshotIntervalInM } } -func (service *HTTPRestService) validateIpConfigRequest(ipConfigRequest cns.GetIPConfigRequest) (*cns.KubernetesPodInfo, int, string) { +func (service *HTTPRestService) validateIpConfigRequest(ipConfigRequest cns.GetIPConfigRequest) (cns.KubernetesPodInfo, int, string) { var podInfo cns.KubernetesPodInfo if service.state.OrchestratorType != cns.KubernetesCRD { - return &podInfo, UnsupportedOrchestratorType, fmt.Sprintf("ReleaseIPConfig API supported only for kubernetes orchestrator") + return podInfo, UnsupportedOrchestratorType, fmt.Sprintf("ReleaseIPConfig API supported only for kubernetes orchestrator") } if ipConfigRequest.OrchestratorContext == nil { - return &podInfo, EmptyOrchestratorContext, fmt.Sprintf("OrchastratorContext is not set in the req: %+v", ipConfigRequest) + return podInfo, EmptyOrchestratorContext, fmt.Sprintf("OrchastratorContext is not set in the req: %+v", ipConfigRequest) } // retrieve podinfo from orchestrator context if err := json.Unmarshal(ipConfigRequest.OrchestratorContext, &podInfo); err != nil { - return &podInfo, UnsupportedOrchestratorContext, err.Error() + return podInfo, UnsupportedOrchestratorContext, err.Error() } - return &podInfo, Success, "" + return podInfo, Success, "" } func (service *HTTPRestService) populateIpConfigInfoFromNCUntransacted(ncId string, ipConfiguration *cns.IPConfiguration) error {