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
- Ensure seatunnel-connector-connector-iceberg jar exists in $SEATUNNEL_HOME/connectors (run sh bin/install-plugin.sh).
- Verify connector-catalog 'Iceberg' identifier matches your SeaTunnel version; align connector and engine versions.
- Check plugin discovery config (seatunnel.yaml plugin-discovery / connector classloader settings).
- 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
- Run sh bin/install-plugin.sh after installing/upgrading SeaTunnel
- Keep connector jar versions identical to the engine version
- Verify META-INF/services CatalogFactory registration exists in the iceberg jar
- Check classloader/plugin-discovery settings in seatunnel.yaml when using custom deployments
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
- The Factory has not been implemented and the deprecated Plug
- CONFIG_VALIDATION_FAILED
- CONFIG_VALIDATION_FAILED
- Cannot convert to BigDecimal:
- Cannot convert to boolean:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/81ed85da758b030d.
Report an issue: GitHub.