From 4a40380d0fe5de42e61c7004e4ad324d725eb132 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Mon, 24 Sep 2018 12:31:44 +0530 Subject: [PATCH] addressing review comments --- prog/kube-utils/main.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/prog/kube-utils/main.go b/prog/kube-utils/main.go index bd96f0b7..2caac6f6 100644 --- a/prog/kube-utils/main.go +++ b/prog/kube-utils/main.go @@ -72,7 +72,8 @@ type weaveClient interface { // For each of those peers that is no longer listed as a node by // Kubernetes, remove it from Weave IPAM -func reclaimRemovedPeers(kube kubernetes.Interface, weave weaveClient, cml *configMapAnnotations, myPeerName, myNodeName string) error { +func reclaimRemovedPeers(kube kubernetes.Interface, cml *configMapAnnotations, myPeerName, myNodeName string) error { + weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR"), common.Log) for loopsWhenNothingChanged := 0; loopsWhenNothingChanged < 3; loopsWhenNothingChanged++ { if err := cml.Init(); err != nil { return err @@ -209,8 +210,18 @@ func registerForNodeUpdates(client *kubernetes.Clientset, stopCh <-chan struct{} common.Log.Debugln("registering for updates for node delete events") nodeInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ DeleteFunc: func(obj interface{}) { - node := obj.(*v1core.Node) - common.Log.Debugln("[kube-peers] Nodes deleted:", node.Name) + nodeObj, ok := obj.(*v1core.Node) + if !ok { + tombstone, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + common.Log.Fatalf("[kube-peers] Couldn't get node object from tombstone: %#v", obj) + } + nodeObj, ok = tombstone.Obj.(*v1core.Node) + if !ok { + common.Log.Fatalf("[kube-peers] Tombstone contained object that is not a Node: %#v", obj) + } + } + common.Log.Debugln("[kube-peers] Nodes deleted:", nodeObj.Name) config, err := rest.InClusterConfig() if err != nil { common.Log.Fatalf("[kube-peers] Could not get cluster config: %v", err) @@ -220,14 +231,13 @@ func registerForNodeUpdates(client *kubernetes.Clientset, stopCh <-chan struct{} common.Log.Fatalf("[kube-peers] Could not make Kubernetes connection: %v", err) } cml := newConfigMapAnnotations(configMapNamespace, configMapName, client) - weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR"), common.Log) // add random delay to avoid all nodes acting on node delete event at the same // time leading to contention to use `weave-net` configmap r := rand.Intn(5000) time.Sleep(time.Duration(r) * time.Millisecond) - err = reclaimRemovedPeers(client, weave, cml, peerName, nodeName) + err = reclaimRemovedPeers(client, cml, peerName, nodeName) if err != nil { common.Log.Fatalf("[kube-peers] Error while reclaiming space: %v", err) } @@ -296,8 +306,7 @@ func main() { } common.Log.Infoln("[kube-peers] Added myself to peer list", list) - weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR"), common.Log) - err = reclaimRemovedPeers(c, weave, cml, peerName, nodeName) + err = reclaimRemovedPeers(c, cml, peerName, nodeName) if err != nil { common.Log.Fatalf("[kube-peers] Error while reclaiming space: %v", err) }