Skip to content

Commit 44980d5

Browse files
Pigbibicodex
andcommitted
fix: complete LongBridge scheduler migration
Co-Authored-By: Codex <noreply@openai.com>
1 parent 5208936 commit 44980d5

5 files changed

Lines changed: 88 additions & 10 deletions

File tree

.github/workflows/sync-cloud-run-env.yml

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,24 @@ jobs:
10341034
PY
10351035
)"
10361036
1037+
desired_probe_schedule="$(CURRENT_SCHEDULE="${desired_schedule}" SCHEDULE_TIME="${probe_time}" python - <<'PY'
1038+
import os
1039+
1040+
current_fields = os.environ["CURRENT_SCHEDULE"].split()
1041+
time_fields = os.environ["SCHEDULE_TIME"].split()
1042+
if len(current_fields) != 5:
1043+
raise SystemExit(f"Cloud Scheduler schedule must have 5 fields: {os.environ['CURRENT_SCHEDULE']!r}")
1044+
if len(time_fields) == 5:
1045+
print(" ".join(time_fields))
1046+
elif len(time_fields) == 2:
1047+
print(" ".join([*time_fields, *current_fields[2:]]))
1048+
else:
1049+
raise SystemExit(
1050+
f"Cloud Scheduler override must have 2 time fields or 5 cron fields: {os.environ['SCHEDULE_TIME']!r}"
1051+
)
1052+
PY
1053+
)"
1054+
10371055
scheduler_uri="${service_url}/run"
10381056
if [ -n "${current_schedule}" ]; then
10391057
echo "Updating Cloud Scheduler job ${job_name} schedule to ${desired_schedule}, timezone to ${market_timezone}, and URI to ${scheduler_uri}."
@@ -1059,6 +1077,42 @@ jobs:
10591077
--quiet
10601078
fi
10611079
1080+
probe_job_name="${CLOUD_RUN_SERVICE}-probe-scheduler"
1081+
probe_uri="${service_url}/probe"
1082+
if gcloud scheduler jobs describe "${probe_job_name}" \
1083+
--project="${GCP_PROJECT_ID}" \
1084+
--location="${scheduler_location}" >/dev/null 2>&1; then
1085+
echo "Updating Cloud Scheduler probe ${probe_job_name} to ${desired_probe_schedule}."
1086+
gcloud scheduler jobs update http "${probe_job_name}" \
1087+
--project="${GCP_PROJECT_ID}" \
1088+
--location="${scheduler_location}" \
1089+
--uri="${probe_uri}" \
1090+
--schedule="${desired_probe_schedule}" \
1091+
--time-zone="${market_timezone}" \
1092+
--http-method=POST \
1093+
--oidc-service-account-email="${GCP_SCHEDULER_SERVICE_ACCOUNT}" \
1094+
--oidc-token-audience="${service_url}" \
1095+
--attempt-deadline=180s \
1096+
--max-retry-attempts=0 \
1097+
--max-retry-duration=0s \
1098+
--quiet
1099+
else
1100+
echo "Creating Cloud Scheduler probe ${probe_job_name} at ${desired_probe_schedule}."
1101+
gcloud scheduler jobs create http "${probe_job_name}" \
1102+
--project="${GCP_PROJECT_ID}" \
1103+
--location="${scheduler_location}" \
1104+
--uri="${probe_uri}" \
1105+
--schedule="${desired_probe_schedule}" \
1106+
--time-zone="${market_timezone}" \
1107+
--http-method=POST \
1108+
--oidc-service-account-email="${GCP_SCHEDULER_SERVICE_ACCOUNT}" \
1109+
--oidc-token-audience="${service_url}" \
1110+
--attempt-deadline=180s \
1111+
--max-retry-attempts=0 \
1112+
--max-retry-duration=0s \
1113+
--quiet
1114+
fi
1115+
10621116
precheck_job_name="${CLOUD_RUN_SERVICE}-precheck-scheduler"
10631117
precheck_uri="${service_url}/dry-run"
10641118
if gcloud scheduler jobs describe "${precheck_job_name}" \
@@ -1095,7 +1149,7 @@ jobs:
10951149
--quiet
10961150
fi
10971151
1098-
managed_scheduler_jobs=("${job_name}" "${precheck_job_name}")
1152+
managed_scheduler_jobs=("${job_name}" "${probe_job_name}" "${precheck_job_name}")
10991153
for managed_job_name in "${managed_scheduler_jobs[@]}"; do
11001154
managed_job_state="$(gcloud scheduler jobs describe "${managed_job_name}" \
11011155
--project="${GCP_PROJECT_ID}" \
@@ -1123,6 +1177,19 @@ jobs:
11231177
esac
11241178
done
11251179
1180+
if [ "${DEPLOYMENT_LABEL:-}" = "SG" ]; then
1181+
monitor_job_name="longbridge-monitor-dispatcher-scheduler"
1182+
if gcloud scheduler jobs describe "${monitor_job_name}" \
1183+
--project="${GCP_PROJECT_ID}" \
1184+
--location="${scheduler_location}" >/dev/null 2>&1; then
1185+
echo "Deleting obsolete shared monitor dispatcher ${monitor_job_name}."
1186+
gcloud scheduler jobs delete "${monitor_job_name}" \
1187+
--project="${GCP_PROJECT_ID}" \
1188+
--location="${scheduler_location}" \
1189+
--quiet
1190+
fi
1191+
fi
1192+
11261193
- name: Reconcile legacy Cloud Scheduler jobs
11271194
if: steps.config.outputs.env_sync_enabled == 'true'
11281195
env:

