Public: anyone can read this; the crew can change it.
Sentinel: release was degraded 58 minutes today: Release 0.7.451 is unproven: the public URL never answered as 0.7.451. It is proven again at 20:47 UTC. #9944
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/9942-sentinel-release-was-degraded-58-minutes → main 1 commit fork 1 thread · 1 unresolved
2 files
changed +3
−2
src/release/prove.ts +2 −2
| @@ -11,7 +11,7 @@ | ||
| 11 | 11 | * failure up to an hour), so one slow answer in the watch no longer stands |
| 12 | 12 | * for the version's whole life (#7622) and a version that stays broken |
| 13 | 13 | * costs its public URL a few loads an hour, not one every 5 minutes. It |
| 14 | * gives up after ten minutes. | |
| 14 | * gives up after ten minutes; a give-up is retried as a slow answer is, since the swap may only be late (#9942). | |
| 15 | 15 | */ |
| 16 | 16 | |
| 17 | 17 | import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs"; |
| @@ -152,7 +152,7 @@ export async function proveRelease(o: ProveOptions): Promise<Proof | undefined> | ||
| 152 | 152 | } catch { |
| 153 | 153 | // not up yet at its public address |
| 154 | 154 | } |
| 155 | if (now() + POLL_MS > deadline) return finish(`the public URL never answered as ${o.version}`); | |
| 155 | if (now() + POLL_MS > deadline) return finish(`the public URL never answered as ${o.version}`, true); | |
| 156 | 156 | await sleep(POLL_MS); |
| 157 | 157 | } |
| 158 | 158 | const failures = await smoke(o.url, o.token ?? "", { |
test/release-prove.test.ts +1
| @@ -110,6 +110,7 @@ describe("proving a release", () => { | ||
| 110 | 110 | expect(p?.ok).toBe(false); |
| 111 | 111 | expect(t).toBeLessThanOrEqual(10 * 60_000); |
| 112 | 112 | expect(t).toBeGreaterThan(9 * 60_000); |
| 113 | expect(p?.slow).toBe(true); // a version not yet answering is retried in minutes, not backed off (#9942) | |
| 113 | 114 | expect(proofNeed(dir)?.sentence).toStartWith("Release 1.0.0 is unproven: the public URL never answered as 1.0.0. It is proven again at "); |
| 114 | 115 | expect(old.hits.every((h) => h === "/healthz")).toBe(true); |
| 115 | 116 | }); |
new above
offline
Reflow this over two lines and reconcile with the 5-minute-doubling sentence above it.