Skip to content

Commit

Permalink
fix(controller): Do not update existing Programmed condition to Unkno…
Browse files Browse the repository at this point in the history
…wn (#6395) (#6402)

* Do not update existing Programmed condition to Unknown

* do not fetch before update

(cherry picked from commit 4b0a44a)

Co-authored-by: Tao Yi <tao.yi@konghq.com>
  • Loading branch information
team-k8s-bot and randmonkey authored Aug 14, 2024
1 parent 34288aa commit 745146f
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 10 deletions.
2 changes: 1 addition & 1 deletion hack/generators/controllers/networking/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -725,8 +725,8 @@ func (r *{{.PackageAlias}}{{.Kind}}Reconciler) Reconcile(ctx context.Context, re
{{- end }}
{{- if .ProgrammedCondition.UpdatesEnabled }}
log.V(logging.DebugLevel).Info("Updating programmed condition status", "namespace", req.Namespace, "name", req.Name)
configurationStatus := r.DataplaneClient.KubernetesObjectConfigurationStatus(obj)
log.V(logging.DebugLevel).Info("Updating programmed condition status", "namespace", req.Namespace, "name", req.Name, "configuration_status",configurationStatus)
conditions, updateNeeded := ctrlutils.EnsureProgrammedCondition(
configurationStatus,
obj.Generation,
Expand Down
10 changes: 5 additions & 5 deletions internal/controllers/configuration/zz_generated_controllers.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions internal/controllers/utils/conditions.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ func EnsureProgrammedCondition(
if !ok {
conditions = append(conditions, desiredCondition)
} else {
// Do not update existing "Programmed" condition to Unknown to prevent races on updating status when new instance starts.
if configurationStatus == object.ConfigurationStatusUnknown {
return conditions, false
}
conditions[idx] = desiredCondition
}

Expand Down
15 changes: 11 additions & 4 deletions internal/controllers/utils/conditions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,17 +84,24 @@ func TestEnsureProgrammedCondition(t *testing.T) {
},
{
name: "condition present with correct observed generation but different reason",
configurationStatus: object.ConfigurationStatusUnknown,
configurationStatus: object.ConfigurationStatusFailed,
conditions: []metav1.Condition{
func() metav1.Condition {
cond := expectedProgrammedConditionUnknown
cond.Reason = string(kongv1.ReasonInvalid)
cond := expectedProgrammedConditionFalse
cond.Reason = string("SomeOtherReason")
return cond
}(),
},
expectedUpdatedConditions: []metav1.Condition{expectedProgrammedConditionUnknown},
expectedUpdatedConditions: []metav1.Condition{expectedProgrammedConditionFalse},
expectedUpdateNeeded: true,
},
{
name: "Unknown status should not modify existing Programmed condition",
configurationStatus: object.ConfigurationStatusUnknown,
conditions: []metav1.Condition{expectedProgrammedConditionTrue},
expectedUpdatedConditions: []metav1.Condition{expectedProgrammedConditionTrue},
expectedUpdateNeeded: false,
},
{
name: "empty conditions",
configurationStatus: object.ConfigurationStatusSucceeded,
Expand Down

0 comments on commit 745146f

Please sign in to comment.