fix: reconnect engine websocket and add keepalive ping on idle - #159
Merged
Conversation
…idle-backend-disconnect
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes an issue where leaving the application idle caused the Rust engine's WebSocket bridge to Neutralino to silently drop, leaving the frontend UI reactive but unable to receive responses for any backend/Kubernetes actions.
Changes
PING_INTERVAL_SECS = 30) usingtokio::select!in the main message loop incore/engine/src/main.rsandcore/engine/src/ipc/bridge.rsto keep TCP connections alive during idle periods.main.rsinto an outer'reconnect: loopwith exponential backoff (1s -> 2s -> 4s -> ... max 30s) to automatically reconnect if the WebSocket connection drops or errors.broadcast_engine_readyto re-emitEngineConnected,ClustersUpdated, andActiveClusterChangedevents across reconnects.restart_watchersto cancel stale background watchers and respawn fresh resource watchers/metric pollers with the new WebSocket writer upon reconnect.main.rs.Files Changed
core/engine/src/ipc/bridge.rsPING_INTERVAL_SECSconstantcore/engine/src/main.rsTesting
cargo checkandcargo testincore(26/26 unit tests passed)npm run type-check(vue-tsc --build) passed with 0 errorsnpm run lint(eslint) passed with 0 warnings/errorscargo build --releaseandnpm run buildproduction builds succeededRelated Artifacts
.agents/PRPs/plans/completed/fix-idle-backend-disconnect.plan.md.agents/PRPs/reports/fix-idle-backend-disconnect-report.md