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

  1. Register and configure the execution client for the venue so fills resolve to a responsible client.
  2. Check exec client routing config so the order/fill maps to the correct client.
  3. 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

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


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/b66df9a5e2c07ae9. Report an issue: GitHub.