@@ -93,9 +93,10 @@ func (tc *TraitsController) Reconcile(ctx context.Context, req ctrl.Request) (ct
9393 // fetch current traits, to ensure we don't add duplicates
9494 current , err := resourceproviders .GetTraits (ctx , tc .serviceClient , hv .Status .HypervisorID ).Extract ()
9595 if err != nil {
96+ base := hv .DeepCopy ()
9697 if meta .SetStatusCondition (& hv .Status .Conditions ,
9798 getTraitCondition (err , "Failed to get current traits from placement" )) {
98- err = errors .Join (tc .Status ().Update (ctx , hv ))
99+ err = errors .Join (tc .Status ().Patch (ctx , hv , k8sclient . MergeFromWithOptions ( base , k8sclient. MergeFromWithOptimisticLock {}), k8sclient . FieldOwner ( TraitsControllerName ) ))
99100 }
100101 return ctrl.Result {}, err
101102 }
@@ -124,18 +125,20 @@ func (tc *TraitsController) Reconcile(ctx context.Context, req ctrl.Request) (ct
124125
125126 if result .Err != nil {
126127 // set status condition
128+ base := hv .DeepCopy ()
127129 if meta .SetStatusCondition (& hv .Status .Conditions ,
128130 getTraitCondition (err , "Failed to update traits in placement" )) {
129- err = errors .Join (tc .Status ().Update (ctx , hv ))
131+ err = errors .Join (tc .Status ().Patch (ctx , hv , k8sclient . MergeFromWithOptions ( base , k8sclient. MergeFromWithOptimisticLock {}), k8sclient . FieldOwner ( TraitsControllerName ) ))
130132 }
131133 return ctrl.Result {}, err
132134 }
133135 }
134136
137+ base := hv .DeepCopy ()
135138 // update status unconditionally, since we want always to propagate the current traits
136139 hv .Status .Traits = targetTraits
137140 meta .SetStatusCondition (& hv .Status .Conditions , getTraitCondition (nil , "Traits successfully updated" ))
138- return ctrl.Result {}, tc .Status ().Update (ctx , hv )
141+ return ctrl.Result {}, tc .Status ().Patch (ctx , hv , k8sclient . MergeFromWithOptions ( base , k8sclient. MergeFromWithOptimisticLock {}), k8sclient . FieldOwner ( TraitsControllerName ) )
139142}
140143
141144// getTraitCondition creates a Condition object for trait updates
0 commit comments