Skip to content

Commit befdedb

Browse files
authored
Merge pull request #384 from werf/fix/panic-if-apiserver-connection-lost
fix: panic if apiserver connection lost
2 parents 10880f9 + 6356856 commit befdedb

File tree

11 files changed

+160
-0
lines changed

11 files changed

+160
-0
lines changed

pkg/tracker/canary/tracker.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,23 +151,39 @@ func (canary *Tracker) runInformer(ctx context.Context) (cleanupFn func(), err e
151151
handler, err := inf.AddEventHandler(
152152
cache.FilteringResourceEventHandler{
153153
FilterFunc: func(obj interface{}) bool {
154+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
155+
obj = d.Obj
156+
}
157+
154158
canaryObj := &v1beta1.Canary{}
155159
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, canaryObj))
156160
return canaryObj.Name == canary.ResourceName &&
157161
canaryObj.Namespace == canary.Namespace
158162
},
159163
Handler: cache.ResourceEventHandlerFuncs{
160164
AddFunc: func(obj interface{}) {
165+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
166+
obj = d.Obj
167+
}
168+
161169
canaryObj := &v1beta1.Canary{}
162170
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, canaryObj))
163171
canary.objectAdded <- canaryObj
164172
},
165173
UpdateFunc: func(oldObj, newObj interface{}) {
174+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
175+
newObj = d.Obj
176+
}
177+
166178
canaryObj := &v1beta1.Canary{}
167179
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, canaryObj))
168180
canary.objectModified <- canaryObj
169181
},
170182
DeleteFunc: func(obj interface{}) {
183+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
184+
obj = d.Obj
185+
}
186+
171187
canaryObj := &v1beta1.Canary{}
172188
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, canaryObj))
173189
canary.objectDeleted <- canaryObj

pkg/tracker/daemonset/tracker.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,23 +305,39 @@ func (d *Tracker) runDaemonSetInformer(ctx context.Context) (cleanupFn func(), e
305305
handler, err := inf.AddEventHandler(
306306
cache.FilteringResourceEventHandler{
307307
FilterFunc: func(obj interface{}) bool {
308+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
309+
obj = d.Obj
310+
}
311+
308312
daemonsetObj := &appsv1.DaemonSet{}
309313
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, daemonsetObj))
310314
return daemonsetObj.Name == d.ResourceName &&
311315
daemonsetObj.Namespace == d.Namespace
312316
},
313317
Handler: cache.ResourceEventHandlerFuncs{
314318
AddFunc: func(obj interface{}) {
319+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
320+
obj = d.Obj
321+
}
322+
315323
daemonsetObj := &appsv1.DaemonSet{}
316324
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, daemonsetObj))
317325
d.resourceAdded <- daemonsetObj
318326
},
319327
UpdateFunc: func(oldObj, newObj interface{}) {
328+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
329+
newObj = d.Obj
330+
}
331+
320332
daemonsetObj := &appsv1.DaemonSet{}
321333
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, daemonsetObj))
322334
d.resourceModified <- daemonsetObj
323335
},
324336
DeleteFunc: func(obj interface{}) {
337+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
338+
obj = d.Obj
339+
}
340+
325341
daemonsetObj := &appsv1.DaemonSet{}
326342
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, daemonsetObj))
327343
d.resourceDeleted <- daemonsetObj

pkg/tracker/deployment/tracker.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,23 +431,39 @@ func (d *Tracker) runDeploymentInformer(ctx context.Context) (cleanupFn func(),
431431
handler, err := inf.AddEventHandler(
432432
cache.FilteringResourceEventHandler{
433433
FilterFunc: func(obj interface{}) bool {
434+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
435+
obj = d.Obj
436+
}
437+
434438
deploymentObj := &appsv1.Deployment{}
435439
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, deploymentObj))
436440
return deploymentObj.Name == d.ResourceName &&
437441
deploymentObj.Namespace == d.Namespace
438442
},
439443
Handler: cache.ResourceEventHandlerFuncs{
440444
AddFunc: func(obj interface{}) {
445+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
446+
obj = d.Obj
447+
}
448+
441449
deploymentObj := &appsv1.Deployment{}
442450
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, deploymentObj))
443451
d.resourceAdded <- deploymentObj
444452
},
445453
UpdateFunc: func(oldObj, newObj interface{}) {
454+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
455+
newObj = d.Obj
456+
}
457+
446458
deploymentObj := &appsv1.Deployment{}
447459
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, deploymentObj))
448460
d.resourceModified <- deploymentObj
449461
},
450462
DeleteFunc: func(obj interface{}) {
463+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
464+
obj = d.Obj
465+
}
466+
451467
deploymentObj := &appsv1.Deployment{}
452468
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, deploymentObj))
453469
d.resourceDeleted <- deploymentObj

