databendlabs/databend · critical

{e}

Error message

{e}

What it means

The meta node binary's main loads its configuration via Config::load(true)? then try_into MetaConfig; a String-typed conversion error is converted into anyhow with the raw message {e}. The process exits non-zero because the loaded config cannot be interpreted as a valid MetaConfig.

Solutions

  1. Read the {e} message — it states exactly which config key/value failed conversion.
  2. Validate the config with databend-meta --cmd config or the config-check subcommand before launch.
  3. Update the config file to the current schema for your Databend version (check release notes for renames).
  4. Simplify to a minimal config and add fields back incrementally to isolate the offending key.

Example fix

// before (databend-meta.toml)
log_dir = "/var/log/databend/meta"     # removed key in new schema
// after
[log]
dir = "/var/log/databend/meta"
Defensive patterns

Strategy: validation

Validate before calling

# Shell: validate meta config before starting the service
databend-meta --config-file databend-meta.toml --cmd config | grep -i error && exit 1

Try / catch

// Rust: surface which config entry failed
let conf: MetaConfig = Config::load(true)?
    .try_into()
    .map_err(|e: String| { eprintln!("invalid meta config: {e}"); anyhow::anyhow!(e) })?;

Prevention

When it happens

Trigger: Starting the meta service (databend-meta) with a config file / CLI / env combination that Config::load accepts but whose try_into::<MetaConfig> fails — e.g. invalid or mutually conflicting field values produced by the config loader's validation-as-string errors.

Common situations: Deprecated or renamed config keys in databend-meta.toml after an upgrade; wrong types (string where number expected); env var overrides producing invalid values; --config-file pointing at a query-node config by mistake.

Related errors


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

Appendix: source

Thrown at src/meta/binaries/meta/ee_main.rs:31

// limitations under the License.

#![feature(stmt_expr_attributes)]
#![allow(clippy::collapsible_if, clippy::uninlined_format_args)]
mod entry;

use databend_common_base::mem_allocator::DefaultGlobalAllocator;
use databend_meta_cli_config::Config;
use databend_meta_cli_config::MetaConfig;
use databend_meta_runtime::DatabendRuntime;

#[global_allocator]
pub static GLOBAL_ALLOCATOR: DefaultGlobalAllocator = DefaultGlobalAllocator::create();

#[tokio::main(flavor = "multi_thread")]
async fn main() -> anyhow::Result<()> {
    let conf: MetaConfig = Config::load(true)?
        .try_into()
        .map_err(|e: String| anyhow::anyhow!(e))?;
    conf.service.validate()?;
    entry::entry::<DatabendRuntime>(conf).await
}

View on GitHub (pinned to 288d84d76e)