(1/4) Add a TTL contract and sweep loop for suspended environments
What does this MR do?
Adds the runtime_environment_ttl runner setting, the runtime_environment_unavailable failure reason, and a loop that asks each executor provider to sweep expired suspended environments at start and every 10 minutes. No provider implements the sweep yet, so this changes nothing on its own.
Why was this MR needed?
The Kubernetes and Docker TTL work both build on it, as the Runner TTL design requires.
What's the best way to test this MR?
go test -race ./common/ ./commands/
What are the relevant issue numbers?
The GitLab side adds the runtime_environment_unavailable failure reason:
Related merge requests
Kubernetes stack:
- (K8s 2/4) Refuse to resume expired suspended Ku... (!7641 - merged) • Ashvin Sharma • 19.6
- (K8s 3/4) Sweep expired suspended Kubernetes en... (!7642 - merged) • Ashvin Sharma • 19.6
- (K8s 4/4) Keep suspended Kubernetes environment... (!7643 - merged) • Ashvin Sharma • 19.6
Docker stack:
- (Docker 2/5) Label suspended docker-autoscaler ... (!7644 - merged) • Ashvin Sharma • 19.6
- (Docker 3/5) Refuse to resume expired or foreig... (!7645 - merged) • Ashvin Sharma • 19.6
- (Docker 4/5) Release expired docker-autoscaler ... (!7646 - merged) • Ashvin Sharma • 19.6
- (Docker 5/5) Sweep expired suspended docker-aut... (!7667) • Ashvin Sharma • 19.6
Instance executor (stacked on the Docker stack):
Taskscaler stack (slot expiry; (Docker 5/5) Sweep expired suspended docker-aut... (!7667) needs up to gitlab-org/fleeting/taskscaler!123 (merged), (Instance 6/6) Expire suspended instance execut... (!7668) needs gitlab-org/fleeting/taskscaler!118 (merged)):
- (1/7) Give acquired slots an optional expiry (gitlab-org/fleeting/taskscaler!117 - merged) • Ashvin Sharma
- (2/7) Let an instance mark a suspended slot exp... (gitlab-org/fleeting/taskscaler!119 - merged) • Ashvin Sharma
- (3/7) Expire suspended slots past their expiry (gitlab-org/fleeting/taskscaler!120 - merged) • Ashvin Sharma
- (4/7) Expose connect info for an expired slot's... (gitlab-org/fleeting/taskscaler!121 - merged) • Ashvin Sharma
- (5/7) Free expired slots once their workload is... (gitlab-org/fleeting/taskscaler!122 - merged) • Ashvin Sharma
- (6/7) Remove stopped instances whose slots have... (gitlab-org/fleeting/taskscaler!123 - merged) • Ashvin Sharma
- (7/7) Refuse to resume a suspended slot past it... (gitlab-org/fleeting/taskscaler!118 - merged) • Ashvin Sharma