databendlabs/databend · error
grpc_api_address MUST not be empty!
Error message
grpc_api_address MUST not be empty!
What it means
The `metaverifier` binary validates meta-service snapshots but first requires a gRPC address to talk to the meta service. If `config.grpc_api_address` is empty it prints this message and bails with the same error before doing any work.
Solutions
- Set grpc_api_address in the metaverifier config (e.g. "127.0.0.1:9191") matching the target databend-meta node's advertised gRPC address.
- Pass the address on the command line with --grpc-api-address if supported by the binary's config loader.
- Verify with `databend-meta --config ... ` or the config file that the meta node is listening on the address you configured.
Example fix
// before (config.toml) # grpc_api_address = "" // after (config.toml) grpc_api_address = "127.0.0.1:9191"
Defensive patterns
Strategy: validation
Validate before calling
// shell pre-flight before running metaverifier cfg=metaverifier.toml if ! grep -qE '^grpc_api_address\s*=\s*"[^\"]+"' "$cfg"; then echo "grpc_api_address missing or empty in $cfg" >&2; exit 1 fi
Type guard
fn grpc_address_valid(addr: &str) -> bool {
!addr.is_empty() && addr.rsplit_once(':').map(|(_, p)| p.parse::<u16>().is_ok()).unwrap_or(false)
} Try / catch
match run_metaverifier(&cfg).await {
Err(e) if e.to_string().contains("grpc_api_address MUST not be empty") => {
eprintln!("set grpc_api_address in the config, e.g. 127.0.0.1:9191");
}
Err(e) => return Err(e),
Ok(v) => v,
} Prevention
- Always set grpc_api_address in the metaverifier config or CLI.
- Copy the address from the target databend-meta's config exactly.
- Smoke-test the address with a TCP connect before launching the verifier.
- Keep a filled-in config template instead of a blank one.
When it happens
Trigger: Running the databend-metaverifier binary without setting `grpc_api_address` in its config (or via the corresponding CLI/env override), so the loaded Config has an empty address string.
Common situations: Forgetting to pass --grpc-api-address or omitting the field from the metaverifier config TOML; copying a config template where the field is left blank; pointing the verifier at a meta cluster but not filling in the address section.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- remove_percent MUST in [0, 100)!
- Failed to create client
- verifier client error
- raft_dir of meta service must be an absolute path, but got
- ContextVar has no value
AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11).
Data as JSON: /api/errors/90939b022bd6113c.
Report an issue: GitHub.
Appendix: source
Thrown at src/meta/binaries/metaverifier/main.rs:104
format: LogFormat::Text,
limit: 48,
max_size: 4294967296,
},
stderr: StderrConfig {
on: true,
level: "WARN".to_string(),
format: LogFormat::Text,
},
..Default::default()
};
let guards = init_logging("databend-metaverifier", &log_config, BTreeMap::new());
Box::new(guards).leak();
println!("config: {:?}", config);
if config.grpc_api_address.is_empty() {
println!("grpc_api_address MUST not be empty!");
bail!("grpc_api_address MUST not be empty!");
}
if config.remove_percent > 100 {
println!("remove_percent MUST in [0, 100)!");
bail!("remove_percent MUST in [0, 100)!");
}
let start = Instant::now();
let mut client_num = 0;
let (tx, rx) = mpsc::channel::<()>();
let mut handles = Vec::new();
// write a file as start
fs::write(VERIFIER_RESULT_FILE, "START")?;
while client_num < config.client {
client_num += 1;
let prefix = config.prefix;View on GitHub (pinned to 288d84d76e)