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
- Rename the conflicting parameter in one of the custom InputFormatDefn implementations.
- Align the parameter types across formats so the property names match with identical types.
- Remove one of the conflicting format extensions from the runtime.
- 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
- Namespace custom format parameter names uniquely
- Audit overlapping extensions sharing generic property names
- Align types across formats that share a property name
- Test extension combinations in staging
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
- Format type [ ] for property [ ] is not valid
- Input format type is not registered
- [ ] property must be provided
- A-Not-B requires at least 1 sketch
- Access-Check-Result
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)