nautechsystems/nautilus_trader · error
responsible execution client is unavailable
Error message
responsible execution client is unavailable
What it means
Raised when calculating commission for a fill but no responsible execution `ExecutionClient` was supplied. Commission depends on the venue client's `calculate_commission`; without a client the manager cannot price the commission and bails instead of returning a fabricated value.
Source
Thrown at crates/live/src/execution/manager.rs:4916
"Cannot project reconciliation snapshot event for {}: {e}",
order.client_order_id()
);
break;
}
events.push(event);
}
events
}
fn resolve_inferred_fill_commission(
client: Option<&dyn ExecutionClient>,
instrument: &InstrumentAny,
fill_qty: Quantity,
price_and_liquidity: Option<(Price, LiquiditySide)>,
) -> anyhow::Result<Option<Money>> {
let Some(client) = client else {
anyhow::bail!("responsible execution client is unavailable");
};
let Some((last_px, liquidity_side)) = price_and_liquidity else {
return Ok(None);
};
client.calculate_commission(instrument, fill_qty, last_px, liquidity_side)
}
#[expect(clippy::too_many_arguments)]
fn handle_external_order(
&self,
report: &OrderStatusReport,
account_id: AccountId,
instrument: &InstrumentAny,
fills: &[&FillReport],
is_synthetic: bool,
fill_queue: Option<&mut ReconciliationFillQueue>,
commission_client: Option<&dyn ExecutionClient>,View on GitHub (pinned to 18893faf8b)
Solutions
- Register and configure the execution client for the venue so fills resolve to a responsible client.
- Check exec client routing config so the order/fill maps to the correct client.
- Verify the client was not dropped after disconnect; inspect earlier logs for client registration failures.
Defensive patterns
Strategy: validation
Validate before calling
// before processing fills, ensure an exec client is registered for the venue
let client = node.exec_client_for_venue(&venue);
if client.is_none() {
log::warn!("no execution client registered for {venue}; commission will fail");
} Try / catch
match calculate_fill_commission(client, instrument, fill_qty, price_and_liquidity) {
Err(e) if e.to_string().contains("responsible execution client is unavailable") => {
// fall back: skip commission calc and alert on missing client config
}
other => other?,
} Prevention
- Register an execution client for every venue that can produce fills.
- Verify exec client routing configuration during node startup.
- Watch startup logs for client registration failures before going live.
When it happens
Trigger: The live execution manager processes a fill whose responsible client lookup failed or was not configured (e.g. an external/OWNED order fill with no matching execution client registered), then calls this helper with `client: None`.
Common situations: Missing or misconfigured execution client for the venue (client factory not registered, routing not configured); fills for orders not managed by any client; adapter reconnects where the client was dropped.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Unsupported blockchain {blockchain} for RPC connection
- Kraken Spot does not support the demo environment
- Order for {} not found to determine position ID
- Redis config error: username supplied without password. Eith
- {secret_var} is required when {key_var} is provided
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/b66df9a5e2c07ae9.
Report an issue: GitHub.