apache/seatunnel · error · FileConnectorException
CONFIG_VALIDATION_FAILED
CONFIG_VALIDATION_FAILED
Error message
Continuous enumerator can only be used when discovery_mode=continuous.
What it means
ContinuousMultipleTableFileSourceSplitEnumerator.validateContinuousDiscoveryConfig ensures the continuous split enumerator is only instantiated when discovery_mode=continuous. Any other discovery mode makes continuous enumeration semantics invalid, so CONFIG_VALIDATION_FAILED is thrown.
Source
Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java:1382
return null;
}
try {
return metricsContext.counter(name);
} catch (Exception e) {
return null;
}
}
private static void incCounter(Counter counter) {
if (counter != null) {
counter.inc();
}
}
private static void validateContinuousDiscoveryConfig(List<BaseFileSourceConfig> configs) {
FileDiscoveryMode mode = resolveGlobalOption(configs, FileBaseSourceOptions.DISCOVERY_MODE);
if (mode != FileDiscoveryMode.CONTINUOUS) {
throw new FileConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
"Continuous enumerator can only be used when discovery_mode=continuous.");
}
for (BaseFileSourceConfig cfg : configs) {
ReadonlyConfig c = cfg.getBaseFileSourceConfig();
FileSyncMode syncMode = c.get(FileBaseSourceOptions.SYNC_MODE);
if (syncMode != FileSyncMode.UPDATE) {
throw new FileConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
"discovery_mode=continuous currently requires sync_mode=update.");
}
FileFormat fileFormat = c.get(FileBaseSourceOptions.FILE_FORMAT_TYPE);
if (fileFormat != FileFormat.BINARY) {
throw new FileConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
"discovery_mode=continuous currently only supports file_format_type=binary.");
}
Duration interval = c.get(FileBaseSourceOptions.SCAN_INTERVAL);View on GitHub (pinned to cf67b549a7)
Solutions
- Set discovery_mode = "continuous" in the source config.
- Disable continuous-specific options if periodic/batch discovery is actually desired.
- Align config with a documented continuous file-source example.
Example fix
// before discovery_mode = "interval" sync_mode = "update" // after discovery_mode = "continuous" sync_mode = "update"
Defensive patterns
Strategy: validation
Validate before calling
if (!"continuous".equals(config.getString("discovery_mode"))) {
throw new IllegalArgumentException("Continuous enumerator requires discovery_mode=continuous");
} Try / catch
try {
enumerator = new ContinuousMultipleTableFileSourceSplitEnumerator(...);
} catch (FileConnectorException e) {
if (e.getMessage().contains("Continuous enumerator can only be used")) {
throw new ConfigException("Set discovery_mode=continuous", e);
}
throw e;
} Prevention
- Pair continuous-only options (scan interval, update sync) with discovery_mode=continuous.
- Review streaming examples when migrating from batch configs.
- Enable config pre-validation in job submission pipeline.
When it happens
Trigger: The source creates a continuous enumerator (e.g. because a continuous-specific option like scan interval/incremental sync is enabled) while discovery_mode is interval/once.
Common situations: Enabling streaming/incremental file watching but forgetting discovery_mode = "continuous"; mixing options from examples targeting different modes.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- CONFIG_VALIDATION_FAILED
- FILE_SPLIT_SIZE_ILLEGAL
- FILE_SPLIT_FAIL
- The read columns configuration will be filtered by the schem
- Unable to initialize metrics context for file source enumera
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/3d874ed31f0da556.
Report an issue: GitHub.