{"record":{"id":"3ad990efce167ab5","repo":"apache/druid","slug":"input-source-type-s-is-not-registered","errorCode":null,"errorMessage":"Input source type %s is not registered","messagePattern":"Input source type (.+?) is not registered","errorType":"validation","errorClass":"IAE","httpStatus":null,"severity":"error","filePath":"server/src/main/java/org/apache/druid/catalog/model/table/ResolvedExternalTable.java","lineNumber":90,"sourceCode":"  }\n\n  /**\n   * Look up the input source type and input format type to find the corresponding\n   * definitions in the table registry. Throws an exception if the types are not\n   * defined. The input source is required, the format is optional.\n   * <p>\n   * Note, for resolution to work, the name of each definition must be the same as\n   * that used as the type key in the serialized JSON.\n   */\n  public ResolvedExternalTable resolve(TableDefnRegistry registry)\n  {\n    String inputSourceType = CatalogUtils.getString(inputSourceMap, InputSource.TYPE_PROPERTY);\n    if (inputSourceType == null) {\n      throw new IAE(\"Input source type %s is required\", InputSource.TYPE_PROPERTY);\n    }\n    inputSourceDefn = registry.inputSourceDefnFor(inputSourceType);\n    if (inputSourceDefn == null) {\n      throw new IAE(\"Input source type %s is not registered\", inputSourceType);\n    }\n    if (inputFormatMap != null) {\n      String inputFormatType = CatalogUtils.getString(inputFormatMap, InputFormat.TYPE_PROPERTY);\n      if (inputFormatType != null) {\n        inputFormatDefn = registry.inputFormatDefnFor(inputFormatType);\n        if (inputFormatDefn == null) {\n          throw new IAE(\"Input format type %s is not registered\", inputFormatType);\n        }\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Validate that the table spec is correct by resolving the definitions, then\n   * converting the JSON to the desired object type. Note that this path requires\n   * special handling: the table spec may be partial, which means it is missing information\n   * needed to create a complete input source. The input source definition defines which","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/catalog/model/table/ResolvedExternalTable.java#L72-L108","documentation":"After reading the input source's type property, resolve() looks it up in the TableDefnRegistry. If no input source definition is registered under that type name, the table cannot be validated or converted, so this IAE reports the unregistered type value.","triggerScenarios":"Setting source.type to a type string the registry doesn't know — typos like \"loca\", extension input sources (e.g. \"s3\", \"kafka\") when the providing extension module isn't loaded/registered in the catalog's registry.","commonSituations":"Typos in type names; using extension input sources without the extension loaded into the Druid process; running against a trimmed registry (tests/embedded mode) missing extensions.","solutions":["Fix the type string to a registered value (e.g. \"local\", \"http\", \"s3\")","Load the Druid extension that registers the input source type","Register a custom InputSourceDefn in the TableDefnRegistry if using a custom input source"],"exampleFix":"// before\n\"source\":{\"type\":\"loca\",\"baseDir\":\"/data\"}\n// after\n\"source\":{\"type\":\"local\",\"baseDir\":\"/data\"}","handlingStrategy":"validation","validationCode":"// Java\nString type = (String) sourceMap.get(\"type\");\nif (type != null && registry.inputSourceDefnFor(type) == null)\n  throw new IllegalArgumentException(\"input source type not registered: \" + type);","typeGuard":"// Java\nstatic boolean isKnownSourceType(TableDefnRegistry registry, Map<String,Object> sourceMap) {\n  Object t = sourceMap.get(\"type\");\n  return t instanceof String && registry.inputSourceDefnFor((String) t) != null;\n}","tryCatchPattern":"try { resolved.resolve(registry); } catch (IAE e) { if (e.getMessage().contains(\"is not registered\")) { /* load the extension or fix the type name */ } else throw e; }","preventionTips":["Check loaded extensions cover all input source types used in specs","Validate type strings against the registry before persisting tables","Beware test/embedded registries that omit extension input sources"],"tags":["druid-catalog","validation","input-source","registry"],"backgroundTag":"invalid-enum-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}