apache/superset · error · InvalidParametersError

errors

Error message

errors

What it means

InvalidParametersError raised inside ValidateDatabaseParametersCommand.run for engines in BYPASS_VALIDATION_ENGINES (bigquery, datastore, snowflake). These engines skip parameter-schema validation (they are validated at create time via other flows), but the command still collects database_name uniqueness errors (_get_database_name_error) and SSH tunnel field errors (_get_ssh_tunnel_errors); if any exist, it raises InvalidParametersError(errors) after logging a 'validation_error' event. The payload is a list of SupersetError objects describing each field problem.

Source

Thrown at superset/commands/database/validate.py:63

        self._model: Optional[Database] = None

    def run(self) -> None:  # noqa: C901
        self.validate()

        engine = self._properties["engine"]
        driver = self._properties.get("driver")

        if engine in BYPASS_VALIDATION_ENGINES:
            # Skip engines that are only validated onCreate, but still surface
            # database_name uniqueness and SSH tunnel field errors so the
            # progressive validation flow stays consistent across engines.
            errors: list[SupersetError] = []
            if database_name_error := self._get_database_name_error():
                errors.append(database_name_error)
            errors.extend(self._get_ssh_tunnel_errors())
            if errors:
                event_logger.log_with_context(action="validation_error", engine=engine)
                raise InvalidParametersError(errors)
            return

        engine_spec = get_engine_spec(engine, driver)
        if not hasattr(engine_spec, "parameters_schema"):
            raise InvalidEngineError(
                SupersetError(
                    message=__(
                        'Engine "%(engine)s" cannot be configured through parameters.',
                        engine=engine,
                    ),
                    error_type=SupersetErrorType.GENERIC_DB_ENGINE_ERROR,
                    level=ErrorLevel.ERROR,
                ),
            )

        # perform initial validation (host, port, database, username)
        errors = engine_spec.validate_parameters(self._properties)  # type: ignore

View on GitHub (pinned to f4587218dd)

Solutions

  1. Read each SupersetError in the response payload — it names the offending field (database_name or ssh_tunnel)
  2. Choose a unique database name, or edit the existing connection instead of creating a new one
  3. Complete/correct all SSH tunnel fields (server address, port, username, credentials) or clear the tunnel if unused
  4. Re-submit validation; only the listed fields block progress for bypass engines

Example fix

# before: {"engine": "snowflake", "database_name": "sales"}  # name already taken
# after:  {"engine": "snowflake", "database_name": "sales_prod"}
Defensive patterns

Strategy: try-catch

Validate before calling

from superset.daos.database import DatabaseDAO

def name_available(database_name: str) -> bool:
    return DatabaseDAO.get_database_by_name(database_name) is None

Try / catch

from superset.commands.database.exceptions import InvalidParametersError
try:
    ValidateDatabaseParametersCommand(properties).run()
except InvalidParametersError as ex:
    # ex.errors is a list of SupersetError; map each to its form field
    for e in ex.errors: mark_field(e)

Prevention

When it happens

Trigger: Creating/editing a BigQuery, Datastore, or Snowflake connection in the database modal with a database_name that already exists, or with malformed/missing SSH tunnel fields (bad host, port, credentials format); the progressive-validation endpoint fires this before the connection test stage.

Common situations: Duplicate friendly names for Snowflake databases across teams; SSH tunnel JSON pasted incomplete; UI field-level validation bypassed by API calls (POST to the validate endpoint) with only engine + name supplied.

Related errors


AI-assisted analysis of apache/superset@f4587218dd (2026-08-14). Data as JSON: /api/errors/57acb271aae2a154. Report an issue: GitHub.