apache/seatunnel · error · IcebergConnectorException

CONFIG_VALIDATION_FAILED

CONFIG_VALIDATION_FAILED

Error message

PluginName: %s, PluginType: %s, Message: %s

What it means

IcebergSink.getSaveModeHandler throws IcebergConnectorException with CONFIG_VALIDATION_FAILED when the 'Iceberg' CatalogFactory SPI cannot be discovered. The message text mentions Doris catalog factory, but the actual trigger is the missing Iceberg catalog factory plugin. This typically means the Iceberg connector jar is absent from the plugin directory so the SPI cannot load.

Source

Thrown at seatunnel-connectors-v2/connector-iceberg/src/main/java/org/apache/seatunnel/connectors/seatunnel/iceberg/sink/IcebergSink.java:118

    @Override
    public Optional<Serializer<IcebergAggregatedCommitInfo>> getAggregatedCommitInfoSerializer() {
        return Optional.of(new DefaultSerializer<>());
    }

    @Override
    public Optional<Serializer<IcebergCommitInfo>> getCommitInfoSerializer() {
        return Optional.of(new DefaultSerializer<>());
    }

    @Override
    public Optional<SaveModeHandler> getSaveModeHandler() {
        CatalogFactory catalogFactory =
                discoverFactory(
                        Thread.currentThread().getContextClassLoader(),
                        CatalogFactory.class,
                        "Iceberg");
        if (catalogFactory == null) {
            throw new IcebergConnectorException(
                    SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
                    String.format(
                            "PluginName: %s, PluginType: %s, Message: %s",
                            getPluginName(), PluginType.SINK, "Cannot find Doris catalog factory"));
        }
        Catalog catalog =
                catalogFactory.createCatalog(catalogFactory.factoryIdentifier(), readonlyConfig);
        return Optional.of(
                new DefaultSaveModeHandler(
                        config.getSchemaSaveMode(),
                        config.getDataSaveMode(),
                        catalog,
                        catalogTable,
                        config.getDataSaveModeSQL()));
    }

    @Override
    public Optional<CatalogTable> getWriteCatalogTable() {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Ensure seatunnel-connector-connector-iceberg jar exists in $SEATUNNEL_HOME/connectors (run sh bin/install-plugin.sh).
  2. Verify connector-catalog 'Iceberg' identifier matches your SeaTunnel version; align connector and engine versions.
  3. Check plugin discovery config (seatunnel.yaml plugin-discovery / connector classloader settings).
  4. Confirm META-INF/services registration for CatalogFactory is present in the iceberg jar (jar not corrupted/partially copied).

Example fix

// before (missing jar)
$SEATUNNEL_HOME/connectors/  # no connector-iceberg jar
// after
sh bin/install-plugin.sh 2.3.x
ls $SEATUNNEL_HOME/connectors/connector-iceberg-2.3.x.jar
Defensive patterns

Strategy: validation

Validate before calling

// before starting the job, verify the Iceberg connector jar is present
java.nio.file.Path connectors = java.nio.file.Path.of(System.getenv("SEATUNNEL_HOME"), "connectors");
boolean icebergPresent = java.nio.file.Files.list(connectors).anyMatch(p -> p.getFileName().toString().startsWith("connector-iceberg-"));
if (!icebergPresent) throw new IllegalStateException("Iceberg connector jar missing; run sh bin/install-plugin.sh");

Try / catch

try { sink.openPrepare(); } catch (IcebergConnectorException e) { if (e.getSeaTunnelApiErrorCode() == SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED) { log.error("Iceberg catalog factory not found; install connector-iceberg jar"); } throw e; }

Prevention

When it happens

Trigger: Calling getSaveModeHandler (during sink initialization with save-mode enabled) when discoverFactory(..., CatalogFactory.class, "Iceberg") returns null because no provider registers the 'Iceberg' catalog factory identifier.

Common situations: Iceberg connector jar missing from $SEATUNNEL_HOME/connectors; install-plugin.sh not run or connector not downloaded; mixed SeaTunnel versions where connector jar version mismatches the engine; classloader isolation hiding the SPI file.

Understand the failure class

Background: Config validation failed: what "invalid value for {key}" and settings-rejection errors mean across 19 open-source libraries — this error's family across 19 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/81ed85da758b030d. Report an issue: GitHub.