pkg/tracker/event/informer.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,29 @@ func (e *EventInformer) Run(ctx context.Context) (cleanupFn func(), err error) {
9595
handler, err := inf.AddEventHandler(
9696
cache.FilteringResourceEventHandler{
9797
FilterFunc: func(obj interface{}) bool {
98+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
99+
obj = d.Obj
100+
}
101+
98102
eventObj := &corev1.Event{}
99103
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, eventObj))
100104
return eventObj.InvolvedObject.UID == involvedObjMetadata.GetUID()
101105
},
102106
Handler: cache.ResourceEventHandlerFuncs{
103107
AddFunc: func(obj interface{}) {
108+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
109+
obj = d.Obj
110+
}
111+
104112
eventObj := &corev1.Event{}
105113
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, eventObj))
106114
e.handleEvent(eventObj)
107115
},
108116
UpdateFunc: func(oldObj, newObj interface{}) {
117+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
118+
newObj = d.Obj
119+
}
120+
109121
eventObj := &corev1.Event{}
110122
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, eventObj))
111123
e.handleEvent(eventObj)

pkg/tracker/generic/resource_events_watcher.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,29 @@ func (i *ResourceEventsWatcher) Run(ctx context.Context, eventsCh chan<- *corev1
9090
handler, err := inf.AddEventHandler(
9191
cache.FilteringResourceEventHandler{
9292
FilterFunc: func(obj interface{}) bool {
93+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
94+
obj = d.Obj
95+
}
96+
9397
eventObj := &corev1.Event{}
9498
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, eventObj))
9599
return eventObj.InvolvedObject.UID == involvedObjMetadata.GetUID()
96100
},
97101
Handler: cache.ResourceEventHandlerFuncs{
98102
AddFunc: func(obj interface{}) {
103+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
104+
obj = d.Obj
105+
}
106+
99107
eventObj := &corev1.Event{}
100108
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, eventObj))
101109
i.handleEventStateChange(ctx, eventObj, eventsCh)
102110
},
103111
UpdateFunc: func(oldObj, newObj interface{}) {
112+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
113+
newObj = d.Obj
114+
}
115+
104116
eventObj := &corev1.Event{}
105117
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, eventObj))
106118
i.handleEventStateChange(ctx, eventObj, eventsCh)

pkg/tracker/generic/resource_state_watcher.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,34 @@ func (w *ResourceStateWatcher) Run(ctx context.Context, resourceAddedCh, resourc
7070
handler, err := inf.AddEventHandler(
7171
cache.FilteringResourceEventHandler{
7272
FilterFunc: func(obj interface{}) bool {
73+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
74+
obj = d.Obj
75+
}
76+
7377
unstructObj := obj.(*unstructured.Unstructured)
7478
return unstructObj.GetName() == w.ResourceID.Name &&
7579
(!namespaced || unstructObj.GetNamespace() == w.ResourceID.Namespace)
7680
},
7781
Handler: cache.ResourceEventHandlerFuncs{
7882
AddFunc: func(obj interface{}) {
83+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
84+
obj = d.Obj
85+
}
86+
7987
resourceAddedCh <- obj.(*unstructured.Unstructured)
8088
},
8189
UpdateFunc: func(oldObj, newObj interface{}) {
90+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
91+
newObj = d.Obj
92+
}
93+
8294
resourceModifiedCh <- newObj.(*unstructured.Unstructured)
8395
},
8496
DeleteFunc: func(obj interface{}) {
97+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
98+
obj = d.Obj
99+
}
100+
85101
resourceDeletedCh <- obj.(*unstructured.Unstructured)
86102
},
87103
},

pkg/tracker/job/tracker.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,23 +272,39 @@ func (job *Tracker) runInformer(ctx context.Context) (cleanupFn func(), err erro
272272
handler, err := inf.AddEventHandler(
273273
cache.FilteringResourceEventHandler{
274274
FilterFunc: func(obj interface{}) bool {
275+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
276+
obj = d.Obj
277+
}
278+
275279
jobObj := &batchv1.Job{}
276280
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, jobObj))
277281
return jobObj.Name == job.ResourceName &&
278282
jobObj.Namespace == job.Namespace
279283
},
280284
Handler: cache.ResourceEventHandlerFuncs{
281285
AddFunc: func(obj interface{}) {
286+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
287+
obj = d.Obj
288+
}
289+
282290
jobObj := &batchv1.Job{}
283291
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, jobObj))
284292
job.objectAdded <- jobObj
285293
},
286294
UpdateFunc: func(oldObj, newObj interface{}) {
295+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
296+
newObj = d.Obj
297+
}
298+
287299
jobObj := &batchv1.Job{}
288300
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, jobObj))
289301
job.objectModified <- jobObj
290302
},
291303
DeleteFunc: func(obj interface{}) {
304+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
305+
obj = d.Obj
306+
}
307+
292308
jobObj := &batchv1.Job{}
293309
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, jobObj))
294310
job.objectDeleted <- jobObj

