From 29599a8c71f45606452d131d499152586646a2c9 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..96648f0a3003a 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.Warningf("Received unexpected object: %v", obj) + return + } + node, ok = deletedState.Obj.(*api.Node) + if !ok { + glog.Warningf("DeletedFinalStateUnknown contained non-Node object: %v", deletedState.Obj) + return + } + } if err := nc.cidrAllocator.ReleaseCIDR(node); err != nil { glog.Errorf("Error releasing CIDR: %v", err) }