apache/seatunnel · error · org.apache.seatunnel.api.configuration.util.OptionValidationException

conditional option rule for

Error message

conditional option rule for '%s' with expression '%s' already exists.

What it means

A developer-facing duplicate guard in OptionRule.Builder.conditionalRule: a conditional rule for the same option with the same expected-value expression was already registered in this builder, so the second registration is rejected. The faulting input is the duplicate conditionalOption/expectValues pair.

Solutions

  1. Remove the duplicate conditionalRule call or merge its options into the existing rule
  2. Use distinct expect values if different behavior per value is intended
  3. Fix the connector's OptionRule definition code, not the user config
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:293 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/7a121ae475fe90d0. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:293

                                "conditional option '%s' must have expect values .",
                                conditionalOption.key()));
            }

            if (!conditionalOptionRule.hasOptions()) {
                throw new OptionValidationException(
                        String.format(
                                "conditional option rule for '%s' must have options.",
                                conditionalOption.key()));
            }

            Expression expression =
                    expectValues.stream()
                            .map(v -> Expression.of(Condition.of(conditionalOption, v)))
                            .reduce(Expression::or)
                            .get();

            if (conditionRulesMap.containsKey(expression)) {
                throw new OptionValidationException(
                        String.format(
                                "conditional option rule for '%s' with expression '%s' already exists.",
                                conditionalOption.key(), expression.toString()));
            }
            this.conditionRulesMap.put(expression, conditionalOptionRule);
            return this;
        }

        public <T> Builder conditionalRule(
                @NonNull Option<T> conditionalOption,
                @NonNull T expectValue,
                @NonNull OptionRule conditionalOptionRule) {
            return conditionalRule(
                    conditionalOption,
                    Collections.singletonList(expectValue),
                    conditionalOptionRule);
        }

View on GitHub (pinned to cf67b549a7)