alibaba/canal · error · RuntimeException

ERROR load Config: {} {}

Error message

ERROR load Config: {} {}

What it means

Thrown by KuduMappingConfigLoader.load() as a wrapper around any exception from config.validate() for a given kudu mapping file. The message embeds the fileName and the underlying cause's message, and the original exception is chained, so the real validation defect is identifiable from the cause.

Source

Thrown at client-adapter/kudu/src/main/java/com/alibaba/otter/canal/client/adapter/kudu/config/KuduMappingConfigLoader.java:40

     * 加载HBase表映射配置
     *
     * @return 配置名/配置文件名--对象
     */
    public static Map<String, KuduMappingConfig> load(Properties envProperties) {
        logger.info("## Start loading kudu mapping config ... ");

        Map<String, KuduMappingConfig> result = new LinkedHashMap<>();

        Map<String, String> configContentMap = MappingConfigsLoader.loadConfigs("kudu");
        configContentMap.forEach((fileName, content) -> {
            KuduMappingConfig config = YamlUtils.ymlToObj(null, content, KuduMappingConfig.class, null, envProperties);
            if (config == null) {
                return;
            }
            try {
                config.validate();
            } catch (Exception e) {
                throw new RuntimeException("ERROR load Config: " + fileName + " " + e.getMessage(), e);
            }
            result.put(fileName, config);
        });

        logger.info("## kudu mapping config loaded");
        return result;
    }
}

View on GitHub (pinned to 87be50e876)

Solutions

  1. Read the fileName and the chained cause message in the stack trace to find the offending field (e.g. 'KuduMapping.database').
  2. Open that named yml and supply the missing/invalid field.
  3. Restart the adapter.

Example fix

# Error: ERROR load Config: kudu/bad.yml KuduMapping.database
# before (kudu/bad.yml)
kuduMapping:
  table: user
# after
kuduMapping:
  database: mytest
  table: user
Defensive patterns

Strategy: try-catch

Try / catch

try {
    Map<String, KuduMappingConfig> all = KuduMappingConfigLoader.load(envProperties);
} catch (RuntimeException e) {
    // e.getMessage() starts with "ERROR load Config: <fileName> <cause>"
    String file = e.getMessage().replaceAll("^ERROR load Config: (\\S+).*", "$1");
    logger.error("Kudu mapping file failed validation: {}", file, e.getCause());
    throw e;
}

Prevention

When it happens

Trigger: For a loaded kudu yml, config.validate() throws (e.g. NullPointerException for a missing database). The loader catches it and rethrows a RuntimeException prefixed with 'ERROR load Config: <fileName>'.

Common situations: A kudu yml is missing a required field such as database; the fileName in the message tells you exactly which file to fix.

Related errors


AI-assisted analysis of alibaba/canal@87be50e876 (2026-08-14). Data as JSON: /api/errors/73594c702737ef72. Report an issue: GitHub.