fix(apple-runner): fence prep spawns after teardown or last-waiter cancellation
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 42/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- node.js, typescript
- Domaine
- mobile-dev, testing
Piste de recherche
Start by reading PR #3193 and trace the runner start, preparation-spawn, teardown, and waiter-cancellation paths it changed; the issue does not name source files or tests. Then identify where the session lock is held during close and how retries are admitted. Done means the specified cancellation controls and live close-during-build route show no respawn, close completes, owned children are cleaned up, and the focused tests and affected gate pass.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Purpose
A runner start must stop creating preparation processes after its execution host is torn down or its last interested waiter cancels. Stopping the currently registered children once is insufficient.
PR #3193 measured this during close with a cold build: close killed the first build-for-testing before obtaining the runner session lock, but the detached prewarm health retry spawned a second build while close waited for that lock. Close reached its timeout; the second build remained until daemon stop. Original evidence: https://github.com/callstack/agent-device/pull/3193#issuecomment-5981188182. This observation is at b6cdd3c49, not a fresh reproduction on main.
Required behavior
- The in-flight runner start owns whether further preparation is admitted. Device teardown closes that admission before stopping current prep children or waiting for the session lock.
- Canceling the final interested waiter closes admission for that start. Canceling one waiter must preserve work still needed by another.
- Check admission at every preparation spawn, including retries after a killed build. A check only when registering an already spawned child is too late.
- A later independent open may create a fresh start; a retired start cannot resume and publish a runner into it.
- Prefer one start-owned cancellation/admission mechanism. Reassess whether the request-owner prep filter introduced by #3193 remains necessary once the reachable callers and waiter semantics are covered.
Done when
- A control holds the runner session lock during a cold build, begins non-retained close, and attempts a retry after the first child is stopped. No second prep child is spawned; close settles without waiting for a replacement build.
- Controls cover cancellation before the first prep spawn, last-waiter cancellation, and another still-interested waiter.
- Repeat the live close-during-build route with evidence of no respawn, completed close, and cleanup. Retain the original evidence attribution.
- Focused tests and the affected gate pass; process signaling remains scoped to owned children.
Depends on #3193. This is start admission, not another host-wide timeout sweep or a shorter join timeout.
- Langage dominant
- TypeScript
- Étoiles
- 4.9k
- Forks
- 328
- Merge moyen
- 11 h 51 min
- PR mergées (30 j)
- 535
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de callstack/agent-device
-
settings clear-app-state fails with ENOENT … scandir '(null)' for iOS system apps such as SettingsOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 80/100
callstack/agent-device#3305 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
callstack/agent-device#3296 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
callstack/agent-device#1869 ·
Les mainteneurs répondent en général sous 1 jour
-
needs-triage refactor
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
callstack/agent-device#3311 ·
Les mainteneurs répondent en général sous 1 jour
-
refactor(provider-webdriver): ship AWS Device Farm as the `@agent-device/aws-device-farm` pluginOuverteneeds-triage refactor
Difficulté 4/5 3-5 jours Accessibilité débutants 54/100
callstack/agent-device#3310 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de callstack/agent-device
Issues similaires
-
Tenant
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
MTES-MCT/Dossier-Facile-Frontend#2061 ·
Les mainteneurs répondent en général sous 1 jour
-
area:frontend
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
interledger/publisher-tools#905 ·
Les mainteneurs répondent en général sous 1 jour
-
Add: Cbeebies PL SDOuverteapproved check:passed streams:add
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
iptv-org/iptv#54525 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
DB-plane provider_chat_options.* is accepted by config set but never merged into the loaded configPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
area:web
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
praetorianer777/GoTome#178 ·
Les mainteneurs répondent en général sous 1 jour