diff --git a/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md b/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md index 90c605a..e95e0b9 100644 --- a/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md +++ b/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md @@ -116,6 +116,9 @@ The same change also makes the forge itself the release authority: release tags - Do not destroy Namespace Linux runners until `nsc describe` shows a real terminal container state or tombstone. Empty describe payloads mean the environment is still starting, not that the one-job runner has finished. +- Keep the autoscaler-to-dispatcher HTTP timeout longer than the runner TTL. + Dispatch requests intentionally block until the one-job runner exits, so short + HTTP client timeouts cancel macOS provisioning mid-bootstrap. - Run forge Namespace services with the repo-owned `nsc` package and keep it current with the token format expected by Namespace. `nsc 0.0.520` is the first required baseline for revokable token-file auth. The dispatcher and diff --git a/secrets/infra/forgejo-nsc-autoscaler-config.age b/secrets/infra/forgejo-nsc-autoscaler-config.age index 8e2caaf..13ec114 100644 Binary files a/secrets/infra/forgejo-nsc-autoscaler-config.age and b/secrets/infra/forgejo-nsc-autoscaler-config.age differ diff --git a/secrets/infra/forgejo-nsc-dispatcher-config.age b/secrets/infra/forgejo-nsc-dispatcher-config.age index c7a9113..fe55233 100644 Binary files a/secrets/infra/forgejo-nsc-dispatcher-config.age and b/secrets/infra/forgejo-nsc-dispatcher-config.age differ diff --git a/secrets/infra/forgejo-nsc-token.age b/secrets/infra/forgejo-nsc-token.age index 0682b2a..c018ce4 100644 Binary files a/secrets/infra/forgejo-nsc-token.age and b/secrets/infra/forgejo-nsc-token.age differ diff --git a/services/forgejo-nsc/autoscaler.example.yaml b/services/forgejo-nsc/autoscaler.example.yaml index cc60368..35ba07a 100644 --- a/services/forgejo-nsc/autoscaler.example.yaml +++ b/services/forgejo-nsc/autoscaler.example.yaml @@ -1,6 +1,7 @@ listen: ":8090" dispatcher: url: "http://localhost:8080" + timeout: "2h" instances: - name: burrow diff --git a/services/forgejo-nsc/deploy/autoscaler.yaml b/services/forgejo-nsc/deploy/autoscaler.yaml index febc287..cd39e05 100644 --- a/services/forgejo-nsc/deploy/autoscaler.yaml +++ b/services/forgejo-nsc/deploy/autoscaler.yaml @@ -2,6 +2,7 @@ listen: "127.0.0.1:8090" dispatcher: url: "http://127.0.0.1:8080" + timeout: "2h" instances: - name: burrow diff --git a/services/forgejo-nsc/internal/autoscaler/config.go b/services/forgejo-nsc/internal/autoscaler/config.go index 7603e67..d252664 100644 --- a/services/forgejo-nsc/internal/autoscaler/config.go +++ b/services/forgejo-nsc/internal/autoscaler/config.go @@ -70,7 +70,7 @@ func LoadConfig(path string) (Config, error) { return Config{}, fmt.Errorf("dispatcher.url is required") } if cfg.Dispatcher.Timeout.Duration == 0 { - cfg.Dispatcher.Timeout = config.Duration{Duration: 15 * time.Second} + cfg.Dispatcher.Timeout = config.Duration{Duration: 2 * time.Hour} } if len(cfg.Instances) == 0 { return Config{}, fmt.Errorf("at least one instance must be configured")