make upgrade modify input instead of deep copying

This commit is contained in:
Alexander Zielenski 2022-09-02 17:40:34 -07:00
parent 5c9534b9cf
commit adcb5ec3d4
No known key found for this signature in database
GPG Key ID: 754BC11B447F7843
2 changed files with 14 additions and 17 deletions

View File

@ -40,10 +40,10 @@ func UpgradeManagedFields(
obj runtime.Object, obj runtime.Object,
csaManagerName string, csaManagerName string,
ssaManagerName string, ssaManagerName string,
) (runtime.Object, error) { ) error {
accessor, err := meta.Accessor(obj) accessor, err := meta.Accessor(obj)
if err != nil { if err != nil {
return nil, fmt.Errorf("error accessing object metadata: %w", err) return fmt.Errorf("error accessing object metadata: %w", err)
} }
// Create managed fields clone since we modify the values // Create managed fields clone since we modify the values
@ -74,7 +74,7 @@ func UpgradeManagedFields(
if !managerExists { if !managerExists {
// There are no CSA managers that need to be converted. Nothing to do // There are no CSA managers that need to be converted. Nothing to do
// Return early // Return early
return obj, nil return nil
} }
// Convert CSA manager into SSA manager // Convert CSA manager into SSA manager
@ -83,7 +83,7 @@ func UpgradeManagedFields(
} }
err = unionManagerIntoIndex(managedFields, replaceIndex, csaManagerName) err = unionManagerIntoIndex(managedFields, replaceIndex, csaManagerName)
if err != nil { if err != nil {
return nil, err return err
} }
// Create version of managed fields which has no CSA managers with the given name // Create version of managed fields which has no CSA managers with the given name
@ -93,19 +93,15 @@ func UpgradeManagedFields(
entry.Subresource == "") entry.Subresource == "")
}) })
copied := obj.DeepCopyObject() // Wipe out last-applied-configuration annotation if it exists
copiedAccessor, err := meta.Accessor(copied) annotations := accessor.GetAnnotations()
if err != nil {
return nil, fmt.Errorf("failed to get meta accessor for copied object: %w", err)
}
copiedAccessor.SetManagedFields(filteredManagers)
// Wipe out CSA annotation if it exists
annotations := copiedAccessor.GetAnnotations()
delete(annotations, csaAnnotationName) delete(annotations, csaAnnotationName)
copiedAccessor.SetAnnotations(annotations)
return copied, nil // Commit changes to object
accessor.SetAnnotations(annotations)
accessor.SetManagedFields(filteredManagers)
return nil
} }
// Locates an Update manager entry named `csaManagerName` with the same APIVersion // Locates an Update manager entry named `csaManagerName` with the same APIVersion

View File

@ -441,8 +441,9 @@ metadata:
t.Fatal(err) t.Fatal(err)
} }
upgraded, err := csaupgrade.UpgradeManagedFields( upgraded := initialObject.DeepCopy()
&initialObject, err = csaupgrade.UpgradeManagedFields(
upgraded,
testCase.CSAManager, testCase.CSAManager,
testCase.SSAManager, testCase.SSAManager,
) )