Hi all,
We're seeing cases where traces go missing in an experiment-backed MLflow trace store (not Unity Catalog). The client gets a successful response for both trace writes, and the server echoes back the same trace id, but the trace is never stored. `GetTrace` returns `NOT_FOUND` indefinitely, and the trace never appears in `search_traces` for the experiment or its run.
**Setup**
- MLflow Python client 3.15.1, databricks-sdk 0.102.0, Python 3.13
- Tracking URI `databricks`, traces stored in a regular MLflow experiment (about 2.8k traces total, well under the 100k cap)
- AWS workspace, ap-northeast-1. Client machine in a different region (UK).
- pytest with pytest-xdist: 8 worker processes, each writing one trace every 1โ2 minutes, all attached to one shared run. That's far below the documented 50 trace creations/sec limit.
- Each trace is about 300 KB to a few MB (one root span plus N child spans)
- Tried with both async (default) and synchronous export (`MLFLOW_ENABLE_ASYNC_TRACE_LOGGING=false`); the problem happens with both
**What happens**
Roughly 1 in 37 traces per run disappears, on a different test each time. We wrapped `TracingClient.start_trace` and `TracingClient._upload_trace_data` to log every call. For a lost trace, we see:
```
16:00:51 UTC start_trace tr-0eb74c3a913e0f24188d56595ee45ca6 (experiment <id>) returned tr-0eb74c3a913e0f24188d56595ee45ca6 (experiment <id>) in 1.5s
16:00:54 UTC upload_trace_data tr-0eb74c3a913e0f24188d56595ee45ca6 done in 3.0s
16:01:56 UTC mlflow.get_trace(...) still None after 10 attempts (~60s, exponential backoff)
```
Hours later, `mlflow.get_trace("tr-0eb74c3a913e0f24188d56595ee45ca6")` still returns `NOT_FOUND`, and the trace isn't in a timestamp-window search of the experiment. Every other trace written by the same process in the same window is present and readable.
The MLflow exporter raised no error or warning, and the local trace was exported normally: it wasn't deferred and wasn't left in the in-memory buffer. As far as the client can tell, the write succeeded.
Other examples: `tr-1d335ca4b3ebd64db0b31c6d8025b297` (about 15:27:29 UTC), `tr-aed91304847d49e1674d7fa9eaf632c4` and `tr-f9ef235585cdaa7dafc2796bed560239`, all on 2026-09-30.
**Questions**
1. Is it known that `StartTraceV3` can return success without the trace being persisted for experiment-backed trace storage? Is there an ingestion pipeline behind it that can drop records?
2. Is there any server-side log or system table where we could see what happened to a specific trace id? `system.access.audit` doesn't seem to cover trace API calls.
3. Would migrating traces to Unity Catalog storage avoid this, or does it share the same ingestion path?
4. Which response header carries a request id, so we can capture it for support?
For now our workaround is to keep a copy of each trace client-side, re-send it if `get_trace` still misses after about a minute, and then check again. We'd much rather understand the root cause.
Thanks!