Backport Mlflow AutoPilot E2E fix to 1.13 - #30221
Conversation
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
|
The Python checkstyle failed. Please run You can install the pre-commit hooks with |
|
🟡 Playwright Results — all passed (11 flaky)✅ 3968 passed · ❌ 0 failed · 🟡 11 flaky · ⏭️ 30 skipped
🟡 11 flaky test(s) (passed on retry)
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
Point the Playwright Mlflow connection at sqlite backends. The placeholder strings resolved to MLflow's file store, which 3.13+ rejects, so the AutoPilot agent failed to connect and the run-completed banner never rendered. Backport of the Playwright change in #30191.
| // MLflow 3.13+ rejects the filesystem backend, which is what a non-URI | ||
| // string resolves to. SQLite is a supported backend and bootstraps itself, | ||
| // yielding an empty registry the agent can walk without a live MLflow. | ||
| await page.fill('#root\\/trackingUri', 'sqlite:////tmp/mlflow_tracking.db'); |
There was a problem hiding this comment.
⚠️ Bug: SQLite DB paths are shared, not scoped per service instance
The PR description states the SQLite paths are "scoped per service instance so concurrent runs sharing the ingestion container cannot contend on one file or inherit a half-created schema from an earlier attempt," but the committed code uses fixed paths for the tracking and registry databases. Any parallel Playwright workers/services or a retry after a partial failure will contend on the same files or inherit a half-created schema, reintroducing exactly the flakiness the change claims to prevent. Since this.serviceName (which embeds a uuid()) is available on the base class, derive the DB filenames from it, e.g., sqlite:////mlflow_tracking_${this.serviceName}.db.
Scope both SQLite backends per service instance using the unique serviceName.:
await page.fill(
'#root\/trackingUri',
`sqlite:////tmp/mlflow_tracking_${this.serviceName}.db`
);
await checkServiceFieldSectionHighlighting(page, 'trackingUri');
await page.fill(
'#root\/registryUri',
`sqlite:////tmp/mlflow_registry_${this.serviceName}.db`
);
await checkServiceFieldSectionHighlighting(page, 'registryUri');
Was this helpful? React with 👍 / 👎
|
The Python checkstyle failed. Please run You can install the pre-commit hooks with |
Code Review
|
| Compact |
|
Was this helpful? React with 👍 / 👎 | Gitar



Backports the Playwright half of #30191 to
1.13. 1.13 carries the samemlflow-skinny>=3.13.0,<3.15bump, so the AutoPilot E2E fails here the same way.What
MlFlowIngestionClassfilled placeholder connection strings that MLflow resolved to a local file store, so the agent walked an empty registry and the test passed. MLflow 3.13 put the file store into maintenance mode and now raises instead:The agent throws on connect, the AutoPilot workflow never completes successfully, and the run-completed banner never renders. Verified against the pinned version:
search_registered_models()with a placeholder URIMlflowExceptionThe fields now hold sqlite DSNs. SQLite is a supported backend that bootstraps its own schema, so it keeps the "empty registry, agent succeeds" semantics the test already relied on — as a deliberate choice rather than a side effect of MLflow's string parsing. Both fields are plain
type: stringin the schema, so no schema or UI change is needed.Scope
Playwright only, and intentionally byte-identical to the change already merged on
mainso the branches do not diverge.Greptile flagged that the fixed
/tmppaths are shared across services in the ingestion container (possible lock contention on concurrent first-time schema creation). That is a fair point but applies equally tomain, which already merged these paths — so it should be hardened there first and backported, not introduced here as a divergence.The connector-side version-selection fix from #30191 and its regression test are not included here, by request — 1.13 still carries that bug (a registered model is dropped after its description/tags/aliases are edited). The test change is the regression guard for that fix, so both were dropped together; keeping the test without the code fix would leave a failing integration test.
Greptile Summary
This PR updates the MLflow Playwright setup for MLflow 3.13 compatibility. The main changes are:
Confidence Score: 5/5
No additional blocking issue qualifies for this follow-up review.
Important Files Changed
Reviews (3): Last reviewed commit: "fix(ui): unbreak the Mlflow AutoPilot E2..." | Re-trigger Greptile
Context used: