mlflow/mlflow · error · RuntimeError
Move aborted: the following {resource_type} already exist in
Error message
Move aborted: the following {resource_type} already exist in workspace {target_workspace!r} and would conflict: {formatted}\nRename or remove the conflicting resources in the target workspace, then retry. What it means
Before moving resources between workspaces, the command checks whether resources with the same identifying name/key already exist in the target workspace. If any would collide, the entire move is aborted with this RuntimeError listing the conflicting names (up to 10 unless verbose). This is a safety check: proceeding would create duplicates or violate uniqueness constraints.
Source
Thrown at mlflow/store/db/workspace_move.py:342
matched = {row[0] for row in conn.execute(name_filter).fetchall()}
elif names:
matched = _resolve_names(conn, spec, source_workspace, names)
name_filter = list(matched)
else:
matched = _resolve_names(conn, spec, source_workspace)
name_filter = None
if not matched:
return MoveResult(names=[], row_count=0)
if conflicts := _find_conflicts(
conn, spec, source_workspace, target_workspace, name_filter
):
formatted = format_truncated_list(
[repr(name) for name in conflicts],
max_rows=None if verbose else 10,
)
raise RuntimeError(
f"Move aborted: the following {resource_type} already exist "
f"in workspace {target_workspace!r} and would conflict: "
f"{formatted}\n"
"Rename or remove the conflicting resources in the target "
"workspace, then retry."
)
table = spec.table
name_col = table.c[spec.name_column]
def _filtered(stmt, col, _nf=name_filter):
return stmt.where(col.in_(_nf)) if _nf is not None else stmt
row_count = conn.execute(
_filtered(
sa
.select(sa.func.count())
.select_from(table)View on GitHub (pinned to 6a27f2decc)
Solutions
- Rename or delete the conflicting resources in the target workspace, then retry the move.
- Run with --verbose to see the full conflict list if it was truncated at 10 rows.
- If the target copies are stale, drop them so the move can recreate/move the source versions.
Example fix
# before mlflow workspace move --source ws1 --target prod # fails: experiment 'churn-v2' exists # after mlflow experiments rename --experiment-name churn-v2 --new-name churn-v2-imported # in target mlflow workspace move --source ws1 --target prod
Defensive patterns
Strategy: validation
Validate before calling
existing = {e.name for e in mlflow.search_experiments(view_type=ViewType.ALL)}
conflicts = desired_names & existing
if conflicts:
print(f"Resolve before moving: {conflicts}") Try / catch
try:
move_resources(...)
except RuntimeError as e:
if "would conflict" in str(e):
print(e) # lists conflicting names; rename/delete in target, then retry
else:
raise Prevention
- Pre-flight: list names in source and target workspaces and diff them
- Make moves idempotent by cleaning partial results before retrying
- Use --verbose to get the complete conflict list
When it happens
Trigger: Running move_resources where an experiment, model, or other target resource in the source workspace has the same name as one already present in the target workspace. Detected by _assert_no_workspace_conflicts via get_workspace_table reflection.
Common situations: Re-running a partially completed or previously failed move; merging two workspaces that were set up independently with same-named experiments; CI re-executing a migration idempotently.
Related errors
- Move aborted: merging workspaces would create duplicate {res
- Downgrade aborted: merging workspaces would create duplicate
- Aborted: the database does not have workspaces enabled. This
- Aborted: the database does not have workspaces enabled. This
- Aborted: the database does not have workspaces enabled. This
AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29).
Data as JSON: /api/errors/c685372816c18bc8.
Report an issue: GitHub.