@@ -761,16 +761,26 @@ func setBindingStatus(works map[string]*fleetv1beta1.Work, resourceBinding *flee
761761 resourceBinding .SetConditions (availableCond )
762762 }
763763 resourceBinding .Status .FailedPlacements = nil
764+ resourceBinding .Status .DiffedPlacements = nil
765+ resourceBinding .Status .DriftedPlacements = nil
764766 // collect and set the failed resource placements to the binding if not all the works are available
765767 if appliedCond .Status != metav1 .ConditionTrue || availableCond .Status != metav1 .ConditionTrue {
766- failedResourcePlacements := make ([]fleetv1beta1.FailedResourcePlacement , 0 , maxFailedResourcePlacementLimit ) // preallocate the memory
768+ failedResourcePlacements := make ([]fleetv1beta1.FailedResourcePlacement , 0 , maxFailedResourcePlacementLimit ) // preallocate the memory
769+ diffedResourcePlacements := make ([]fleetv1beta1.DiffedResourcePlacement , 0 , maxDiffedResourcePlacementLimit ) // preallocate the memory
770+ driftedResourcePlacements := make ([]fleetv1beta1.DriftedResourcePlacement , 0 , maxDriftedResourcePlacementLimit ) // preallocate the memory
767771 for _ , w := range works {
768772 if w .DeletionTimestamp != nil {
769773 klog .V (2 ).InfoS ("Ignoring the deleting work" , "clusterResourceBinding" , bindingRef , "work" , klog .KObj (w ))
770774 continue // ignore the deleting work
771775 }
772776 failedManifests := extractFailedResourcePlacementsFromWork (w )
773777 failedResourcePlacements = append (failedResourcePlacements , failedManifests ... )
778+
779+ diffedManifests := extractDiffedResourcePlacementsFromWork (w )
780+ diffedResourcePlacements = append (diffedResourcePlacements , diffedManifests ... )
781+
782+ driftedManifests := extractDriftedResourcePlacementsFromWork (w )
783+ driftedResourcePlacements = append (driftedResourcePlacements , driftedManifests ... )
774784 }
775785 // cut the list to keep only the max limit
776786 if len (failedResourcePlacements ) > maxFailedResourcePlacementLimit {
@@ -780,39 +790,26 @@ func setBindingStatus(works map[string]*fleetv1beta1.Work, resourceBinding *flee
780790 if len (failedResourcePlacements ) > 0 {
781791 klog .V (2 ).InfoS ("Populated failed manifests" , "clusterResourceBinding" , bindingRef , "numberOfFailedPlacements" , len (failedResourcePlacements ))
782792 }
783- }
784793
785- resourceBinding .Status .DriftedPlacements = nil
786- resourceBinding .Status .DiffedPlacements = nil
787- driftedResourcePlacements := make ([]fleetv1beta1.DriftedResourcePlacement , 0 , maxDriftedResourcePlacementLimit ) // preallocate the memory
788- diffedResourcePlacements := make ([]fleetv1beta1.DiffedResourcePlacement , 0 , maxDiffedResourcePlacementLimit ) // preallocate the memory
789- for _ , w := range works {
790- if w .DeletionTimestamp != nil {
791- klog .V (2 ).InfoS ("Ignoring the deleting work" , "clusterResourceBinding" , bindingRef , "work" , klog .KObj (w ))
792- continue // ignore the deleting work
794+ // cut the list to keep only the max limit
795+ if len (diffedResourcePlacements ) > maxDiffedResourcePlacementLimit {
796+ diffedResourcePlacements = diffedResourcePlacements [0 :maxDiffedResourcePlacementLimit ]
793797 }
794- driftedManifests := extractDriftedResourcePlacementsFromWork (w )
795- driftedResourcePlacements = append (driftedResourcePlacements , driftedManifests ... )
796-
797- diffedManifests := extractDiffedResourcePlacementsFromWork (w )
798- diffedResourcePlacements = append (diffedResourcePlacements , diffedManifests ... )
799- }
800- // cut the list to keep only the max limit
801- if len (driftedResourcePlacements ) > maxDriftedResourcePlacementLimit {
802- driftedResourcePlacements = driftedResourcePlacements [0 :maxDriftedResourcePlacementLimit ]
803- }
804- if len (driftedResourcePlacements ) > 0 {
805- resourceBinding .Status .DriftedPlacements = driftedResourcePlacements
806- klog .V (2 ).InfoS ("Populated drifted manifests" , "clusterResourceBinding" , bindingRef , "numberOfDriftedPlacements" , len (driftedResourcePlacements ))
807- }
808798
809- // cut the list to keep only the max limit
810- if len (diffedResourcePlacements ) > maxDiffedResourcePlacementLimit {
811- diffedResourcePlacements = diffedResourcePlacements [0 :maxDiffedResourcePlacementLimit ]
812- }
813- if len (diffedResourcePlacements ) > 0 {
814799 resourceBinding .Status .DiffedPlacements = diffedResourcePlacements
815- klog .V (2 ).InfoS ("Populated diffed manifests" , "clusterResourceBinding" , bindingRef , "numberOfDiffedPlacements" , len (diffedResourcePlacements ))
800+ if len (diffedResourcePlacements ) > 0 {
801+ klog .V (2 ).InfoS ("Populated diffed manifests" , "clusterResourceBinding" , bindingRef , "numberOfDiffedPlacements" , len (diffedResourcePlacements ))
802+ }
803+
804+ // cut the list to keep only the max limit
805+ if len (driftedResourcePlacements ) > maxDriftedResourcePlacementLimit {
806+ driftedResourcePlacements = driftedResourcePlacements [0 :maxDriftedResourcePlacementLimit ]
807+ }
808+
809+ resourceBinding .Status .DriftedPlacements = driftedResourcePlacements
810+ if len (driftedResourcePlacements ) > 0 {
811+ klog .V (2 ).InfoS ("Populated drifted manifests" , "clusterResourceBinding" , bindingRef , "numberOfDriftedPlacements" , len (driftedResourcePlacements ))
812+ }
816813 }
817814}
818815
@@ -1160,8 +1157,12 @@ func (r *Reconciler) SetupWithManager(mgr controllerruntime.Manager) error {
11601157 // we need to compare the failed placement if the work is not applied or available
11611158 oldFailedPlacements := extractFailedResourcePlacementsFromWork (oldWork )
11621159 newFailedPlacements := extractFailedResourcePlacementsFromWork (newWork )
1163- if utils .IsFailedResourcePlacementsEqual (oldFailedPlacements , newFailedPlacements ) {
1164- klog .V (2 ).InfoS ("The failed placement list didn't change on failed work, no need to reconcile" , "oldWork" , klog .KObj (oldWork ), "newWork" , klog .KObj (newWork ))
1160+ oldDiffedPlacements := extractDiffedResourcePlacementsFromWork (oldWork )
1161+ newDiffedPlacements := extractDiffedResourcePlacementsFromWork (newWork )
1162+ oldDriftedPlacements := extractDriftedResourcePlacementsFromWork (oldWork )
1163+ newDriftedPlacements := extractDriftedResourcePlacementsFromWork (newWork )
1164+ if utils .IsDriftedResourcePlacementsEqual (oldDriftedPlacements , newDriftedPlacements ) && utils .IsDiffedResourcePlacementsEqual (oldDiffedPlacements , newDiffedPlacements ) && utils .IsFailedResourcePlacementsEqual (oldFailedPlacements , newFailedPlacements ) {
1165+ klog .V (2 ).InfoS ("The placement lists didn't change on failed work, no need to reconcile" , "oldWork" , klog .KObj (oldWork ), "newWork" , klog .KObj (newWork ))
11651166 return
11661167 }
11671168 } else {
0 commit comments