@@ -2,7 +2,6 @@ package store
22
33import (
44 "context"
5- "fmt"
65
76 "k8s.io/apimachinery/pkg/api/meta"
87 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -11,7 +10,6 @@ import (
1110 "k8s.io/client-go/tools/cache"
1211 "open-cluster-management.io/sdk-go/pkg/cloudevents/clients/utils"
1312 "open-cluster-management.io/sdk-go/pkg/cloudevents/generic"
14- "open-cluster-management.io/sdk-go/pkg/cloudevents/generic/types"
1513)
1614
1715// AgentInformerWatcherStore extends the BaseClientWatchStore.
@@ -49,80 +47,48 @@ func (s *AgentInformerWatcherStore[T]) Delete(resource runtime.Object) error {
4947 return s .Store .Delete (resource )
5048}
5149
52- func (s * AgentInformerWatcherStore [T ]) HandleReceivedResource (ctx context.Context , action types.ResourceAction , resource T ) error {
53- switch action {
54- case types .Added :
55- newObj , err := utils .ToRuntimeObject (resource )
56- if err != nil {
57- return err
58- }
59-
60- return s .Add (newObj )
61- case types .Modified :
62- accessor , err := meta .Accessor (resource )
63- if err != nil {
64- return err
65- }
66-
67- lastObj , exists , err := s .Get (accessor .GetNamespace (), accessor .GetName ())
68- if err != nil {
69- return err
70- }
71- if ! exists {
72- return fmt .Errorf ("the resource %s/%s does not exist" , accessor .GetNamespace (), accessor .GetName ())
73- }
74-
75- // if resource is deleting, keep the deletion timestamp
76- if ! lastObj .GetDeletionTimestamp ().IsZero () {
77- accessor .SetDeletionTimestamp (lastObj .GetDeletionTimestamp ())
78- }
79-
80- updated , err := utils .ToRuntimeObject (resource )
81- if err != nil {
82- return err
83- }
84-
85- return s .Update (updated )
86- case types .Deleted :
87- newObj , err := meta .Accessor (resource )
88- if err != nil {
89- return err
90- }
91-
92- if newObj .GetDeletionTimestamp ().IsZero () {
93- return nil
94- }
50+ func (s * AgentInformerWatcherStore [T ]) HandleReceivedResource (ctx context.Context , resource T ) error {
51+ runtimeObj , err := utils .ToRuntimeObject (resource )
52+ if err != nil {
53+ return err
54+ }
9555
96- last , exists , err := s .Get (newObj .GetNamespace (), newObj .GetName ())
97- if err != nil {
98- return err
99- }
100- if ! exists {
101- return nil
102- }
56+ metaObj , err := meta .Accessor (runtimeObj )
57+ if err != nil {
58+ return err
59+ }
10360
104- deletingObj , err := utils .ToRuntimeObject (last )
105- if err != nil {
106- return err
107- }
61+ lastResource , exists , err := s .Get (metaObj .GetNamespace (), metaObj .GetName ())
62+ if err != nil {
63+ return err
64+ }
65+ if ! exists {
66+ return s .Add (runtimeObj )
67+ }
10868
69+ if ! metaObj .GetDeletionTimestamp ().IsZero () {
10970 // trigger an update event if the object is deleting.
11071 // Only need to update generation/finalizer/deletionTimeStamp of the object.
111- if len (newObj .GetFinalizers ()) != 0 {
112- accessor , err := meta .Accessor (deletingObj )
72+ if len (metaObj .GetFinalizers ()) != 0 {
73+ deletingObj , err := meta .Accessor (lastResource )
74+ if err != nil {
75+ return err
76+ }
77+ deletingObj .SetDeletionTimestamp (metaObj .GetDeletionTimestamp ())
78+ deletingObj .SetFinalizers (metaObj .GetFinalizers ())
79+ deletingObj .SetGeneration (metaObj .GetGeneration ())
80+ runtimeObj , err := utils .ToRuntimeObject (deletingObj )
11381 if err != nil {
11482 return err
11583 }
116- accessor .SetDeletionTimestamp (newObj .GetDeletionTimestamp ())
117- accessor .SetFinalizers (newObj .GetFinalizers ())
118- accessor .SetGeneration (newObj .GetGeneration ())
119- return s .Update (deletingObj )
84+
85+ return s .Update (runtimeObj )
12086 }
12187
122- return s .Delete (deletingObj )
123- default :
124- return fmt .Errorf ("unsupported resource action %s" , action )
88+ return s .Delete (runtimeObj )
12589 }
90+
91+ return s .Update (runtimeObj )
12692}
12793
12894func (s * AgentInformerWatcherStore [T ]) GetWatcher (namespace string , opts metav1.ListOptions ) (watch.Interface , error ) {
0 commit comments