From e1bab4853a2a488728288a05d76d0027f4de93b8 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 21 Jun 2026 23:57:35 +0000 Subject: [PATCH] fix: configure agentrun backend retry policy --- config/agentrun.yaml | 8 ++++++++ scripts/src/agentrun-lanes.ts | 14 ++++++++++++++ scripts/src/agentrun-manifests.ts | 3 +++ 3 files changed, 25 insertions(+) diff --git a/config/agentrun.yaml b/config/agentrun.yaml index b1f574aa..1c07f94a 100644 --- a/config/agentrun.yaml +++ b/config/agentrun.yaml @@ -152,6 +152,10 @@ controlPlane: jobNamePrefix: agentrun-v01-runner idleTimeoutMs: 600000 missingTerminalAfterToolTimeoutMs: 60000 + backendRetry: + maxAttempts: 1 + initialBackoffMs: 1000 + maxBackoffMs: 30000 apiKeySecretRef: name: agentrun-v01-api-key key: HWLAB_API_KEY @@ -327,6 +331,10 @@ controlPlane: jobNamePrefix: agentrun-v02-runner idleTimeoutMs: 172800000 missingTerminalAfterToolTimeoutMs: 180000 + backendRetry: + maxAttempts: 5 + initialBackoffMs: 1000 + maxBackoffMs: 30000 apiKeySecretRef: name: agentrun-v02-api-key key: HWLAB_API_KEY diff --git a/scripts/src/agentrun-lanes.ts b/scripts/src/agentrun-lanes.ts index 9751c04b..3ec3cd0c 100644 --- a/scripts/src/agentrun-lanes.ts +++ b/scripts/src/agentrun-lanes.ts @@ -105,6 +105,11 @@ export interface AgentRunLaneSpec { readonly jobNamePrefix: string; readonly idleTimeoutMs: number; readonly missingTerminalAfterToolTimeoutMs: number; + readonly backendRetry: { + readonly maxAttempts: number; + readonly initialBackoffMs: number; + readonly maxBackoffMs: number; + }; readonly apiKeySecretRef: { readonly name: string; readonly key: string }; readonly egressProxyUrl: string | null; readonly noProxyExtra: readonly string[]; @@ -543,6 +548,7 @@ function parseDeployment(input: Record, path: string): AgentRun jobNamePrefix: stringField(runner, "jobNamePrefix", `${path}.runner`), idleTimeoutMs: positiveIntegerField(runner, "idleTimeoutMs", `${path}.runner`), missingTerminalAfterToolTimeoutMs: positiveIntegerField(runner, "missingTerminalAfterToolTimeoutMs", `${path}.runner`), + backendRetry: parseRunnerBackendRetry(recordField(runner, "backendRetry", `${path}.runner`), `${path}.runner.backendRetry`), apiKeySecretRef: parseSecretRef(recordField(runner, "apiKeySecretRef", `${path}.runner`), `${path}.runner.apiKeySecretRef`), egressProxyUrl: optionalStringField(runner, "egressProxyUrl", `${path}.runner`) ?? null, noProxyExtra: optionalStringArrayField(runner, "noProxyExtra", `${path}.runner`), @@ -573,6 +579,14 @@ function parseRunnerRetention(input: Record, path: string): Age }; } +function parseRunnerBackendRetry(input: Record, path: string): AgentRunLaneSpec["deployment"]["runner"]["backendRetry"] { + return { + maxAttempts: positiveIntegerField(input, "maxAttempts", path), + initialBackoffMs: positiveIntegerField(input, "initialBackoffMs", path), + maxBackoffMs: positiveIntegerField(input, "maxBackoffMs", path), + }; +} + function positiveIntegerField(input: Record, key: string, path: string): number { const value = integerField(input, key, path); if (value <= 0) throw new Error(`${path}.${key} must be a positive integer`); diff --git a/scripts/src/agentrun-manifests.ts b/scripts/src/agentrun-manifests.ts index e464a6ac..02ebef71 100644 --- a/scripts/src/agentrun-manifests.ts +++ b/scripts/src/agentrun-manifests.ts @@ -440,6 +440,9 @@ function managerEnv(spec: AgentRunLaneSpec, sourceCommit: string, imageRef: stri { name: "AGENTRUN_RUNNER_JOB_NAME_PREFIX", value: spec.deployment.runner.jobNamePrefix }, { name: "AGENTRUN_RUNNER_IDLE_TIMEOUT_MS", value: String(spec.deployment.runner.idleTimeoutMs) }, { name: "AGENTRUN_RUNNER_MISSING_TERMINAL_AFTER_TOOL_TIMEOUT_MS", value: String(spec.deployment.runner.missingTerminalAfterToolTimeoutMs) }, + { name: "AGENTRUN_BACKEND_RETRY_MAX_ATTEMPTS", value: String(spec.deployment.runner.backendRetry.maxAttempts) }, + { name: "AGENTRUN_BACKEND_RETRY_INITIAL_BACKOFF_MS", value: String(spec.deployment.runner.backendRetry.initialBackoffMs) }, + { name: "AGENTRUN_BACKEND_RETRY_MAX_BACKOFF_MS", value: String(spec.deployment.runner.backendRetry.maxBackoffMs) }, { name: "AGENTRUN_RUNNER_RETENTION_MAX_RUNNERS", value: String(spec.deployment.runner.retention.maxRunners) }, { name: "AGENTRUN_RUNNER_RETENTION_CLEANUP_ORDER", value: spec.deployment.runner.retention.cleanupOrder }, { name: "AGENTRUN_RUNNER_RETENTION_ACTIVE_HEARTBEAT_MAX_AGE_MS", value: String(spec.deployment.runner.retention.activeHeartbeatMaxAgeMs) },