databendlabs/databend · error

importing from V0 is not supported since 2024-03-01, please…

Error message

importing from V0 is not supported since 2024-03-01, please use an older version databend-metactl to import from V0

What it means

Raised in import_lines when validate_version detects a meta-service snapshot exported in the legacy V0 data format. V0 export/import support was dropped after 2024-03-01, so the current databend-metactl refuses the import and tells the operator to use an older metactl release to migrate that snapshot first.

Solutions

  1. Download a databend-metactl version released before 2024-03-01 to import the V0 dump
  2. Export the old cluster's data with a compatible tool chain, or migrate via an intermediate metasrv version
  3. Confirm the dump file's version header; V0 files cannot be imported directly by current metactl
Defensive patterns

Strategy: validation

Validate before calling

let version = reading::read_version(&mut lines.peekable())?;
if matches!(version, DataVersion::V0) {
    eprintln!("V0 dump: use pre-2024-03 databend-metactl");
}

Try / catch

match import_lines(raft_config, lines).await {
    Err(e) if e.to_string().contains("V0 is not supported") => eprintln!("download an older databend-metactl to import this dump"),
    other => other,
}

Prevention

When it happens

Trigger: Running `metactl --import` against a data file whose version header is DataVersion::V0.

Common situations: Restoring a very old backup exported years ago; mixing old export files into a newer cluster migration.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11). Data as JSON: /api/errors/0ee453fa4738e416. Report an issue: GitHub.

Appendix: source

Thrown at src/meta/control/src/import.rs:89

        return Ok(());
    }

    init_new_cluster::<SP>(args, nodes, max_log_id).await?;
    Ok(())
}

/// Import from lines of exported data and Return the max log id that is found.
async fn import_lines<SP: SpawnApi, B: BufRead + 'static>(
    raft_config: RaftConfig,
    lines: Lines<B>,
) -> anyhow::Result<Option<LogId>> {
    #[allow(clippy::useless_conversion)]
    let mut it = lines.into_iter().peekable();
    let version = reading::validate_version(&mut it)?;

    let max_log_id = match version {
        DataVersion::V0 => {
            return Err(anyhow::anyhow!(
                "importing from V0 is not supported since 2024-03-01,
                 please use an older version databend-metactl to import from V0"
            ));
        }
        DataVersion::V001 => {
            return Err(anyhow::anyhow!(
                "importing from V001 is not supported since 2024-06-12,
                 please use an older version databend-metactl to import from V001"
            ));
        }
        // v002 v003 v004 share the same exported data format.
        DataVersion::V002 => crate::import_v004::import_v004::<SP>(raft_config, it).await?,
        DataVersion::V003 => crate::import_v004::import_v004::<SP>(raft_config, it).await?,
        DataVersion::V004 => crate::import_v004::import_v004::<SP>(raft_config, it).await?,
    };

    Ok(max_log_id)
}

View on GitHub (pinned to 288d84d76e)