apache/seatunnel · error · JobDefineCheckException
The '%s' option configured in [%s] is incorrect, and the sou
Error message
The '%s' option configured in [%s] is incorrect, and the source/transform[%s] is not found.
What it means
checkInputId verifies that every plugin_input id referenced by a transform/sink actually matches a registered source/transform output id in the DAG. If a referenced id was never produced, JobDefineCheckException is thrown saying the source/transform was not found. This catches dangling edges in multi-table job configs.
Source
Thrown at seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/parse/ConfigParserUtil.java:206
id));
}
return new Tuple2<>(config, VertexStatus.CREATED);
});
}
}
private static void checkInputId(
List<? extends Config> configs,
Map<String, Tuple2<Config, VertexStatus>> vertexStatusMap) {
for (Config config : configs) {
List<String> inputIds = getInputIds(ReadonlyConfig.fromConfig(config));
inputIds.forEach(
inputId ->
vertexStatusMap.compute(
inputId,
(id, old) -> {
if (old == null) {
throw new JobDefineCheckException(
String.format(
"The '%s' option configured in [%s] is incorrect, and the source/transform[%s] is not found.",
PLUGIN_INPUT.key(),
config.getString(PLUGIN_NAME.key()),
id));
}
return new Tuple2<>(old._1(), VertexStatus.LINKED);
}));
}
}
private static void checkLinked(Map<String, Tuple2<Config, VertexStatus>> vertexStatusMap) {
vertexStatusMap.forEach(
(id, vertex) -> {
if (vertex._2() == VertexStatus.CREATED) {
throw new JobDefineCheckException(
String.format(
"The '%s' option configured is incorrect, this table(%s) belonging to source/transform(%s) is not used.",View on GitHub (pinned to cf67b549a7)
Solutions
- Fix the plugin_input value to exactly match an existing plugin_output id
- Ensure the upstream plugin sets plugin_output with that exact id
- Check for typos/case differences between plugin_output and plugin_input values
- Confirm the upstream source/transform block is present and not commented out
Example fix
// before
source { FakeSource { plugin_output = "src" } }
sink { Console { plugin_input = "sorce" } }
// after
source { FakeSource { plugin_output = "src" } }
sink { Console { plugin_input = "src" } } Defensive patterns
Strategy: validation
Validate before calling
Set<String> produced = collectPluginOutputs(config);
for (String input : collectPluginInputs(config)) {
if (!produced.contains(input)) {
throw new IllegalArgumentException("Unknown plugin_input: " + input);
}
} Try / catch
try {
ConfigParserUtil.checkInputId(...);
} catch (JobDefineCheckException e) {
log.error("Dangling plugin_input reference: {}", e.getMessage());
throw e;
} Prevention
- Keep plugin_input values identical to upstream plugin_output
- Check for typos and case mismatches
- Never delete a producer without updating consumers
- Use short consistent table ids
When it happens
Trigger: A transform or sink config references plugin_input (or source_table_name) with a value that no upstream plugin declares as plugin_output; complex-graph validation via checkComplexGraph.
Common situations: Typo in plugin_input value; upstream plugin renamed or removed; plugin_output missing on the intended producer (so its default id differs); multi-table job where the producer block is commented out.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Source And Sink can not be null
- The value of the '%s' option of the (%s and %s) plugins is b
- The '%s' option configured is incorrect, this table(%s) belo
- The source/transform(%s) is not configured with '%s' option
- The transform/sink(%s) is not configured with '%s' option
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/98b132df6e7329f4.
Report an issue: GitHub.