From d2d43f4115ca54679061bde1f47023e3ea19ebc9 Mon Sep 17 00:00:00 2001 From: Lai Jiang Date: Thu, 6 Mar 2025 11:25:52 -0500 Subject: [PATCH] Fix a Cloud Scheduler deployment bug (#2707) For GKE all tasks should be on backend, BSA was on its own service because of egress IP constraint. Also made it possible to specify a timeout for the Cloud Scheduler job, with the default (3m) suitable for most tasks. --- .../tasks/cloud-scheduler-tasks-production.xml | 1 + release/builder/deployCloudSchedulerAndQueue.go | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/google/registry/config/files/tasks/cloud-scheduler-tasks-production.xml b/core/src/main/java/google/registry/config/files/tasks/cloud-scheduler-tasks-production.xml index e85f4bd7c..584d02376 100644 --- a/core/src/main/java/google/registry/config/files/tasks/cloud-scheduler-tasks-production.xml +++ b/core/src/main/java/google/registry/config/files/tasks/cloud-scheduler-tasks-production.xml @@ -301,6 +301,7 @@ bsaValidate bsa + 10m Validates the processed BSA data in the database against the original block lists. diff --git a/release/builder/deployCloudSchedulerAndQueue.go b/release/builder/deployCloudSchedulerAndQueue.go index 5a1bf0047..9321bd61c 100644 --- a/release/builder/deployCloudSchedulerAndQueue.go +++ b/release/builder/deployCloudSchedulerAndQueue.go @@ -70,6 +70,7 @@ type Task struct { URL string `xml:"url"` Description string `xml:"description"` Service string `xml:"service"` + Timeout string `xml:"timeout"` Schedule string `xml:"schedule"` Name string `xml:"name"` } @@ -189,7 +190,9 @@ func (manager TasksSyncManager) getArgs(task Task, operationType string) []strin description = strings.ReplaceAll(description, "\n", " ") var service = "backend" - if task.Service != "backend" && task.Service != "" { + // Only BSA tasks run on the BSA service in GAE. GKE tasks are always + // on the backend service. + if task.Service != "backend" && task.Service != "" && !gke { service = task.Service } @@ -200,7 +203,7 @@ func (manager TasksSyncManager) getArgs(task Task, operationType string) []strin uri = fmt.Sprintf("https://%s-dot-%s.appspot.com%s", service, projectName, strings.TrimSpace(task.URL)) } - return []string{ + args := []string{ "--project", projectName, "scheduler", "jobs", operationType, "http", task.Name, @@ -212,6 +215,12 @@ func (manager TasksSyncManager) getArgs(task Task, operationType string) []strin "--oidc-service-account-email", getCloudSchedulerServiceAccountEmail(), "--oidc-token-audience", clientId, } + + if task.Timeout != "" { + args = append(args, "--attempt-deadline", task.Timeout) + } + + return args } func (manager TasksSyncManager) fetchExistingRecords() ExistingEntries {