jlcodes99/cockpit-tools · warning
[App] Silent update download failed, retrying (${retryIndex}
Error message
[App] Silent update download failed, retrying (${retryIndex}/${totalRetries}) in ${delayMs}ms: What it means
During silent auto-update, after the installer download fails, App.tsx retries with an exponential delay (delayMs) up to totalRetries times. Each failed attempt logs this warning with the retry counters and the underlying error, and appends a Chinese entry to the update log via writeUpdateLog. It is an expected, self-healing transient — only the final attempt failing escalates to the user.
Source
Thrown at src/App.tsx:2487
} catch (error) {
if (candidate) {
await candidate.close().catch(() => {});
}
throw error;
}
},
{
delaysMs: UPDATE_DOWNLOAD_RETRY_DELAYS_MS,
shouldRetry: isRetryableUpdaterError,
onRetry: ({ retryIndex, totalRetries, delayMs, error }) => {
const compactError = sanitizeUpdaterErrorMessage(error);
setUpdateRetryStatus(
t('update_notification.downloadRetrying', {
attempt: retryIndex,
total: totalRetries,
}),
);
console.warn(
`[App] Silent update download failed, retrying (${retryIndex}/${totalRetries}) in ${delayMs}ms:`,
error,
);
writeUpdateLog(
'warn',
`静默更新下载失败,准备重试(${retryIndex}/${totalRetries}),delay=${delayMs}ms,error=${compactError}`,
);
setUpdateAction((prev) => {
if (prev.state !== 'downloading') {
return prev;
}
return {
...prev,
progress: 0,
};
});
},
},View on GitHub (pinned to 1ed8b77992)
Solutions
- Wait — the updater retries automatically; check the update log for the final attempt result.
- Verify network access to the update server endpoint (proxy/firewall allowlist it).
- Read `error` and the update-log entry for the HTTP status (404 = bad release manifest, 5xx = server side).
- If all retries fail, download/install the update manually from the releases page.
Example fix
null
Defensive patterns
Strategy: retry
Validate before calling
// preflight connectivity check before starting silent update
const res = await fetch(updateManifestUrl, { method: 'HEAD' });
if (!res.ok) {
writeUpdateLog('warn', `update server unreachable: ${res.status}`);
return;
}
Type guard
function isUpdaterError(e: unknown): e is { message: string } {
return e instanceof Error || (!!e && typeof (e as any).message === 'string');
}
Try / catch
for (let retryIndex = 1; retryIndex <= totalRetries; retryIndex++) {
try {
await downloadAndInstall();
break;
} catch (error) {
const delayMs = baseDelay * 2 ** (retryIndex - 1);
console.warn(`[App] Silent update download failed, retrying (${retryIndex}/${totalRetries}) in ${delayMs}ms:`, error);
if (retryIndex === totalRetries) notifyUserOfUpdateFailure(error);
await sleep(delayMs);
}
} Prevention
- Allowlist the update server in corporate proxy/firewall settings
- Use exponential backoff with a final user-visible failure notification
- Log every attempt to the update log for post-mortem diagnosis
- Offer a manual 'download update' link as the ultimate fallback
When it happens
Trigger: Tauri updater's download of the release bundle fails mid-attempt: network drop, proxy blocking the update server, CDN 5xx, corrupted partial download, or signature verification failure on the artifact.
Common situations: Corporate proxy/firewall blocking the update host, flaky Wi-Fi, GitHub releases rate limiting, expired TLS interception certs, or a bad release published upstream.
Related errors
- [App] Silent update check failed, retrying (${retryIndex}/${
- [App] Background manual update check failed, retrying (${ret
- [StartupPerf][UpdaterCommand] update_last_check_time failed
- [StartupPerf][UpdaterCommand] get_update_settings failed in
- [StartupPerf][UpdaterCommand] check_version_jump failed in {
AI-assisted analysis of jlcodes99/cockpit-tools@1ed8b77992 (2026-09-05).
Data as JSON: /api/errors/8e18d2de40a36d5b.
Report an issue: GitHub.