From 1960243d823d73e5ed708107e218dffec46cc4ef Mon Sep 17 00:00:00 2001 From: Janet Kuo Date: Mon, 29 Feb 2016 14:08:40 -0800 Subject: [PATCH 1/2] Fix type assertion error in deployment controller DeleteFunc --- pkg/controller/deployment/deployment_controller.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index 67af6ccae9c..f198094bf01 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -127,7 +127,19 @@ func NewDeploymentController(client clientset.Interface, resyncPeriod controller }, // This will enter the sync loop and no-op, because the deployment has been deleted from the store. DeleteFunc: func(obj interface{}) { - d := obj.(*extensions.Deployment) + d, ok := obj.(*extensions.Deployment) + if !ok { + tombstone, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + glog.Errorf("Couldn't get object from tombstone %+v", obj) + return + } + d, ok = tombstone.Obj.(*extensions.Deployment) + if !ok { + glog.Errorf("Tombstone contained object that is not a Deployment %+v", obj) + return + } + } glog.V(4).Infof("Deleting deployment %s", d.Name) dc.enqueueDeployment(d) }, From 1b831babe7c294a4988ae6316641d79bea22cb47 Mon Sep 17 00:00:00 2001 From: Janet Kuo Date: Mon, 29 Feb 2016 18:13:01 -0800 Subject: [PATCH 2/2] Move deployment Add/Update/DeleteFunc into functions --- .../deployment/deployment_controller.go | 62 ++++++++++--------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index f198094bf01..4c3c2c1de00 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -114,35 +114,10 @@ func NewDeploymentController(client clientset.Interface, resyncPeriod controller &extensions.Deployment{}, FullDeploymentResyncPeriod, framework.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { - d := obj.(*extensions.Deployment) - glog.V(4).Infof("Adding deployment %s", d.Name) - dc.enqueueDeployment(d) - }, - UpdateFunc: func(old, cur interface{}) { - oldD := old.(*extensions.Deployment) - glog.V(4).Infof("Updating deployment %s", oldD.Name) - // Resync on deployment object relist. - dc.enqueueDeployment(cur.(*extensions.Deployment)) - }, + AddFunc: dc.addDeploymentNotification, + UpdateFunc: dc.updateDeploymentNotification, // This will enter the sync loop and no-op, because the deployment has been deleted from the store. - DeleteFunc: func(obj interface{}) { - d, ok := obj.(*extensions.Deployment) - if !ok { - tombstone, ok := obj.(cache.DeletedFinalStateUnknown) - if !ok { - glog.Errorf("Couldn't get object from tombstone %+v", obj) - return - } - d, ok = tombstone.Obj.(*extensions.Deployment) - if !ok { - glog.Errorf("Tombstone contained object that is not a Deployment %+v", obj) - return - } - } - glog.V(4).Infof("Deleting deployment %s", d.Name) - dc.enqueueDeployment(d) - }, + DeleteFunc: dc.deleteDeploymentNotification, }, ) @@ -202,6 +177,37 @@ func (dc *DeploymentController) Run(workers int, stopCh <-chan struct{}) { dc.queue.ShutDown() } +func (dc *DeploymentController) addDeploymentNotification(obj interface{}) { + d := obj.(*extensions.Deployment) + glog.V(4).Infof("Adding deployment %s", d.Name) + dc.enqueueDeployment(d) +} + +func (dc *DeploymentController) updateDeploymentNotification(old, cur interface{}) { + oldD := old.(*extensions.Deployment) + glog.V(4).Infof("Updating deployment %s", oldD.Name) + // Resync on deployment object relist. + dc.enqueueDeployment(cur.(*extensions.Deployment)) +} + +func (dc *DeploymentController) deleteDeploymentNotification(obj interface{}) { + d, ok := obj.(*extensions.Deployment) + if !ok { + tombstone, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + glog.Errorf("Couldn't get object from tombstone %+v", obj) + return + } + d, ok = tombstone.Obj.(*extensions.Deployment) + if !ok { + glog.Errorf("Tombstone contained object that is not a Deployment %+v", obj) + return + } + } + glog.V(4).Infof("Deleting deployment %s", d.Name) + dc.enqueueDeployment(d) +} + // addReplicaSet enqueues the deployment that manages a ReplicaSet when the ReplicaSet is created. func (dc *DeploymentController) addReplicaSet(obj interface{}) { rs := obj.(*extensions.ReplicaSet)