{"record":{"id":"b930345fe47dddbf","repo":"nautechsystems/nautilus_trader","slug":"startup-reconciliation-timeout-reached-while-reque","errorCode":null,"errorMessage":"Startup reconciliation timeout reached while requesting mass status from {client_id}","messagePattern":"Startup reconciliation timeout reached while requesting mass status from (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/live/src/node/mod.rs","lineNumber":888,"sourceCode":"                .checked_sub(elapsed)\n                .expect(\"elapsed checked against reconciliation timeout\");\n\n            log_info!(\n                \"Requesting mass status from {}...\",\n                client_id,\n                color = LogColor::Blue\n            );\n\n            let mass_status_result = dst::time::timeout(remaining, async {\n                self.kernel\n                    .exec_engine\n                    .borrow_mut()\n                    .generate_mass_status(&client_id, lookback_mins)\n                    .await\n            })\n            .await\n            .map_err(|_| {\n                anyhow::anyhow!(\n                    \"Startup reconciliation timeout reached while requesting mass status from {client_id}\"\n                )\n            })?;\n\n            match mass_status_result {\n                Ok(Some(mass_status)) => {\n                    log_info!(\n                        \"Reconciling ExecutionMassStatus for {}\",\n                        client_id,\n                        color = LogColor::Blue\n                    );\n\n                    let exec_engine_rc = self.kernel.exec_engine.clone();\n\n                    let result = self\n                        .exec_manager\n                        .reconcile_execution_mass_status(mass_status, exec_engine_rc)\n                        .await;","sourceCodeStart":870,"sourceCodeEnd":906,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/live/src/node/mod.rs#L870-L906","documentation":"During startup reconciliation, the node requests an ExecutionMassStatus report from each execution client within config.timeout_reconciliation. If generate_mass_status for a given client_id does not complete before the remaining budget expires, the future is cancelled and this error is returned. It indicates the venue/adapter was too slow or hung producing its mass status report.","triggerScenarios":"perform_startup_reconciliation loops over client ids; dst::time::timeout(remaining, generate_mass_status(&client_id, lookback_mins)) elapses (mod.rs:879-891), typically after earlier clients consumed most of timeout_reconciliation.","commonSituations":"Exchange REST endpoints rate-limiting or slow during high volatility; large reconciliation lookback (reconciliation_lookback_mins) making the report expensive; many execution clients sharing one timeout budget so later clients get almost no remaining time; unreliable API with long tail latencies.","solutions":["Increase timeout_reconciliation in the live config to cover all clients' mass-status generation.","Reduce reconciliation_lookback_mins so the venue returns the report faster.","Check the venue/adapter API health and rate limits; add retry or backoff at the adapter level if supported.","Reduce the number of configured execution clients or stagger their startup so each gets sufficient timeout budget."],"exampleFix":"// before\nconfig.timeout_reconciliation = Duration::from_secs(10);\nconfig.exec_engine.reconciliation_lookback_mins = Some(1440);\n// after\nconfig.timeout_reconciliation = Duration::from_secs(120);\nconfig.exec_engine.reconciliation_lookback_mins = Some(60);","handlingStrategy":"retry","validationCode":"// Ensure reconciliation budget covers all clients\nlet est = clients.len() as u64 * per_client_report_secs;\nassert!(config.timeout_reconciliation.as_secs() > est, \"timeout_reconciliation too small for {clients:?}\");","typeGuard":null,"tryCatchPattern":"if let Err(e) = node.start().await {\n    if e.to_string().contains(\"reconciliation timeout\") {\n        // raise timeout_reconciliation / lower lookback, then retry\n    }\n}","preventionTips":["Keep reconciliation_lookback_mins modest (e.g. under 1440) so reports return quickly","Budget timeout_reconciliation per-client, not per-run","Avoid starting during known exchange maintenance or high-latency windows","Watch venue rate limits before mass-status requests"],"tags":["timeout","reconciliation","network","trading"],"backgroundTag":"request-timeout","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"}