{"record":{"id":"318c6daacd338006","repo":"nautechsystems/nautilus_trader","slug":"failed-to-start-hyperliquid-execution-session-gene","errorCode":null,"errorMessage":"Failed to start Hyperliquid execution session generation: {e}","messagePattern":"Failed to start Hyperliquid execution session generation: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/hyperliquid/src/execution.rs","lineNumber":1692,"sourceCode":"\n        Ok(())\n    }\n\n    async fn connect(&mut self) -> anyhow::Result<()> {\n        if self.core.is_connected() && self.pending_tasks.is_open() && self.session_tasks.is_open()\n        {\n            return Ok(());\n        }\n\n        log::info!(\"Connecting Hyperliquid execution client\");\n\n        if !self.pending_tasks.is_open() || !self.session_tasks.is_open() {\n            self.teardown_partial_connect().await?;\n            self.pending_tasks\n                .start_generation()\n                .map_err(|e| anyhow::anyhow!(\"Failed to start Hyperliquid task generation: {e}\"))?;\n            self.session_tasks.start_generation().map_err(|e| {\n                anyhow::anyhow!(\"Failed to start Hyperliquid execution session generation: {e}\")\n            })?;\n        }\n        let ws_client = self.ws_client.clone();\n        let setup_guard =\n            TaskGroupGuard::new(&[&self.session_tasks, &self.pending_tasks], move || {\n                ws_client.begin_shutdown();\n            });\n\n        self.ensure_instruments_initialized_async().await?;\n        let ready_bracket_parents = self.restore_staged_brackets();\n\n        if let Err(e) = self.start_ws_stream().await {\n            if let Err(teardown_error) = self.teardown_partial_connect().await {\n                return Err(e.context(format!(\n                    \"Hyperliquid execution startup teardown failed: {teardown_error}\"\n                )));\n            }\n            return Err(e);","sourceCodeStart":1674,"sourceCodeEnd":1710,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/hyperliquid/src/execution.rs#L1674-L1710","documentation":"Raised in connect() when start_generation() on the session-tasks TaskGroup fails, meaning a new generation of long-lived session tasks (e.g. the WebSocket stream session) could not be started. This happens immediately after the pending-tasks generation started successfully, so the connect fails as a whole.","triggerScenarios":"connect() calls session_tasks.start_generation() after pending_tasks.start_generation() succeeded; failure occurs if the session group is still closed/shutting down from a previous generation despite teardown_partial_connect().","commonSituations":"Back-to-back reconnects outpacing session-task shutdown; a leaked session task from an earlier failed connect keeping the group closed; event-loop starvation delaying generation setup.","solutions":["Add backoff before retrying connect so the session group fully resets","Verify the previous session generation terminated (check for 'Failed to terminate ... session tasks' errors in logs)","Investigate the wrapped TaskGroup error for the exact state problem","Restart the node/client if the group remains stuck closed"],"exampleFix":"null","handlingStrategy":"retry","validationCode":"assert!(client.session_tasks.is_open());","typeGuard":null,"tryCatchPattern":"if let Err(e) = client.connect().await { if e.to_string().contains(\"session generation\") { sleep(backoff).await; retry(); } }","preventionTips":["Apply backoff between reconnect attempts","Ensure session shutdown fully completes before a new connect","Check for leaked session tasks from earlier failed connects","Keep event-loop load low during reconnect windows"],"tags":["rust","reconnect","task-group","lifecycle"],"backgroundTag":"invalid-state-transition","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}