Skip to content

Commit 99833b0

Browse files
Create functions for service network state (#336)
Create get, set and remove functions for service network state operations. This acquires the service lock inside the functions.
1 parent 09dbe98 commit 99833b0

File tree

2 files changed

+36
-17
lines changed

2 files changed

+36
-17
lines changed

cns/api.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,16 @@ type CreateHnsNetworkRequest struct {
6767
// SubnetInfo is assoicated with HNS network and represents a list
6868
// of subnets available to the network
6969
type SubnetInfo struct {
70-
AddressPrefix string `json:",omitempty"`
71-
GatewayAddress string `json:",omitempty"`
70+
AddressPrefix string
71+
GatewayAddress string
7272
Policies []json.RawMessage `json:",omitempty"`
7373
}
7474

7575
// MacPool is assoicated with HNS network and represents a list
7676
// of macaddresses available to the network
7777
type MacPool struct {
78-
StartMacAddress string `json:",omitempty"`
79-
EndMacAddress string `json:",omitempty"`
78+
StartMacAddress string
79+
EndMacAddress string
8080
}
8181

8282
// DeleteHnsNetworkRequest describes request to delete the HNS network.

cns/restserver/restserver.go

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,33 @@ func (service *HTTPRestService) GetPartitionKey() (dncPartitionKey string) {
195195
return
196196
}
197197

198+
// Get the network info from the service network state
199+
func (service *HTTPRestService) getNetworkInfo(networkName string) (*networkInfo, bool) {
200+
service.lock.Lock()
201+
defer service.lock.Unlock()
202+
networkInfo, found := service.state.Networks[networkName]
203+
204+
return networkInfo, found
205+
}
206+
207+
// Set the network info in the service network state
208+
func (service *HTTPRestService) setNetworkInfo(networkName string, networkInfo *networkInfo) {
209+
service.lock.Lock()
210+
defer service.lock.Unlock()
211+
service.state.Networks[networkName] = networkInfo
212+
213+
return
214+
}
215+
216+
// Remove the network info from the service network state
217+
func (service *HTTPRestService) removeNetworkInfo(networkName string) {
218+
service.lock.Lock()
219+
defer service.lock.Unlock()
220+
delete(service.state.Networks, networkName)
221+
222+
return
223+
}
224+
198225
// Handles requests to set the environment type.
199226
func (service *HTTPRestService) setEnvironment(w http.ResponseWriter, r *http.Request) {
200227
log.Printf("[Azure CNS] setEnvironment")
@@ -376,7 +403,7 @@ func (service *HTTPRestService) deleteNetwork(w http.ResponseWriter, r *http.Req
376403
err = service.Listener.Encode(w, &resp)
377404

378405
if returnCode == 0 {
379-
delete(service.state.Networks, req.NetworkName)
406+
service.removeNetworkInfo(req.NetworkName)
380407
service.saveState()
381408
}
382409

@@ -407,9 +434,7 @@ func (service *HTTPRestService) createHnsNetwork(w http.ResponseWriter, r *http.
407434
networkInfo := &networkInfo{
408435
NetworkName: req.NetworkName,
409436
}
410-
service.lock.Lock()
411-
service.state.Networks[req.NetworkName] = networkInfo
412-
service.lock.Unlock()
437+
service.setNetworkInfo(req.NetworkName, networkInfo)
413438
returnMessage = fmt.Sprintf("[Azure CNS] Successfully created HNS network: %s", req.NetworkName)
414439
} else {
415440
returnMessage = fmt.Sprintf("[Azure CNS] CreateHnsNetwork failed with error %v", err.Error())
@@ -429,9 +454,7 @@ func (service *HTTPRestService) createHnsNetwork(w http.ResponseWriter, r *http.
429454
err = service.Listener.Encode(w, &resp)
430455

431456
if returnCode == 0 {
432-
service.lock.Lock()
433457
service.saveState()
434-
service.lock.Unlock()
435458
}
436459

437460
log.Response(service.Name, resp, resp.ReturnCode, ReturnCodeToString(resp.ReturnCode), err)
@@ -455,9 +478,8 @@ func (service *HTTPRestService) deleteHnsNetwork(w http.ResponseWriter, r *http.
455478
} else {
456479
switch r.Method {
457480
case "POST":
458-
service.lock.Lock()
459-
networkInfo, ok := service.state.Networks[req.NetworkName]
460-
if ok && networkInfo.NetworkName == req.NetworkName {
481+
networkInfo, found := service.getNetworkInfo(req.NetworkName)
482+
if found && networkInfo.NetworkName == req.NetworkName {
461483
if err = platform.DeleteHnsNetwork(req.NetworkName); err == nil {
462484
returnMessage = fmt.Sprintf("[Azure CNS] Successfully deleted HNS network: %s", req.NetworkName)
463485
} else {
@@ -468,7 +490,6 @@ func (service *HTTPRestService) deleteHnsNetwork(w http.ResponseWriter, r *http.
468490
returnMessage = fmt.Sprintf("[Azure CNS] Network %s not found", req.NetworkName)
469491
returnCode = InvalidParameter
470492
}
471-
service.lock.Unlock()
472493
default:
473494
returnMessage = "[Azure CNS] Error. DeleteHnsNetwork did not receive a POST."
474495
returnCode = InvalidParameter
@@ -483,10 +504,8 @@ func (service *HTTPRestService) deleteHnsNetwork(w http.ResponseWriter, r *http.
483504
err = service.Listener.Encode(w, &resp)
484505

485506
if returnCode == 0 {
486-
service.lock.Lock()
487-
delete(service.state.Networks, req.NetworkName)
507+
service.removeNetworkInfo(req.NetworkName)
488508
service.saveState()
489-
service.lock.Unlock()
490509
}
491510

492511
log.Response(service.Name, resp, resp.ReturnCode, ReturnCodeToString(resp.ReturnCode), err)

0 commit comments

Comments
 (0)