Skip to content

[1.4] Timeout extension pulls from last Docker progress - #4341

Draft
joaoantoniocardoso wants to merge 1 commit into
bluerobotics:1.4-devfrom
joaoantoniocardoso:fix/1.4/ext-pull-idle-timeout
Draft

[1.4] Timeout extension pulls from last Docker progress#4341
joaoantoniocardoso wants to merge 1 commit into
bluerobotics:1.4-devfrom
joaoantoniocardoso:fix/1.4/ext-pull-idle-timeout

Conversation

@joaoantoniocardoso

@joaoantoniocardoso joaoantoniocardoso commented Aug 27, 2026

Copy link
Copy Markdown
Member

Fixes #3078.

Axios timeout: 120000 on extension update is a wall-clock deadline from request start. A large or slow Docker pull still streams progress, but the UI aborts at two minutes with timeout of 120000ms exceeded (the install path had no timeout at all).

Cancel only after 120s with no new download bytes. install() uses the same idle watchdog so a hung pull does not sit forever, while a long pull that is still moving is left alone.

Test plan

DUT 192.168.0.124 (bluerobotics/blueos-core:1.4-dev), management eth0. Local frontend (BLUEOS_ADDRESS=http://192.168.0.124/) for the UI path.

  • Repro: POST /kraken/v1.0/extension/update_to_version of bluerobotics.jupyter:0.2.0 with a 120s total client timeout while the stream was still delivering data (timeout of 120000ms exceeded, last chunk at ~128s)
  • After the change: idle client on the same endpoint survived 142s with data still arriving (idle watchdog did not fire)
  • Local frontend install of Cockpit Lite v1.19.0-beta.9 completed; no timeout banner
  • Kraken lifecycle bluerobotics.cockpit:v1.19.0-beta.9: 177 passed, 0 failed; DUT restored to blueos-docs + major_tom

Leftover (not this PR): if Docker goes silent for >120s after the last pull line (e.g. deleting leftover tags), the UI can still idle-cancel while the backend finishes. Heartbeats on the kraken stream would cover that.

@joaoantoniocardoso
joaoantoniocardoso marked this pull request as ready for review August 27, 2026 16:28
@joaoantoniocardoso
joaoantoniocardoso marked this pull request as draft August 27, 2026 16:28
@github-actions

Copy link
Copy Markdown

Automated PR Review

0. Summary

  • Verdict: LGTM :shipit:

Replaces the axios wall-clock timeout: 120000 on the extension update path (and the previously-unbounded install path) with a shared idle watchdog that cancels only after 120s without a new onDownloadProgress chunk. Small, self-contained TS-only change in core/frontend/src/views/ExtensionManagerView.vue; the helper is reused by both update() and install() and cleaned up in the finally block via watchdog.stop(). axios and back_axios are already imported and the token API used (axios.CancelToken.source()) matches the version pinned in core/frontend/package.json (axios ^0.21.1).

No further comments, nice job 👍

Generated by PR Review Bot. This is advisory, a human reviewer must still approve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant