@@ -809,6 +809,19 @@ func (ctrl *csiSnapshotCommonController) updateSnapshotErrorStatusWithEvent(snap
809809
810810// addContentFinalizer adds a Finalizer for VolumeSnapshotContent.
811811func (ctrl * csiSnapshotCommonController ) addContentFinalizer (content * crdv1.VolumeSnapshotContent ) error {
812+ // patches := []utils.PatchOp{
813+ // {
814+ // Op: "add",
815+ // Path: "/metadata/finalizers/-",
816+ // Value: utils.VolumeSnapshotContentFinalizer,
817+ // },
818+ // }
819+
820+ // newContent, err := utils.PatchVolumeSnapshotContent(content, patches, ctrl.clientset)
821+ // if err != nil {
822+ // return newControllerUpdateError(content.Name, err.Error())
823+ // }
824+
812825 contentClone := content .DeepCopy ()
813826 contentClone .ObjectMeta .Finalizers = append (contentClone .ObjectMeta .Finalizers , utils .VolumeSnapshotContentFinalizer )
814827
@@ -1392,24 +1405,55 @@ func isControllerUpdateFailError(err *crdv1.VolumeSnapshotError) bool {
13921405
13931406// addSnapshotFinalizer adds a Finalizer for VolumeSnapshot.
13941407func (ctrl * csiSnapshotCommonController ) addSnapshotFinalizer (snapshot * crdv1.VolumeSnapshot , addSourceFinalizer bool , addBoundFinalizer bool ) error {
1395- snapshotClone := snapshot .DeepCopy ()
1396- if addSourceFinalizer {
1397- snapshotClone .ObjectMeta .Finalizers = append (snapshotClone .ObjectMeta .Finalizers , utils .VolumeSnapshotAsSourceFinalizer )
1398- }
1399- if addBoundFinalizer {
1400- snapshotClone .ObjectMeta .Finalizers = append (snapshotClone .ObjectMeta .Finalizers , utils .VolumeSnapshotBoundFinalizer )
1401- }
1402- newSnapshot , err := ctrl .clientset .SnapshotV1 ().VolumeSnapshots (snapshotClone .Namespace ).Update (context .TODO (), snapshotClone , metav1.UpdateOptions {})
1403- if err != nil {
1404- return newControllerUpdateError (utils .SnapshotKey (snapshot ), err .Error ())
1408+ var updatedSnapshot * crdv1.VolumeSnapshot
1409+ var err error
1410+
1411+ // Must perform an update if no finalizers exist
1412+ if len (snapshot .ObjectMeta .Finalizers ) == 0 {
1413+ snapshotClone := snapshot .DeepCopy ()
1414+ if addSourceFinalizer {
1415+ snapshotClone .ObjectMeta .Finalizers = append (snapshotClone .ObjectMeta .Finalizers , utils .VolumeSnapshotAsSourceFinalizer )
1416+ }
1417+ if addBoundFinalizer {
1418+ snapshotClone .ObjectMeta .Finalizers = append (snapshotClone .ObjectMeta .Finalizers , utils .VolumeSnapshotBoundFinalizer )
1419+ }
1420+ updatedSnapshot , err = ctrl .clientset .SnapshotV1 ().VolumeSnapshots (snapshotClone .Namespace ).Update (context .TODO (), snapshotClone , metav1.UpdateOptions {})
1421+ if err != nil {
1422+ return newControllerUpdateError (utils .SnapshotKey (snapshot ), err .Error ())
1423+ }
1424+ } else {
1425+ // Otherwise, perform a patch
1426+ var patches []utils.PatchOp
1427+
1428+ if addSourceFinalizer {
1429+ patches = append (patches , utils.PatchOp {
1430+ Op : "add" ,
1431+ Path : "/metadata/finalizers/-" ,
1432+ Value : utils .VolumeSnapshotAsSourceFinalizer ,
1433+ })
1434+ }
1435+ if addBoundFinalizer {
1436+ patches = append (patches , utils.PatchOp {
1437+ Op : "add" ,
1438+ Path : "/metadata/finalizers/-" ,
1439+ Value : utils .VolumeSnapshotBoundFinalizer ,
1440+ })
1441+ }
1442+
1443+ klog .Infof ("GGCSI - ADD SNAPSHOT FINALIZER - snapshot: %v" , snapshot )
1444+ klog .Infof ("GGCSI - ADD SNAPSHOT FINALIZER - patches: %v" , patches )
1445+ updatedSnapshot , err = utils .PatchVolumeSnapshot (snapshot , patches , ctrl .clientset )
1446+ if err != nil {
1447+ return newControllerUpdateError (utils .SnapshotKey (snapshot ), err .Error ())
1448+ }
14051449 }
14061450
1407- _ , err = ctrl .storeSnapshotUpdate (newSnapshot )
1451+ _ , err = ctrl .storeSnapshotUpdate (updatedSnapshot )
14081452 if err != nil {
14091453 klog .Errorf ("failed to update snapshot store %v" , err )
14101454 }
14111455
1412- klog .V (5 ).Infof ("Added protection finalizer to volume snapshot %s" , utils .SnapshotKey (newSnapshot ))
1456+ klog .V (5 ).Infof ("Added protection finalizer to volume snapshot %s" , utils .SnapshotKey (updatedSnapshot ))
14131457 return nil
14141458}
14151459
0 commit comments