Skip to content

Commit 948a206

Browse files
jaer-tsuntamilmani1989
authored andcommitted
Adding check to prevent duplicate Network Container creation (#190)
* Adding check to prevent AzureNetworkContainer.exe from running if nc exists and the version has not changed. * Making changes as per Tamilmani.
1 parent 147c438 commit 948a206

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

cns/restserver/restserver.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -915,13 +915,22 @@ func (service *httpRestService) createOrUpdateNetworkContainer(w http.ResponseWr
915915
switch r.Method {
916916
case "POST":
917917
if req.NetworkContainerType == cns.WebApps {
918-
nc := service.networkContainer
919-
if err := nc.Create(req); err != nil {
920-
returnMessage = fmt.Sprintf("[Azure CNS] Error. CreateOrUpdateNetworkContainer failed %v", err.Error())
921-
returnCode = UnexpectedError
922-
break
918+
// try to get the saved nc state if it exists
919+
service.lock.Lock()
920+
existing, ok := service.state.ContainerStatus[req.NetworkContainerid]
921+
service.lock.Unlock()
922+
923+
// create/update nc only if it doesn't exist or it exists and the requested version is different from the saved version
924+
if !ok || (ok && existing.VMVersion != req.Version) {
925+
nc := service.networkContainer
926+
if err = nc.Create(req); err != nil {
927+
returnMessage = fmt.Sprintf("[Azure CNS] Error. CreateOrUpdateNetworkContainer failed %v", err.Error())
928+
returnCode = UnexpectedError
929+
break
930+
}
923931
}
924932
}
933+
925934
returnCode, returnMessage = service.saveNetworkContainerGoalState(req)
926935

927936
default:
@@ -967,6 +976,9 @@ func (service *httpRestService) getNetworkContainerResponse(req cns.GetNetworkCo
967976
var containerID string
968977
var getNetworkContainerResponse cns.GetNetworkContainerResponse
969978

979+
service.lock.Lock()
980+
defer service.lock.Unlock()
981+
970982
switch service.state.OrchestratorType {
971983
case cns.Kubernetes:
972984
var podInfo cns.KubernetesPodInfo
@@ -1049,7 +1061,11 @@ func (service *httpRestService) deleteNetworkContainer(w http.ResponseWriter, r
10491061
var containerStatus containerstatus
10501062
var ok bool
10511063

1052-
if containerStatus, ok = service.state.ContainerStatus[req.NetworkContainerid]; !ok {
1064+
service.lock.Lock()
1065+
containerStatus, ok = service.state.ContainerStatus[req.NetworkContainerid]
1066+
service.lock.Unlock()
1067+
1068+
if !ok {
10531069
log.Printf("Not able to retrieve network container details for this container id %v", req.NetworkContainerid)
10541070
break
10551071
}

0 commit comments

Comments
 (0)