apache/hadoop · error · HdfsCompatIllegalArgumentException
suite " + suiteClassName + " suiteName conflicts with defaul
Error message
suite " + suiteClassName + " suiteName conflicts with default suite " + defaultSuite.getSuiteName()
What it means
Custom suite names are compared case-insensitively against every built-in default suite's name; a match throws HdfsCompatIllegalArgumentException. This prevents custom suites from shadowing or being confused with the suites hadoop-compat-bench ships by default.
Source
Thrown at hadoop-tools/hadoop-compat-bench/src/main/java/org/apache/hadoop/fs/compat/common/HdfsCompatCommand.java:98
", configuration " + key + " is not properly set.");
}
Constructor<?> ctor = suiteClassName.getClass().getConstructor();
ctor.setAccessible(true);
Object suiteObj = ctor.newInstance();
if (suiteObj instanceof HdfsCompatSuite) {
this.suite = (HdfsCompatSuite) suiteObj;
} else {
throw new HdfsCompatIllegalArgumentException(
"class name " + suiteClassName + " must be an" +
" implementation of " + HdfsCompatSuite.class.getName());
}
if (suite.getSuiteName() == null || suite.getSuiteName().isEmpty()) {
throw new HdfsCompatIllegalArgumentException(
"suite " + suiteClassName + " suiteName is empty");
}
for (HdfsCompatSuite defaultSuite : defaultSuites.values()) {
if (suite.getSuiteName().equalsIgnoreCase(defaultSuite.getSuiteName())) {
throw new HdfsCompatIllegalArgumentException(
"suite " + suiteClassName + " suiteName" +
" conflicts with default suite " + defaultSuite.getSuiteName());
}
}
if (!hasApiCase() && !hasShellCase()) {
throw new HdfsCompatIllegalArgumentException(
"suite " + suiteClassName + " is empty for both API and SHELL");
}
}
private boolean hasApiCase() {
return (suite.getApiCases() != null) &&
(suite.getApiCases().length > 0);
}
private boolean hasShellCase() {
return (suite.getShellCases() != null) &&
(suite.getShellCases().length > 0);View on GitHub (pinned to 2add963021)
Solutions
- Rename the custom suite to something unique, e.g. 'myvendor-hdfs'
- If you want different default behavior, modify the default suite in source rather than shadowing its name
- Rebuild the suite jar and re-run
Example fix
// before
@Override
public String getSuiteName() { return "hdfs"; } // collides with default
// -> suite ... suiteName conflicts with default suite hdfs
// after
@Override
public String getSuiteName() { return "myvendor-hdfs"; } Defensive patterns
Strategy: validation
Validate before calling
for (HdfsCompatSuite d : defaultSuites.values()) {
if (mySuiteName.equalsIgnoreCase(d.getSuiteName())) {
throw new IllegalArgumentException(
"suite name '" + mySuiteName + "' conflicts with default suite "
+ d.getSuiteName() + "; rename it");
}
} Prevention
- Prefix custom suite names with a vendor or project namespace (myvendor-*)
- Assert name uniqueness against the built-in list in a registration unit test
When it happens
Trigger: A custom suite whose getSuiteName() equals (ignoring case) the name of any default suite — e.g. naming your suite 'HDFS', 'ALL', or reusing a built-in suite's identifier in different letter case.
Common situations: Cloning an existing suite as a starting point and forgetting to change getSuiteName(); deliberately trying to override a default suite via the classname configuration (not supported — the default map is checked first and wins); casing differences ('MyHdfs' vs 'myhdfs') that collide.
Related errors
- cannot get class name for suite " + this.suiteName + ", conf
- class name " + suiteClassName + " must be an implementation
- suite " + suiteClassName + " suiteName is empty
- suite " + suiteClassName + " is empty for both API and SHELL
- file conflicts: {}
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/46180662dc1294df.
Report an issue: GitHub.