Skip to content

Commit ed0dfd0

Browse files
committed
Refetch prior to status update
Signed-off-by: Dale Haiducek <[email protected]>
1 parent c5336f7 commit ed0dfd0

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

controllers/propagator/propagation.go

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -435,12 +435,12 @@ func (r *PolicyReconciler) handleDecisions(
435435
// decisions. If the cluster exists in the status but doesn't exist in the input placement
436436
// decisions, then it's considered stale and will be removed.
437437
func (r *PolicyReconciler) cleanUpOrphanedRplPolicies(
438-
instance *policiesv1.Policy, oldStatus []*policiesv1.CompliancePerClusterStatus, allDecisions decisionSet,
438+
instance *policiesv1.Policy, allDecisions decisionSet,
439439
) error {
440440
log := log.WithValues("policyName", instance.GetName(), "policyNamespace", instance.GetNamespace())
441441
successful := true
442442

443-
for _, cluster := range oldStatus {
443+
for _, cluster := range instance.Status.Status {
444444
key := appsv1.PlacementDecision{
445445
ClusterName: cluster.ClusterNamespace,
446446
ClusterNamespace: cluster.ClusterNamespace,
@@ -527,28 +527,31 @@ func (r *PolicyReconciler) handleRootPolicy(instance *policiesv1.Policy) error {
527527
return errors.New("c" + msg[1:])
528528
}
529529

530-
cpcs, _ := r.calculatePerClusterStatus(instance, allDecisions, failedClusters)
530+
// Clean up before the status update in case the status update fails
531+
err = r.cleanUpOrphanedRplPolicies(instance, allDecisions)
532+
if err != nil {
533+
log.Error(err, "Failed to delete orphaned replicated policies")
531534

532-
oldStatus := instance.Status.Status
533-
instance.Status.Status = cpcs
534-
instance.Status.ComplianceState = CalculateRootCompliance(cpcs)
535+
return err
536+
}
537+
538+
log.V(1).Info("Updating the root policy status")
539+
540+
cpcs, _ := r.calculatePerClusterStatus(instance, allDecisions, failedClusters)
535541

536-
// looped through all pb, update status.placement
542+
// loop through all pb, update status.placement
537543
sort.Slice(placements, func(i, j int) bool {
538544
return placements[i].PlacementBinding < placements[j].PlacementBinding
539545
})
540546

541-
instance.Status.Placement = placements
542-
543-
// Clean up before the status update in case the status update fails
544-
err = r.cleanUpOrphanedRplPolicies(instance, oldStatus, allDecisions)
547+
err = r.Get(context.TODO(), types.NamespacedName{Namespace: instance.Namespace, Name: instance.Name}, instance)
545548
if err != nil {
546-
log.Error(err, "Failed to delete orphaned replicated policies")
547-
548-
return err
549+
log.Error(err, "Failed to refresh the cached policy. Will use existing policy.")
549550
}
550551

551-
log.V(1).Info("Updating the root policy status")
552+
instance.Status.Status = cpcs
553+
instance.Status.ComplianceState = CalculateRootCompliance(cpcs)
554+
instance.Status.Placement = placements
552555

553556
err = r.Status().Update(context.TODO(), instance, &client.UpdateOptions{})
554557
if err != nil {

controllers/rootpolicystatus/root_policy_status_controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ func (r *RootPolicyStatusReconciler) Reconcile(ctx context.Context, request ctrl
129129
return reconcile.Result{}, nil
130130
}
131131

132+
err = r.Get(ctx, types.NamespacedName{Namespace: request.Namespace, Name: request.Name}, rootPolicy)
133+
if err != nil {
134+
log.Error(err, "Failed to refresh the cached policy. Will use existing policy.")
135+
}
136+
132137
rootPolicy.Status.ComplianceState = propagator.CalculateRootCompliance(rootPolicy.Status.Status)
133138

134139
err = r.Status().Update(context.TODO(), rootPolicy, &client.UpdateOptions{})

0 commit comments

Comments
 (0)