Skip to content

Commit

Permalink
COSMOS-2769: Delete gvk if object notfound fix
Browse files Browse the repository at this point in the history
  • Loading branch information
vishnukavach committed May 31, 2023
1 parent 0e5ce9d commit 37e5071
Showing 1 changed file with 97 additions and 71 deletions.
168 changes: 97 additions & 71 deletions compiler/pkg/generator/template/client.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -235,9 +235,10 @@ func (group *{{$node.GroupTypeName}}) Delete{{$node.BaseNodeName}}ByName(ctx con
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] Received objectToDelete: %s", hashedName)
{{if or .HasChildren .Parent.HasParent }}
var (
retryCount int
result *{{$node.GroupBaseImport}}
)
retryCount := 0
retryCount = 0
for {
result, err = group.client.baseClient.
{{$node.GroupTypeName}}().
Expand All @@ -257,6 +258,7 @@ func (group *{{$node.GroupTypeName}}) Delete{{$node.BaseNodeName}}ByName(ctx con
return context.Canceled
} else if errors.IsNotFound(err){
log.Errorf("[Delete{{$node.BaseNodeName}}ByName] Object Notfound: %+v",err)
break
} else {
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return err
Expand Down Expand Up @@ -292,46 +294,40 @@ func (group *{{$node.GroupTypeName}}) Delete{{$node.BaseNodeName}}ByName(ctx con
{{ end }}
{{ end }}

err = group.client.baseClient.
{{$node.GroupTypeName}}().
{{$node.GroupResourceNameTitle}}().Delete(ctx, hashedName, metav1.DeleteOptions{})
if err != nil {
log.Errorf("[Delete{{$node.BaseNodeName}}ByName] Failed to Delete {{$node.GroupResourceNameTitle}}: %+v",err)
if errors.IsTimeout(err) || customerrors.Is(err, context.DeadlineExceeded) {
log.Errorf("[Retry Count: %d ] %+v",retryCount,err)
if retryCount == maxRetryCount {
log.Error("Max Retry exceed on Get {{$node.GroupResourceNameTitle}}")
retryCount = 0
for {
err = group.client.baseClient.
{{$node.GroupTypeName}}().
{{$node.GroupResourceNameTitle}}().Delete(ctx, hashedName, metav1.DeleteOptions{})
if err != nil {
log.Errorf("[Delete{{$node.BaseNodeName}}ByName] failed to delete {{$node.GroupResourceNameTitle}}: %+v",err)
if errors.IsTimeout(err) || customerrors.Is(err, context.DeadlineExceeded) {
log.Errorf("[Retry Count: %d ] %+v",retryCount,err)
if retryCount == maxRetryCount {
log.Error("Max retry exceed on delete {{$node.GroupResourceNameTitle}}")
return err
}
retryCount +=1
time.Sleep(sleepTime * time.Second)
} else if customerrors.Is(err, context.Canceled){
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return context.Canceled
} else if errors.IsNotFound(err){
log.Errorf("[Delete{{$node.BaseNodeName}}ByName] Object not found: %+v",err)
break
} else {
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return err
}
retryCount +=1
time.Sleep(sleepTime * time.Second)
} else if customerrors.Is(err, context.Canceled){
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return context.Canceled
} else {
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return err
}
}
// Get Parent Node and check if gvk present before patch
var displayName string
var gvkPresent bool
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] Get Parent details")

{{if .Parent.HasParent}}
var patch Patch
{{if .Parent.IsNamed}}
patchOp := PatchOp{
Op: "remove",
Path: "/spec/{{$node.Parent.GvkFieldName}}/" + result.DisplayName(),
}
{{ else }}
patchOp := PatchOp{
Op: "remove",
Path: "/spec/{{$node.Parent.GvkFieldName}}",
}
{{ end }}
patch = append(patch, patchOp)
marshaled, err := patch.Marshal()
if err != nil {
return err
}
parents := result.GetLabels()
if parents == nil {
parents = make(map[string]string)
Expand All @@ -340,54 +336,81 @@ func (group *{{$node.GroupTypeName}}) Delete{{$node.BaseNodeName}}ByName(ctx con
if !ok {
parentName = helper.DEFAULT_KEY
}
if parents[common.IS_NAME_HASHED_LABEL] == "true" {
if result.GetLabels() != nil {
if parents[common.IS_NAME_HASHED_LABEL] == "true" {
parentName = helper.GetHashedName("{{$node.Parent.CrdName}}", parents, parentName)
}
} else {
parentName = helper.GetHashedName("{{$node.Parent.CrdName}}", parents, parentName)
}

newCtx := context.TODO()
for {
_, err = group.client.baseClient.
{{$node.Parent.GroupTypeName}}().
{{$node.Parent.GroupResourceNameTitle}}().Patch(newCtx, parentName, types.JSONPatchType, marshaled, metav1.PatchOptions{})
parentData, err := group.client.baseClient.
{{$node.Parent.GroupTypeName}}().
{{$node.Parent.GroupResourceNameTitle}}().Get(ctx, parentName, metav1.GetOptions{})
if err != nil{
log.Errorf("[Delete{{$node.BaseNodeName}}ByName] Failed to get Parent node: %+v",err)
if errors.IsNotFound(err){
return nil
} else{
return err
}
}
// Iterate Parent Gvk
for k,v := range parentData.spec.{{.Parent.GoGvkFieldName}}{
if hashedName == v.Name{
displayName = k
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] GVK %s is present in parent for node: %s",k,hashedName)
gvkPresent = true
}
}
if gvkPresent {
{{if .Parent.IsNamed}}
patchOp := PatchOp{
Op: "remove",
Path: "/spec/{{$node.Parent.GvkFieldName}}/" + displayName,
}
{{ else }}
patchOp := PatchOp{
Op: "remove",
Path: "/spec/{{$node.Parent.GvkFieldName}}",
}
{{ end }}
patch = append(patch, patchOp)
marshaled, err := patch.Marshal()
if err != nil {
log.Errorf("Failed to patch {{$node.BaseNodeName}} gvk in parent node[{{$node.Parent.GroupResourceNameTitle}}]: %+v", err)
if errors.IsTimeout(err) || customerrors.Is(err, context.DeadlineExceeded){
log.Errorf("[Retry Count: %d ] %+v",retryCount, err)
if retryCount == maxRetryCount {
log.Error("Max Retry exceed on patching gvk")
log.Errorf("Trigger {{$node.BaseNodeName}} Delete: %s",hashedName)
err = group.Delete{{$node.BaseNodeName}}ByName(newCtx, hashedName)
if err != nil {
log.Errorf("Error occur while deleting {{$node.BaseNodeName}}: %s",hashedName)
return err
}

retryCount = 0
newCtx := context.TODO()
for {
_, err = group.client.baseClient.
{{$node.Parent.GroupTypeName}}().
{{$node.Parent.GroupResourceNameTitle}}().Patch(newCtx, parentName, types.JSONPatchType, marshaled, metav1.PatchOptions{})
if err != nil {
log.Errorf("Failed to patch {{$node.BaseNodeName}} gvk in parent node[{{$node.Parent.GroupResourceNameTitle}}]: %+v", err)
if errors.IsTimeout(err) || customerrors.Is(err, context.DeadlineExceeded){
log.Errorf("[Retry Count: %d ] %+v",retryCount, err)
if retryCount == maxRetryCount {
log.Error("Max Retry exceed on patching gvk")
return err
}
log.Errorf("{{$node.BaseNodeName}} Deleted: %s",hashedName)
retryCount +=1
time.Sleep(sleepTime * time.Second)
} else if customerrors.Is(err, context.Canceled){
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return context.Canceled
} else {
log.Errorf("Unexpected Error occur {{$node.BaseNodeName}}]: %+v",err)
return err
}
retryCount +=1
time.Sleep(sleepTime * time.Second)
} else if customerrors.Is(err, context.Canceled){
log.Errorf("[Delete{{$node.BaseNodeName}}ByName]: %+v",err)
return context.Canceled
} else {
log.Errorf("Unexpected Error occur {{$node.BaseNodeName}}]: %+v",err)
log.Errorf("Trigger {{$node.BaseNodeName}} Delete: %s",hashedName)
err = group.Delete{{$node.BaseNodeName}}ByName(newCtx, hashedName)
if err != nil {
log.Errorf("Error occur while deleting {{$node.BaseNodeName}}: %+v",hashedName)
return err
}
log.Errorf("{{$node.BaseNodeName}} Deleted Successfully: %s",hashedName)
return err
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] Patch {{$node.BaseNodeName}} Success: %s",hashedName)
break
}
} else {
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] Patch {{$node.BaseNodeName}} Success: %s",hashedName)
break
}
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] Executed Successfully: %s",hashedName)
}

{{ end }}
log.Debugf("[Delete{{$node.BaseNodeName}}ByName] Executed Successfully: %s",hashedName)
return
}

Expand All @@ -412,10 +435,11 @@ func (group *{{$node.GroupTypeName}}) Create{{$node.BaseNodeName}}ByName(ctx con
{{ range $key, $link := .LinksAndChildren }}objToCreate.Spec.{{$link.FieldName}}Gvk = nil
{{ end }}
var (
retryCount int
result *{{$node.GroupBaseImport}}
err error
)
retryCount := 0
retryCount = 0
for {
result, err = group.client.baseClient.
{{$node.GroupTypeName}}().
Expand Down Expand Up @@ -453,6 +477,7 @@ func (group *{{$node.GroupTypeName}}) Create{{$node.BaseNodeName}}ByName(ctx con
{{if .Parent.IsNamed}}
payload := "{\"spec\": {\"{{$node.Parent.GvkFieldName}}\": {\"" + objToCreate.DisplayName() + "\": {\"name\": \"" + objToCreate.Name + "\",\"kind\": \"{{$node.Kind}}\", \"group\": \"{{$node.Group}}\"}}}}"

retryCount = 0
newCtx := context.TODO()
for {
_, err = group.client.baseClient.
Expand Down Expand Up @@ -510,6 +535,7 @@ func (group *{{$node.GroupTypeName}}) Create{{$node.BaseNodeName}}ByName(ctx con
if err != nil {
return nil, err
}
retryCount = 0
newCtx := context.TODO()
for {
_, err = group.client.baseClient.
Expand Down

0 comments on commit 37e5071

Please sign in to comment.