apache/seatunnel · error · JobDefineCheckException
The ' ' option is not configured, please configure it.
Error message
The '%s' option is not configured, please configure it.
What it means
getFactoryId extracts the plugin name (plugin_name) from a ReadonlyConfig to resolve the plugin factory id. If the plugin_name option is blank or missing, JobDefineCheckException is thrown asking the user to configure it. Without a plugin name, the engine cannot locate the Source/Transform/Sink factory.
Solutions
- Add plugin_name = "<PluginName>" to the plugin block in the job config
- Fix the option key spelling so it is exactly plugin_name
- Ensure the plugin block is not empty (every source/transform/sink needs a name)
- If building config programmatically, set ReadonlyOptionValue for PLUGIN_NAME before calling getFactoryId
Example fix
// before
transform {
Sql { query = "select 1" }
}
// after
transform {
Sql {
plugin_name = "Sql"
query = "select 1"
}
} Defensive patterns
Strategy: validation
Validate before calling
if (config.getOptional("plugin_name").map(String::isBlank).orElse(true)) {
throw new IllegalArgumentException("plugin_name is required in every plugin block");
} Try / catch
try {
String factoryId = ConfigParserUtil.getFactoryId(readonlyConfig);
} catch (JobDefineCheckException e) {
log.error("Plugin block missing plugin_name: {}", e.getMessage());
throw e;
} Prevention
- Always set plugin_name in every plugin block
- Spell the key exactly as plugin_name
- Never leave plugin blocks empty
- Validate ReadonlyConfig before passing to getFactoryId
When it happens
Trigger: Calling getFactoryId with a config whose plugin_name key is absent, empty, or whitespace-only; typically during DAG edge building (checkEdge) when parsing plugin blocks.
Common situations: Plugin block uses only the class-style syntax but the name was not parsed; config key misspelled (e.g. plug_name); programmatically built ReadonlyConfig missing PLUGIN_NAME; empty transform block.
Understand the failure class
Background: "Must pass :limit option" / "Missing required option" — required option errors explained — this error's family across 41 libraries.
Related errors
- The source/transform
- The transform/sink( ) is not configured with ' ' option
- Source And Sink can not be null
- The connector of option is none
- The ' ' option configured in [ ] is incorrect, and the…
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/7eacec89b8f4ce54.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/parse/ConfigParserUtil.java:267
"The transform/sink(%s) is not configured with '%s' option",
config.getString(PLUGIN_NAME.key()), PLUGIN_INPUT.key()),
new OptionValidationException(PLUGIN_INPUT));
}
}
}
private static String getTableId(ReadonlyConfig config) {
return config.getOptional(PLUGIN_OUTPUT).orElse(DEFAULT_ID);
}
static List<String> getInputIds(ReadonlyConfig config) {
return config.getOptional(PLUGIN_INPUT).orElse(Collections.singletonList(DEFAULT_ID));
}
public static String getFactoryId(ReadonlyConfig readonlyConfig) {
String pluginName = readonlyConfig.get(PLUGIN_NAME);
if (StringUtils.isBlank(pluginName)) {
throw new JobDefineCheckException(
String.format(
"The '%s' option is not configured, please configure it.",
PLUGIN_NAME.key()));
}
return pluginName;
}
public static String getFactoryId(Config config) {
return getFactoryId(ReadonlyConfig.fromConfig(config));
}
private enum VertexStatus {
CREATED,
LINKED
}
}
View on GitHub (pinned to cf67b549a7)