{"record":{"id":"90939b022bd6113c","repo":"databendlabs/databend","slug":"grpc-api-address-must-not-be-empty","errorCode":null,"errorMessage":"grpc_api_address MUST not be empty!","messagePattern":"grpc_api_address MUST not be empty!","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/binaries/metaverifier/main.rs","lineNumber":104,"sourceCode":"            format: LogFormat::Text,\n            limit: 48,\n            max_size: 4294967296,\n        },\n        stderr: StderrConfig {\n            on: true,\n            level: \"WARN\".to_string(),\n            format: LogFormat::Text,\n        },\n        ..Default::default()\n    };\n\n    let guards = init_logging(\"databend-metaverifier\", &log_config, BTreeMap::new());\n    Box::new(guards).leak();\n\n    println!(\"config: {:?}\", config);\n    if config.grpc_api_address.is_empty() {\n        println!(\"grpc_api_address MUST not be empty!\");\n        bail!(\"grpc_api_address MUST not be empty!\");\n    }\n\n    if config.remove_percent > 100 {\n        println!(\"remove_percent MUST in [0, 100)!\");\n        bail!(\"remove_percent MUST in [0, 100)!\");\n    }\n\n    let start = Instant::now();\n    let mut client_num = 0;\n    let (tx, rx) = mpsc::channel::<()>();\n    let mut handles = Vec::new();\n\n    // write a file as start\n    fs::write(VERIFIER_RESULT_FILE, \"START\")?;\n\n    while client_num < config.client {\n        client_num += 1;\n        let prefix = config.prefix;","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/meta/binaries/metaverifier/main.rs#L86-L122","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before (config.toml)\n# grpc_api_address = \"\"\n// after (config.toml)\ngrpc_api_address = \"127.0.0.1:9191\"","handlingStrategy":"validation","validationCode":"// shell pre-flight before running metaverifier\ncfg=metaverifier.toml\nif ! grep -qE '^grpc_api_address\\s*=\\s*\"[^\\\"]+\"' \"$cfg\"; then\n  echo \"grpc_api_address missing or empty in $cfg\" >&2; exit 1\nfi","typeGuard":"fn grpc_address_valid(addr: &str) -> bool {\n    !addr.is_empty() && addr.rsplit_once(':').map(|(_, p)| p.parse::<u16>().is_ok()).unwrap_or(false)\n}","tryCatchPattern":"match run_metaverifier(&cfg).await {\n    Err(e) if e.to_string().contains(\"grpc_api_address MUST not be empty\") => {\n        eprintln!(\"set grpc_api_address in the config, e.g. 127.0.0.1:9191\");\n    }\n    Err(e) => return Err(e),\n    Ok(v) => v,\n}","preventionTips":["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."],"tags":["metaverifier","config","grpc","validation"],"backgroundTag":"missing-required-config-field","analyzedSha":"288d84d76e20a2f8f7173bda9691eb6ece301aa9","analyzedAt":"2026-09-11T11:29:36.208Z","contentChangedAt":"2026-09-11T11:29:36.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}