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

  1. Rename the custom suite to something unique, e.g. 'myvendor-hdfs'
  2. If you want different default behavior, modify the default suite in source rather than shadowing its name
  3. 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

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


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/46180662dc1294df. Report an issue: GitHub.