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

  1. Wait — the updater retries automatically; check the update log for the final attempt result.
  2. Verify network access to the update server endpoint (proxy/firewall allowlist it).
  3. Read `error` and the update-log entry for the HTTP status (404 = bad release manifest, 5xx = server side).
  4. 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

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


AI-assisted analysis of jlcodes99/cockpit-tools@1ed8b77992 (2026-09-05). Data as JSON: /api/errors/8e18d2de40a36d5b. Report an issue: GitHub.