From f7775a00a0bd7d3a94553c5119f2c4a3619b92ed Mon Sep 17 00:00:00 2001 From: Adam Shiervani Date: Mon, 27 Apr 2026 19:05:39 +0200 Subject: [PATCH] fix: skip incompatible defaults and parallelize stable DB lookups getDefaultRelease previously picked the newest 100%-rolled-out release without checking SKU compatibility. If that release lacked a compatible artifact, the request 404'd downstream even though older 100%-rolled-out releases had valid binaries for the SKU. It now filters to releases that actually ship a compatible artifact before selecting the latest, falling back to a 404 only when no compatible default exists. The four DB lookups in the stable rollout-aware path are independent; run them concurrently so background-check latency drops from ~4 round trips to ~1. --- src/releases.ts | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/releases.ts b/src/releases.ts index 35b0b7b..be53836 100644 --- a/src/releases.ts +++ b/src/releases.ts @@ -499,14 +499,23 @@ async function getDefaultRelease(type: ReleaseType, sku: string): Promise r.artifacts.length > 0); + + if (compatibleReleases.length === 0) { + throw new NotFoundError( + `No default ${type} release available for SKU "${sku}"`, + ); + } + const latestVersion = semver.maxSatisfying( - rolledOutReleases.map(r => r.version), + compatibleReleases.map(r => r.version), "*", ) as string; - // Get the release with the latest default version - const latestDefaultRelease = rolledOutReleases.find(r => r.version === latestVersion); + const latestDefaultRelease = compatibleReleases.find(r => r.version === latestVersion); if (!latestDefaultRelease) { throw new InternalServerError( @@ -598,10 +607,13 @@ export async function Retrieve(req: Request, res: Response) { return res.json(responseJson); } - const latestAppRelease = await getLatestRelease("app", query.sku); - const latestSystemRelease = await getLatestRelease("system", query.sku); - const defaultAppRelease = await getDefaultRelease("app", query.sku); - const defaultSystemRelease = await getDefaultRelease("system", query.sku); + const [latestAppRelease, latestSystemRelease, defaultAppRelease, defaultSystemRelease] = + await Promise.all([ + getLatestRelease("app", query.sku), + getLatestRelease("system", query.sku), + getDefaultRelease("app", query.sku), + getDefaultRelease("system", query.sku), + ]); // Background update checks follow rollout percentages so new releases roll // out gradually. Devices outside the bucket fall back to the default (the