apache/seatunnel · error · org.apache.seatunnel.api.configuration.util.OptionValidationException
' ' duplicate in options.
Error message
%s '%s' duplicate in %s options.
What it means
Thrown during OptionRule validation when the same Option is registered more than once inside a ConditionalRequiredOptions expression — i.e. the developer reused one option key as both a condition and a required option (or repeated it as a condition) in a conditional() rule. It is a config-definition build-time guard, not a runtime data error: the faulty input is the duplicated Option instance passed to OptionRule's conditional builder.
Solutions
- Inspect the conditional() rule in the failing factory's OptionRule and remove the duplicate option from either the condition list or the required-option list
- Use distinct Option instances (different keys) for the condition and the required options of the rule
- If the same key must be referenced, reuse the same Option constant instead of declaring a second Option with an identical key
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:523 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/4cb54ae7cfe8d9f8.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:523
.ConditionalRequiredOptions) {
Option<?> requiredOptionCondition =
((RequiredOption.ConditionalRequiredOptions)
requiredOption)
.getExpression()
.getCondition()
.getOption();
Option<?> roOptionCondition =
((RequiredOption.ConditionalRequiredOptions)
ro)
.getExpression()
.getCondition()
.getOption();
if (ro.getOptions().contains(option)
&& !requiredOptionCondition.equals(
roOptionCondition)) {
throw new OptionValidationException(
String.format(
"%s '%s' duplicate in %s options.",
requiredOption
.getClass()
.getSimpleName(),
option.key(),
ro.getClass().getSimpleName()));
}
} else {
if (ro.getOptions().contains(option)) {
throw new OptionValidationException(
String.format(
"%s '%s' duplicate in %s options.",
requiredOption
.getClass()
.getSimpleName(),
option.key(),
ro.getClass().getSimpleName()));View on GitHub (pinned to cf67b549a7)