{"record":{"id":"85ab0bfd9fef583f","repo":"nautechsystems/nautilus_trader","slug":"failed-to-start-bybit-session-generation-e","errorCode":null,"errorMessage":"Failed to start Bybit session generation: {e}","messagePattern":"Failed to start Bybit session generation: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/bybit/src/execution.rs","lineNumber":745,"sourceCode":"            return Ok(());\n        }\n\n        if !self.pending_tasks.is_open() || !self.session_tasks.is_open() {\n            self.teardown_partial_connect().await?;\n        }\n\n        if !self.pending_tasks.is_open() {\n            self.await_pending_tasks().await?;\n            self.pending_tasks\n                .start_generation()\n                .map_err(|e| anyhow::anyhow!(\"Failed to start Bybit task generation: {e}\"))?;\n        }\n\n        if !self.session_tasks.is_open() {\n            self.await_session_tasks().await?;\n            self.session_tasks\n                .start_generation()\n                .map_err(|e| anyhow::anyhow!(\"Failed to start Bybit session generation: {e}\"))?;\n        }\n        let http_client = self.http_client.clone();\n        let ws_private = self.ws_private.clone();\n        let ws_trade = self.ws_trade.clone();\n        let setup_guard =\n            TaskGroupGuard::new(&[&self.session_tasks, &self.pending_tasks], move || {\n                http_client.cancel_all_requests();\n                ws_private.begin_shutdown();\n                ws_trade.begin_shutdown();\n            });\n\n        let connect_result: anyhow::Result<()> = async {\n            // Reset after a prior disconnect so REST calls are not short-circuited\n            self.http_client.reset_cancellation_token();\n\n            let product_types = self.product_types();\n\n            if !self.core.instruments_initialized() {","sourceCodeStart":727,"sourceCodeEnd":763,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/bybit/src/execution.rs#L727-L763","documentation":"connect() similarly restarts session task generation (WebSocket session workers). A failure starting that generation is wrapped with this message and aborts connect after pending tasks already succeeded.","triggerScenarios":"Calling connect when session_tasks generation is closed and start_generation() errors, e.g. after runtime shutdown or corrupted task-group state.","commonSituations":"Reconnect flows after abrupt network loss or prior disconnect; reusing a client across different tokio runtimes.","solutions":["Read the wrapped inner error for the root cause","Instantiate a new execution client rather than reconnecting a dead one","Keep connect/disconnect on the same runtime that created the tasks","Verify WebSocket endpoints/credentials if the session setup itself fails"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match client.connect().await {\n    Ok(()) => {}\n    Err(e) if e.to_string().contains(\"session generation\") => {\n        tracing::error!(\"session generation failed: {e}; recreating client\");\n        client = BybitExecutionClient::new(/* fresh deps */).await?;\n        client.connect().await?;\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Keep WebSocket session tasks tied to a single long-lived runtime","Verify credentials and endpoints before connect to avoid session setup churn","Alert/reconnect with exponential backoff on repeated generation failures"],"tags":["bybit","connect","websocket","task-management"],"backgroundTag":"internal-invariant-violation","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"}