@@ -258,18 +258,49 @@ func NewNetworkPolicyManager(clientset *kubernetes.Clientset, informerFactory in
258258 // Pod event handlers
259259 cache.ResourceEventHandlerFuncs {
260260 AddFunc : func (obj interface {}) {
261+ podObj , ok := obj .(* corev1.Pod )
262+ if ! ok {
263+ metrics .SendErrorLogAndMetric (util .NpmID , "ADD Pod: Received unexpected object type: %v" , obj )
264+ return
265+ }
261266 npMgr .Lock ()
262- npMgr .AddPod (obj .( * corev1. Pod ) )
267+ npMgr .AddPod (podObj )
263268 npMgr .Unlock ()
264269 },
265270 UpdateFunc : func (old , new interface {}) {
271+ oldPodObj , ok := old .(* corev1.Pod )
272+ if ! ok {
273+ metrics .SendErrorLogAndMetric (util .NpmID , "UPDATE Pod: Received unexpected old object type: %v" , oldPodObj )
274+ return
275+ }
276+ newPodObj , ok := new .(* corev1.Pod )
277+ if ! ok {
278+ metrics .SendErrorLogAndMetric (util .NpmID , "UPDATE Pod: Received unexpected new object type: %v" , newPodObj )
279+ return
280+ }
266281 npMgr .Lock ()
267- npMgr .UpdatePod (old .( * corev1. Pod ), new .( * corev1. Pod ) )
282+ npMgr .UpdatePod (oldPodObj , newPodObj )
268283 npMgr .Unlock ()
269284 },
270285 DeleteFunc : func (obj interface {}) {
286+ // DeleteFunc gets the final state of the resource (if it is known).
287+ // Otherwise, it gets an object of type DeletedFinalStateUnknown.
288+ // This can happen if the watch is closed and misses the delete event and
289+ // the controller doesn't notice the deletion until the subsequent re-list
290+ podObj , ok := obj .(* corev1.Pod )
291+ if ! ok {
292+ tombstone , ok := obj .(cache.DeletedFinalStateUnknown )
293+ if ! ok {
294+ metrics .SendErrorLogAndMetric (util .NpmID , "DELETE Pod: Received unexpected object type: %v" , obj )
295+ return
296+ }
297+ if podObj , ok = tombstone .Obj .(* corev1.Pod ); ! ok {
298+ metrics .SendErrorLogAndMetric (util .NpmID , "DELETE Pod: Received unexpected object type: %v" , obj )
299+ return
300+ }
301+ }
271302 npMgr .Lock ()
272- npMgr .DeletePod (obj .( * corev1. Pod ) )
303+ npMgr .DeletePod (podObj )
273304 npMgr .Unlock ()
274305 },
275306 },
@@ -279,18 +310,45 @@ func NewNetworkPolicyManager(clientset *kubernetes.Clientset, informerFactory in
279310 // Namespace event handlers
280311 cache.ResourceEventHandlerFuncs {
281312 AddFunc : func (obj interface {}) {
313+ nameSpaceObj , ok := obj .(* corev1.Namespace )
314+ if ! ok {
315+ metrics .SendErrorLogAndMetric (util .NpmID , "ADD NameSpace: Received unexpected object type: %v" , obj )
316+ return
317+ }
282318 npMgr .Lock ()
283- npMgr .AddNamespace (obj .( * corev1. Namespace ) )
319+ npMgr .AddNamespace (nameSpaceObj )
284320 npMgr .Unlock ()
285321 },
286322 UpdateFunc : func (old , new interface {}) {
323+ oldNameSpaceObj , ok := old .(* corev1.Namespace )
324+ if ! ok {
325+ metrics .SendErrorLogAndMetric (util .NpmID , "UPDATE NameSpace: Received unexpected old object type: %v" , oldNameSpaceObj )
326+ return
327+ }
328+ newNameSpaceObj , ok := new .(* corev1.Namespace )
329+ if ! ok {
330+ metrics .SendErrorLogAndMetric (util .NpmID , "UPDATE NameSpace: Received unexpected new object type: %v" , newNameSpaceObj )
331+ return
332+ }
287333 npMgr .Lock ()
288- npMgr .UpdateNamespace (old .( * corev1. Namespace ), new .( * corev1. Namespace ) )
334+ npMgr .UpdateNamespace (oldNameSpaceObj , newNameSpaceObj )
289335 npMgr .Unlock ()
290336 },
291337 DeleteFunc : func (obj interface {}) {
338+ nameSpaceObj , ok := obj .(* corev1.Namespace )
339+ if ! ok {
340+ tombstone , ok := obj .(cache.DeletedFinalStateUnknown )
341+ if ! ok {
342+ metrics .SendErrorLogAndMetric (util .NpmID , "DELETE NameSpace: Received unexpected object type: %v" , obj )
343+ return
344+ }
345+ if nameSpaceObj , ok = tombstone .Obj .(* corev1.Namespace ); ! ok {
346+ metrics .SendErrorLogAndMetric (util .NpmID , "DELETE NameSpace: Received unexpected object type: %v" , obj )
347+ return
348+ }
349+ }
292350 npMgr .Lock ()
293- npMgr .DeleteNamespace (obj .( * corev1. Namespace ) )
351+ npMgr .DeleteNamespace (nameSpaceObj )
294352 npMgr .Unlock ()
295353 },
296354 },
@@ -300,18 +358,45 @@ func NewNetworkPolicyManager(clientset *kubernetes.Clientset, informerFactory in
300358 // Network policy event handlers
301359 cache.ResourceEventHandlerFuncs {
302360 AddFunc : func (obj interface {}) {
361+ networkPolicyObj , ok := obj .(* networkingv1.NetworkPolicy )
362+ if ! ok {
363+ metrics .SendErrorLogAndMetric (util .NpmID , "ADD Network Policy: Received unexpected object type: %v" , obj )
364+ return
365+ }
303366 npMgr .Lock ()
304- npMgr .AddNetworkPolicy (obj .( * networkingv1. NetworkPolicy ) )
367+ npMgr .AddNetworkPolicy (networkPolicyObj )
305368 npMgr .Unlock ()
306369 },
307370 UpdateFunc : func (old , new interface {}) {
371+ oldNetworkPolicyObj , ok := old .(* networkingv1.NetworkPolicy )
372+ if ! ok {
373+ metrics .SendErrorLogAndMetric (util .NpmID , "UPDATE Network Policy: Received unexpected old object type: %v" , oldNetworkPolicyObj )
374+ return
375+ }
376+ newNetworkPolicyObj , ok := new .(* networkingv1.NetworkPolicy )
377+ if ! ok {
378+ metrics .SendErrorLogAndMetric (util .NpmID , "UPDATE Network Policy: Received unexpected new object type: %v" , newNetworkPolicyObj )
379+ return
380+ }
308381 npMgr .Lock ()
309- npMgr .UpdateNetworkPolicy (old .( * networkingv1. NetworkPolicy ), new .( * networkingv1. NetworkPolicy ) )
382+ npMgr .UpdateNetworkPolicy (oldNetworkPolicyObj , newNetworkPolicyObj )
310383 npMgr .Unlock ()
311384 },
312385 DeleteFunc : func (obj interface {}) {
386+ networkPolicyObj , ok := obj .(* networkingv1.NetworkPolicy )
387+ if ! ok {
388+ tombstone , ok := obj .(cache.DeletedFinalStateUnknown )
389+ if ! ok {
390+ metrics .SendErrorLogAndMetric (util .NpmID , "DELETE Network Policy: Received unexpected object type: %v" , obj )
391+ return
392+ }
393+ if networkPolicyObj , ok = tombstone .Obj .(* networkingv1.NetworkPolicy ); ! ok {
394+ metrics .SendErrorLogAndMetric (util .NpmID , "DELETE Network Policy: Received unexpected object type: %v" , obj )
395+ return
396+ }
397+ }
313398 npMgr .Lock ()
314- npMgr .DeleteNetworkPolicy (obj .( * networkingv1. NetworkPolicy ) )
399+ npMgr .DeleteNetworkPolicy (networkPolicyObj )
315400 npMgr .Unlock ()
316401 },
317402 },
0 commit comments