Skip to content

Commit 8c76ca6

Browse files
author
Ashish Nair
committed
fix: Addressed all the PR comments
1 parent 58c232d commit 8c76ca6

File tree

2 files changed

+41
-21
lines changed

2 files changed

+41
-21
lines changed

cns/restserver/internalapi.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -635,9 +635,13 @@ func (service *HTTPRestService) SetVFForAccelnetNICs() error {
635635
}
636636

637637
// GetHomeAz - Get the Home Az for the Node where CNS is running.
638-
func (service *HTTPRestService) GetHomeAz(ctx context.Context) (homeAzResponse cns.GetHomeAzResponse) {
638+
func (service *HTTPRestService) GetHomeAz(ctx context.Context) (cns.GetHomeAzResponse, error) {
639639
service.RLock()
640-
homeAzResponse = service.homeAzMonitor.GetHomeAz(ctx)
641-
service.RUnlock()
642-
return
640+
defer service.RUnlock()
641+
homeAzResponse := service.homeAzMonitor.GetHomeAz(ctx)
642+
if homeAzResponse.Response.ReturnCode == types.NotFound {
643+
return homeAzResponse, errors.New(homeAzResponse.Response.Message)
644+
}
645+
646+
return homeAzResponse, nil
643647
}

cns/service/main.go

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,24 +1305,39 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
13051305

13061306
// Create the base NNC CRD if HomeAz is enabled
13071307
if cnsconfig.EnableHomeAZ {
1308-
homeAzResponse := httpRestServiceImplementation.GetHomeAz(ctx)
1308+
var homeAzResponse cns.GetHomeAzResponse
1309+
if homeAzResponse, err = httpRestServiceImplementation.GetHomeAz(ctx); err != nil {
1310+
return errors.Wrap(err, "failed to get HomeAz") // error out so that CNS restarts.
1311+
}
13091312
az := homeAzResponse.HomeAzResponse.HomeAz
13101313
logger.Printf("[Azure CNS] HomeAz: %d", az)
13111314
// Create Node Network Config CRD and update the Home Az field with the cache value from the HomeAz Monitor
13121315
var nnc *v1alpha.NodeNetworkConfig
1313-
if nnc, err = directnnccli.Get(ctx, types.NamespacedName{Namespace: "kube-system", Name: nodeName}); err != nil {
1314-
logger.Errorf("[Azure CNS] failed to get existing NNC: %v", err)
1315-
}
1316+
err = retry.Do(func() error {
1317+
if nnc, err = directnnccli.Get(ctx, types.NamespacedName{Namespace: "kube-system", Name: nodeName}); err != nil {
1318+
return errors.Wrap(err, "[Azure CNS] failed to get existing NNC")
1319+
}
1320+
return nil
1321+
}, retry.Delay(initCNSInitalDelay), retry.Attempts(5))
13161322

13171323
newNNC := createBaseNNC(node)
1318-
if nnc == nil {
1319-
logger.Printf("[Azure CNS] Creating new base NNC")
1324+
if err != nil {
1325+
logger.Printf("[Azure CNS] Creating new base NNC with Az %d", az)
13201326
newNNC.Spec.AvailabilityZone = az
1321-
if err = directcli.Create(ctx, newNNC); err != nil {
1322-
return errors.Wrap(err, "failed to create base NNC")
1327+
nncErr := retry.Do(func() error {
1328+
if err = directcli.Create(ctx, newNNC); err != nil {
1329+
return errors.Wrap(err, "failed to create base NNC with HomeAz")
1330+
}
1331+
return nil
1332+
}, retry.Delay(initCNSInitalDelay), retry.Attempts(5))
1333+
if nncErr != nil {
1334+
return errors.Wrap(nncErr, "[Azure CNS] failed to create base NNC with HomeAz")
13231335
}
1324-
} else {
1336+
}
1337+
1338+
if err == nil { // NNC exists, patch it with new HomeAz
13251339
logger.Printf("[Azure CNS] Patching existing NNC with new Spec with HomeAz %d", az)
1340+
newNNC.ObjectMeta.ResourceVersion = nnc.ObjectMeta.ResourceVersion
13261341
newNNC.Spec.AvailabilityZone = az
13271342
newNNC.Spec.RequestedIPCount = nnc.Spec.RequestedIPCount
13281343
newNNC.Spec.IPsNotInUse = nnc.Spec.IPsNotInUse
@@ -1336,14 +1351,15 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
13361351
newNNC.OwnerReferences = nnc.OwnerReferences
13371352
newNNC.CreationTimestamp = nnc.CreationTimestamp
13381353
newNNC.DeletionTimestamp = nnc.DeletionTimestamp
1339-
1340-
// Delete existing NNC and create new one with updated HomeAz
1341-
if err = directcli.Delete(ctx, nnc); err != nil {
1342-
return errors.Wrap(err, "[Azure CNS]: failed to delete existing NNC")
1343-
}
1344-
1345-
if err = directcli.Create(ctx, newNNC); err != nil {
1346-
return errors.Wrap(err, "[Azure CNS]: failed to create new NNC")
1354+
nncErr := retry.Do(func() error {
1355+
patchErr := directcli.Update(ctx, newNNC, &client.UpdateOptions{})
1356+
if patchErr != nil {
1357+
return errors.Wrap(patchErr, "failed to patch NNC")
1358+
}
1359+
return nil
1360+
}, retry.Delay(initCNSInitalDelay), retry.Attempts(5))
1361+
if nncErr != nil {
1362+
return errors.Wrap(nncErr, "[AzureCNS] failed to patch NNC with Home Az")
13471363
}
13481364
}
13491365
logger.Printf("[Azure CNS] Updated HomeAz in NNC %v", newNNC)

0 commit comments

Comments
 (0)