pkg/tracker/pod/informer.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,20 @@ func (p *PodsInformer) Run(ctx context.Context) (cleanupFn func(), err error) {
7474
handler, err := inf.AddEventHandler(
7575
cache.FilteringResourceEventHandler{
7676
FilterFunc: func(obj interface{}) bool {
77+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
78+
obj = d.Obj
79+
}
80+
7781
podObj := &corev1.Pod{}
7882
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, podObj))
7983
return labelSelector.Matches(apilabels.Set(podObj.GetLabels()))
8084
},
8185
Handler: cache.ResourceEventHandlerFuncs{
8286
AddFunc: func(obj interface{}) {
87+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
88+
obj = d.Obj
89+
}
90+
8391
podObj := &corev1.Pod{}
8492
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, podObj))
8593
p.PodAdded <- podObj

pkg/tracker/pod/tracker.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,23 +586,39 @@ func (pod *Tracker) runInformer(ctx context.Context) (cleanupFn func(), err erro
586586
handler, err := inf.AddEventHandler(
587587
cache.FilteringResourceEventHandler{
588588
FilterFunc: func(obj interface{}) bool {
589+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
590+
obj = d.Obj
591+
}
592+
589593
podObj := &corev1.Pod{}
590594
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, podObj))
591595
return podObj.Name == pod.ResourceName &&
592596
podObj.Namespace == pod.Namespace
593597
},
594598
Handler: cache.ResourceEventHandlerFuncs{
595599
AddFunc: func(obj interface{}) {
600+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
601+
obj = d.Obj
602+
}
603+
596604
podObj := &corev1.Pod{}
597605
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, podObj))
598606
pod.objectAdded <- podObj
599607
},
600608
UpdateFunc: func(oldObj, newObj interface{}) {
609+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
610+
newObj = d.Obj
611+
}
612+
601613
podObj := &corev1.Pod{}
602614
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, podObj))
603615
pod.objectModified <- podObj
604616
},
605617
DeleteFunc: func(obj interface{}) {
618+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
619+
obj = d.Obj
620+
}
621+
606622
podObj := &corev1.Pod{}
607623
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, podObj))
608624
pod.objectDeleted <- podObj

pkg/tracker/replicaset/informer.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,22 +107,38 @@ func (r *ReplicaSetInformer) Run(ctx context.Context) (cleanupFn func(), err err
107107
handler, err := inf.AddEventHandler(
108108
cache.FilteringResourceEventHandler{
109109
FilterFunc: func(obj interface{}) bool {
110+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
111+
obj = d.Obj
112+
}
113+
110114
rsObj := &appsv1.ReplicaSet{}
111115
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, rsObj))
112116
return labelSelector.Matches(apilabels.Set(rsObj.GetLabels()))
113117
},
114118
Handler: cache.ResourceEventHandlerFuncs{
115119
AddFunc: func(obj interface{}) {
120+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
121+
obj = d.Obj
122+
}
123+
116124
rsObj := &appsv1.ReplicaSet{}
117125
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, rsObj))
118126
r.ReplicaSetAdded <- rsObj
119127
},
120128
UpdateFunc: func(oldObj, newObj interface{}) {
129+
if d, ok := newObj.(cache.DeletedFinalStateUnknown); ok {
130+
newObj = d.Obj
131+
}
132+
121133
rsObj := &appsv1.ReplicaSet{}
122134
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(newObj.(*unstructured.Unstructured).Object, rsObj))
123135
r.ReplicaSetModified <- rsObj
124136
},
125137
DeleteFunc: func(obj interface{}) {
138+
if d, ok := obj.(cache.DeletedFinalStateUnknown); ok {
139+
obj = d.Obj
140+
}
141+
126142
rsObj := &appsv1.ReplicaSet{}
127143
lo.Must0(runtime.DefaultUnstructuredConverter.FromUnstructured(obj.(*unstructured.Unstructured).Object, rsObj))
128144
r.ReplicaSetDeleted <- rsObj

0 commit comments

Comments
 (0)