scripts/reconcile_cloud_runtime.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def ensure_latest_traffic(
277277

278278
def _legacy_jobs_for_target(platform: str, target: RuntimeTarget) -> list[str]:
279279
service = target.service_name
280-
jobs = [f"{service}-probe-scheduler"]
280+
jobs: list[str] = []
281281
if service.endswith("-service"):
282282
base = service[: -len("-service")]
283283
jobs.extend([f"{base}-probe-scheduler", f"{base}-precheck-scheduler"])

tests/test_reconcile_cloud_runtime.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,6 @@ def fake_run(args, *, json_output=False, dry_run=False):
159159
self.assertEqual(
160160
delete_commands,
161161
[
162-
("longbridge-quant-paper-service-probe-scheduler", "asia-east2"),
163-
("longbridge-quant-paper-service-probe-scheduler", "asia-east1"),
164-
("longbridge-quant-paper-service-probe-scheduler", "europe-west1"),
165-
("longbridge-quant-paper-service-probe-scheduler", "asia-northeast1"),
166-
("longbridge-quant-paper-service-probe-scheduler", "asia-south1"),
167162
("longbridge-quant-paper-probe-scheduler", "asia-east2"),
168163
("longbridge-quant-paper-probe-scheduler", "asia-east1"),
169164
("longbridge-quant-paper-probe-scheduler", "europe-west1"),

tests/test_scheduler_workflow.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from pathlib import Path
2+
3+
4+
def test_replacement_probe_and_precheck_exist_before_shared_dispatcher_cleanup() -> None:
5+
workflow = Path(".github/workflows/sync-cloud-run-env.yml").read_text(encoding="utf-8")
6+
7+
probe = workflow.index('probe_job_name="${CLOUD_RUN_SERVICE}-probe-scheduler"')
8+
precheck = workflow.index('precheck_job_name="${CLOUD_RUN_SERVICE}-precheck-scheduler"')
9+
cleanup = workflow.index('gcloud scheduler jobs delete "${monitor_job_name}"')
10+
11+
assert probe < cleanup
12+
assert precheck < cleanup

tests/test_sync_cloud_run_env_workflow.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,20 +222,24 @@ grep -Fq 'print(" ".join(time_fields))' "$workflow_file"
222222
grep -Fq 'print(" ".join([*time_fields, *current_fields[2:]]))' "$workflow_file"
223223
grep -Fq 'gcloud scheduler jobs update http "${job_name}"' "$workflow_file"
224224
grep -Fq 'gcloud scheduler jobs create http "${job_name}"' "$workflow_file"
225+
grep -Fq 'probe_job_name="${CLOUD_RUN_SERVICE}-probe-scheduler"' "$workflow_file"
226+
grep -Fq 'probe_uri="${service_url}/probe"' "$workflow_file"
225227
grep -Fq 'precheck_job_name="${CLOUD_RUN_SERVICE}-precheck-scheduler"' "$workflow_file"
226228
grep -Fq 'precheck_uri="${service_url}/dry-run"' "$workflow_file"
227-
grep -Fq 'managed_scheduler_jobs=("${job_name}" "${precheck_job_name}")' "$workflow_file"
229+
grep -Fq 'managed_scheduler_jobs=("${job_name}" "${probe_job_name}" "${precheck_job_name}")' "$workflow_file"
228230
grep -Fq 'gcloud scheduler jobs resume "${managed_job_name}"' "$workflow_file"
229231
grep -Fq 'gcloud scheduler jobs pause "${managed_job_name}"' "$workflow_file"
232+
grep -Fq 'monitor_job_name="longbridge-monitor-dispatcher-scheduler"' "$workflow_file"
233+
grep -Fq 'gcloud scheduler jobs delete "${monitor_job_name}"' "$workflow_file"
230234
grep -Fq 'Reconcile Cloud Run traffic' "$workflow_file"
231235
grep -Fq 'python3 scripts/reconcile_cloud_runtime.py --platform longbridge --ensure-latest-traffic' "$workflow_file"
232236
grep -Fq 'Reconcile legacy Cloud Scheduler jobs' "$workflow_file"
233237
grep -Fq 'python3 scripts/reconcile_cloud_runtime.py --platform longbridge --delete-legacy-schedulers' "$workflow_file"
234238
grep -Fq -- '--schedule="${desired_schedule}"' "$workflow_file"
235239
grep -Fq -- '--time-zone="${market_timezone}"' "$workflow_file"
236240

237-
if grep -Fq 'longbridge-monitor-dispatcher-scheduler' "$workflow_file"; then
238-
echo "unexpected shared monitor dispatcher scheduler still present" >&2
241+
if grep -Fq 'monitor_uri="${service_url}/monitor-dispatch"' "$workflow_file"; then
242+
echo "unexpected shared monitor dispatcher creation still present" >&2
239243
exit 1
240244
fi
241245

0 commit comments

Comments
 (0)