Skip to content

K2GO-555 fix(deploy): byte-weighted rootfs extract progress and ETA - #747

Merged
luisguzman-adfa merged 5 commits into
mainfrom
fix/K2GO-555-byte-weighted-extract-eta
Nov 6, 2026
Merged

luisguzman-adfa merged 5 commits into
mainfrom
fix/K2GO-555-byte-weighted-extract-eta

Conversation

@luisguzman-adfa

@luisguzman-adfa luisguzman-adfa commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

What changes

  • tools/rebuild-dashboard.sh: on the staging install, reuse the live better_sqlite3.node when better-sqlite3 is unchanged, instead of a full node-gyp recompile. Any mismatch (version change, binary does not load, or a new native dep) falls back to compiling from source.
  • Replace the staged smoke gate's blind sleep 3 with a poll up to 45 s (K2GO_REBUILD_STAGE_TIMEOUT), shared with the live verify through one poll_smoke helper.
  • Add a dry-run mode (K2GO_REBUILD_DRYRUN=1) that stops after the staged build and smoke, with no live promote.

Why

  • On a low-RAM 32-bit box the node-gyp recompile of better-sqlite3 took about 20 min and risked OOM. The binary is unchanged across most updates, so reuse skips it.
  • A cold second node on that hardware needs about 11 s to answer. sleep 3 false-failed the staged smoke and aborted the update. The poll absorbs the boot time.
  • Correctness does not depend on reuse: any miss falls back to the prior full install, and a bad staged build is caught by the smoke before promote.

Verifications

  • End-to-end on the farm Q8 (Android 12, armeabi-v7a, 1.4 GB RAM): reuse hit (better-sqlite3 12.11.1 unchanged, reused binary loads OK, recompile skipped); the staged node answered at about 14 s (the old sleep 3 would have false-failed); promote, restart and live verify passed. The reuse path finished in about 4.5 min; the recompile it replaces is about 20 min on this hardware.
  • Blue-green rollback path unchanged: a failed staged smoke leaves the live dashboard untouched.

Notes

  • Tool-only change: tools/rebuild-dashboard.sh is the updater, not the dash-node source, so there is no dash-node version bump or changelog entry.

…extract

Parse a GNU tar -tv line into member path + byte size. The path can contain spaces, so the parse anchors on the fixed date/time; link targets are stripped so the path matches what the extract pass prints. Dirs/symlinks/hardlinks count 0 bytes. Pure + unit-tested (samples verbatim from the bundled libtar 1.35 on device). First piece of byte-weighted rootfs extract progress.
… for regular files only

Device nodes show major,minor in the size column; the path-traversal and
rootfs guards read every member, so the parser must not drop a member whose
size field is not a byte count. Capture the path for all member types; parse a
byte size only for a regular file.
…r rate

A rate over the last window, not the cumulative average from the start. The
cumulative average reads too low after a slow start and lags a recovery, which
is what made the rootfs extract ETA read absurd minutes. Content-exchange and
the extract pass will share this one pure, unit-tested helper.
List with tar -tv and keep each member size, so the extract bar and ETA are
weighted by uncompressed bytes written, not file count. Members vary hugely in
size, so the file-count ETA climbed to absurd values mid-extract on a slow
phone and a healthy install looked hung. The extract rate is a trailing window,
not the cumulative average from the pass start. Byte weighting degrades to file
count when the listing yields no sizes, so the bar can never stall at zero.

Ripple: the traversal and rootfs guards now get parsed paths, not the raw tar
-t lines they used before; the rootfs validator extracts a probe member by that
path, so it must be the clean path. VERIFY still counts compressed bytes read.
…vadoc

Review pass: onProgress done/total are bytes in byteMode (advisory; consumers
use percent); use ':' not '--' per CLAUDE.md.
@luisguzman-adfa luisguzman-adfa changed the title K2GO-557 fix(dashboard): reuse native better-sqlite3 and poll staged health on low-RAM update K2GO-555 fix(deploy): byte-weighted rootfs extract progress and ETA Nov 6, 2026
@luisguzman-adfa
luisguzman-adfa merged commit f1084b0 into main Nov 6, 2026
3 checks passed
@luisguzman-adfa
luisguzman-adfa deleted the fix/K2GO-555-byte-weighted-extract-eta branch November 6, 2026 17:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant