From defa5cc3d36ba081ee461d9458201196b4834104 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Wed, 8 Feb 2017 10:07:14 +0000 Subject: [PATCH] Handle cache.DeleteFinalStateUnknown --- prog/weave-npc/main.go | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/prog/weave-npc/main.go b/prog/weave-npc/main.go index ec513d12..2c0623a2 100644 --- a/prog/weave-npc/main.go +++ b/prog/weave-npc/main.go @@ -127,7 +127,15 @@ func root(cmd *cobra.Command, args []string) { handleError(npc.AddNamespace(obj.(*coreapi.Namespace))) }, DeleteFunc: func(obj interface{}) { - handleError(npc.DeleteNamespace(obj.(*coreapi.Namespace))) + switch obj := obj.(type) { + case *coreapi.Namespace: + handleError(npc.DeleteNamespace(obj)) + case cache.DeletedFinalStateUnknown: + // We know this object has gone away, but its final state is no longer + // available from the API server. Instead we use the last copy of it + // that we have, which is good enough for our cleanup. + handleError(npc.DeleteNamespace(obj.Obj.(*coreapi.Namespace))) + } }, UpdateFunc: func(old, new interface{}) { handleError(npc.UpdateNamespace(old.(*coreapi.Namespace), new.(*coreapi.Namespace))) @@ -139,7 +147,15 @@ func root(cmd *cobra.Command, args []string) { handleError(npc.AddPod(obj.(*coreapi.Pod))) }, DeleteFunc: func(obj interface{}) { - handleError(npc.DeletePod(obj.(*coreapi.Pod))) + switch obj := obj.(type) { + case *coreapi.Pod: + handleError(npc.DeletePod(obj)) + case cache.DeletedFinalStateUnknown: + // We know this object has gone away, but its final state is no longer + // available from the API server. Instead we use the last copy of it + // that we have, which is good enough for our cleanup. + handleError(npc.DeletePod(obj.Obj.(*coreapi.Pod))) + } }, UpdateFunc: func(old, new interface{}) { handleError(npc.UpdatePod(old.(*coreapi.Pod), new.(*coreapi.Pod))) @@ -151,7 +167,15 @@ func root(cmd *cobra.Command, args []string) { handleError(npc.AddNetworkPolicy(obj.(*extnapi.NetworkPolicy))) }, DeleteFunc: func(obj interface{}) { - handleError(npc.DeleteNetworkPolicy(obj.(*extnapi.NetworkPolicy))) + switch obj := obj.(type) { + case *extnapi.NetworkPolicy: + handleError(npc.DeleteNetworkPolicy(obj)) + case cache.DeletedFinalStateUnknown: + // We know this object has gone away, but its final state is no longer + // available from the API server. Instead we use the last copy of it + // that we have, which is good enough for our cleanup. + handleError(npc.DeleteNetworkPolicy(obj.Obj.(*extnapi.NetworkPolicy))) + } }, UpdateFunc: func(old, new interface{}) { handleError(npc.UpdateNetworkPolicy(old.(*extnapi.NetworkPolicy), new.(*extnapi.NetworkPolicy)))