Fix poolmanager wrongly delete env pool (#1511)

The root cause of the problem is that eagerPoolCreator
tries to create the deployment when the poolmanager
is trying to delete it. To avoid this, start eager pool
creator after executor starts serving requests.
This commit is contained in:
Ta-Ching Chen
2020-01-28 00:58:37 +08:00
committed by GitHub
parent 8f8afaf139
commit 9eac1512fb
3 changed files with 8 additions and 1 deletions
@@ -70,6 +70,9 @@ func (deploy *NewDeploy) createOrGetDeployment(fn *fv1.Function, env *fv1.Enviro
existingDepl.Spec.Template.Spec.Containers = deployment.Spec.Template.Spec.Containers existingDepl.Spec.Template.Spec.Containers = deployment.Spec.Template.Spec.Containers
existingDepl.Spec.Template.Spec.ServiceAccountName = deployment.Spec.Template.Spec.ServiceAccountName existingDepl.Spec.Template.Spec.ServiceAccountName = deployment.Spec.Template.Spec.ServiceAccountName
existingDepl.Spec.Template.Spec.TerminationGracePeriodSeconds = deployment.Spec.Template.Spec.TerminationGracePeriodSeconds existingDepl.Spec.Template.Spec.TerminationGracePeriodSeconds = deployment.Spec.Template.Spec.TerminationGracePeriodSeconds
// Update with the latest deployment spec. Kubernetes will trigger
// rolling update if spec is different from the one in the cluster.
existingDepl, err = deploy.kubernetesClient.AppsV1().Deployments(deployNamespace).Update(existingDepl) existingDepl, err = deploy.kubernetesClient.AppsV1().Deployments(deployNamespace).Update(existingDepl)
if err != nil { if err != nil {
deploy.logger.Warn("error adopting deploy", zap.Error(err), deploy.logger.Warn("error adopting deploy", zap.Error(err),
+2
View File
@@ -483,6 +483,8 @@ func (gp *GenericPool) createPool() error {
if err == nil { if err == nil {
if depl.Annotations[fv1.EXECUTOR_INSTANCEID_LABEL] != gp.instanceId { if depl.Annotations[fv1.EXECUTOR_INSTANCEID_LABEL] != gp.instanceId {
deployment.Annotations[fv1.EXECUTOR_INSTANCEID_LABEL] = gp.instanceId deployment.Annotations[fv1.EXECUTOR_INSTANCEID_LABEL] = gp.instanceId
// Update with the latest deployment spec. Kubernetes will trigger
// rolling update if spec is different from the one in the cluster.
depl, err = gp.kubernetesClient.AppsV1().Deployments(gp.namespace).Update(deployment) depl, err = gp.kubernetesClient.AppsV1().Deployments(gp.namespace).Update(deployment)
} }
gp.deployment = depl gp.deployment = depl
+3 -1
View File
@@ -116,7 +116,6 @@ func MakeGenericPoolManager(
} }
go gpm.service() go gpm.service()
go gpm.eagerPoolCreator()
if len(os.Getenv("ENABLE_ISTIO")) > 0 { if len(os.Getenv("ENABLE_ISTIO")) > 0 {
istio, err := strconv.ParseBool(os.Getenv("ENABLE_ISTIO")) istio, err := strconv.ParseBool(os.Getenv("ENABLE_ISTIO"))
@@ -135,6 +134,9 @@ func MakeGenericPoolManager(
} }
func (gpm *GenericPoolManager) Run(ctx context.Context) { func (gpm *GenericPoolManager) Run(ctx context.Context) {
// eagerPoolCreator must run after CleanupOldExecutorObjects.
// Otherwise, the poolmanager may wrongly delete the deployment.
go gpm.eagerPoolCreator()
go gpm.funcController.Run(ctx.Done()) go gpm.funcController.Run(ctx.Done())
go gpm.pkgController.Run(ctx.Done()) go gpm.pkgController.Run(ctx.Done())
go gpm.idleObjectReaper() go gpm.idleObjectReaper()