From 8b7e9d303c198d99725cb528b0e0df7dbf529cd7 Mon Sep 17 00:00:00 2001 From: gmarek Date: Thu, 13 Oct 2016 11:19:00 +0200 Subject: [PATCH] Handle DeletedFinalStateUnknown in NodeController --- pkg/controller/node/nodecontroller.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/controller/node/nodecontroller.go b/pkg/controller/node/nodecontroller.go index 8b2720c53c706..3680c32b04606 100644 --- a/pkg/controller/node/nodecontroller.go +++ b/pkg/controller/node/nodecontroller.go @@ -294,7 +294,20 @@ func NewNodeController( return } - node := obj.(*api.Node) + node, isNode := obj.(*api.Node) + // We can get DeletedFinalStateUnknown instead of *api.Node here and we need to handle that correctly. #34692 + if !isNode { + deletedState, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + glog.Errorf("Received unexpected object: %v", obj) + return + } + node, ok = deletedState.Obj.(*api.Node) + if !ok { + glog.Errorf("DeletedFinalStateUnknown contained non-Node object: %v", deletedState.Obj) + return + } + } if err := nc.cidrAllocator.ReleaseCIDR(node); err != nil { glog.Errorf("Error releasing CIDR: %v", err) }