apache/druid · error · IllegalStateException

Format [ ], property [ ] of class [ ] conflicts with…

Error message

Format [%s], property [%s] of class [%s] conflicts with another format property of class [%s]

What it means

FormattedInputSourceDefn.addFormatParameters merges parameters from all registered input format definitions; when two formats expose the same property name with different parameter types, the merge is ambiguous and this ISE is thrown. This is a registration/configuration conflict in the catalog's format registry, not a user-data error.

Solutions

  1. Rename the conflicting parameter in one of the custom InputFormatDefn implementations.
  2. Align the parameter types across formats so the property names match with identical types.
  3. Remove one of the conflicting format extensions from the runtime.
  4. Restrict which format extensions are loaded in the server configuration.

Example fix

// before: two formats define param "encoding" (one string, one enum)
// after: rename in custom defn
new ParameterDefn("myFormatEncoding", ParameterType.STRING)
Defensive patterns

Strategy: try-catch

Validate before calling

Map<String,ParameterType> seen = new HashMap<>();
for (InputFormatDefn f : registeredFormats) {
  for (ParameterDefn p : f.parameters()) {
    ParameterType prev = seen.put(p.name(), p.type());
    if (prev != null && prev != p.type()) throw new IllegalStateException("conflicting param: " + p.name());
  }
}

Try / catch

try { params = defn.allParams(); } catch (ISE e) { LOG.error("format parameter conflict, check extensions: %s", e.getMessage()); throw e; }

Prevention

When it happens

Trigger: Calling allParams() (which invokes addFormatParameters) after registering two InputFormatDefn implementations that both define a ParameterDefn with the same name but different types.

Common situations: Installing multiple Druid extensions that register overlapping format parameter names; custom format plugins sharing generic property names like 'encoding' with differing types; classpath changes picking up a new format extension.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/6d852ee8f8e19033. Report an issue: GitHub.

Appendix: source

Thrown at server/src/main/java/org/apache/druid/catalog/model/table/FormattedInputSourceDefn.java:111

   */
  protected List<ParameterDefn> addFormatParameters(
      final List<ParameterDefn> properties
  )
  {
    final List<ParameterDefn> toAdd = new ArrayList<>();
    // While the format parameter is required, we mark it as optional. Else
    // if the source defines optional parameters, they will still be ignored
    // as Calcite treats (optional, optional, required) as (required, required, required)
    final ParameterDefn formatProp = new Parameter(FORMAT_PARAMETER, ParameterType.VARCHAR, true);
    toAdd.add(formatProp);
    final Map<String, ParameterDefn> formatProps = new HashMap<>();
    for (InputFormatDefn format : formats.values()) {
      for (ParameterDefn prop : format.parameters()) {
        final ParameterDefn existing = formatProps.putIfAbsent(prop.name(), prop);
        if (existing == null) {
          toAdd.add(prop);
        } else if (existing.type() != prop.type()) {
          throw new ISE(
              "Format [%s], property [%s] of class [%s] conflicts with another format property of class [%s]",
              format.typeValue(),
              prop.name(),
              prop.type().sqlName(),
              existing.type().sqlName()
          );
        }
      }
    }
    return CatalogUtils.concatLists(properties, toAdd);
  }

  @Override
  protected InputFormat convertTableToFormat(ResolvedExternalTable table)
  {
    final String formatTag = CatalogUtils.getString(table.inputFormatMap, InputFormat.TYPE_PROPERTY);
    if (formatTag == null) {
      throw new IAE("[%s] property must be provided", InputFormat.TYPE_PROPERTY);

View on GitHub (pinned to 9b90983fd2)