apache/seatunnel · error · IllegalArgumentException

must in [SHARED, ISOLATED]

Error message

${CONNECTOR_JAR_STORAGE_MODE} must in [SHARED, ISOLATED]

What it means

parseConnectorJarStorageConfig validates CONNECTOR_JAR_STORAGE_MODE against [SHARED, ISOLATED] (case-insensitive; blank tolerated). A non-blank value outside that set throws IllegalArgumentException naming the option key, guarding ConnectorJarStorageMode.valueOf.

Solutions

  1. Set the value to SHARED or ISOLATED (case-insensitive).
  2. Remove or blank the key to use the default ConnectorJarStorageMode.
  3. Confirm supported modes in the docs for your engine version.

Example fix

# before
connector-jar-storage:
  mode: CLASSIC
# after
connector-jar-storage:
  mode: SHARED
Defensive patterns

Strategy: validation

Validate before calling

String mode = props.getProperty("connector-jar-storage.mode", "").trim().toUpperCase(Locale.ROOT);
if (!mode.isEmpty() && !List.of("SHARED", "ISOLATED").contains(mode)) {
    throw new IllegalArgumentException("connector-jar-storage.mode must be SHARED or ISOLATED, got " + mode);
}

Try / catch

try {
    connectorJarStorageConfig.setStorageMode(ConnectorJarStorageMode.valueOf(mode));
} catch (IllegalArgumentException e) {
    throw new ConfigValidationException("connector-jar-storage.mode must be SHARED|ISOLATED", e);
}

Prevention

When it happens

Trigger: Engine YAML contains the connector-jar storage mode key with a value like 'CLUSTER' or a misspelling; parseEngineConfig -> parseConnectorJarStorageConfig performs the whitelist check.

Common situations: Typos in seatunnel.yaml; users guessing mode names from other frameworks ('CLASSIC', 'LOCAL'); leftover values from a version with a different mode set.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/cea36c52b8a94291. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/YamlSeaTunnelDomConfigProcessor.java:464

        return checkpointPluginConfig;
    }

    private ConnectorJarStorageConfig parseConnectorJarStorageConfig(
            Node connectorJarStorageConfigNode) {
        ConnectorJarStorageConfig connectorJarStorageConfig = new ConnectorJarStorageConfig();
        for (Node node : childElements(connectorJarStorageConfigNode)) {
            String name = cleanNodeName(node);
            if (ServerConfigOptions.MasterServerConfigOptions.ENABLE_CONNECTOR_JAR_STORAGE
                    .key()
                    .equals(name)) {
                connectorJarStorageConfig.setEnable(getBooleanValue(getTextContent(node)));
            } else if (ServerConfigOptions.MasterServerConfigOptions.CONNECTOR_JAR_STORAGE_MODE
                    .key()
                    .equals(name)) {
                String mode = getTextContent(node).toUpperCase();
                if (StringUtils.isNotBlank(mode)
                        && !Arrays.asList("SHARED", "ISOLATED").contains(mode)) {
                    throw new IllegalArgumentException(
                            ServerConfigOptions.MasterServerConfigOptions.CONNECTOR_JAR_STORAGE_MODE
                                    + " must in [SHARED, ISOLATED]");
                }
                connectorJarStorageConfig.setStorageMode(ConnectorJarStorageMode.valueOf(mode));
            } else if (ServerConfigOptions.MasterServerConfigOptions.CONNECTOR_JAR_STORAGE_PATH
                    .key()
                    .equals(name)) {
                connectorJarStorageConfig.setStoragePath(getTextContent(node));
            } else if (ServerConfigOptions.MasterServerConfigOptions
                    .CONNECTOR_JAR_CLEANUP_TASK_INTERVAL
                    .key()
                    .equals(name)) {
                connectorJarStorageConfig.setCleanupTaskInterval(
                        getIntegerValue(
                                ServerConfigOptions.MasterServerConfigOptions
                                        .CONNECTOR_JAR_CLEANUP_TASK_INTERVAL
                                        .key(),
                                getTextContent(node)));

View on GitHub (pinned to cf67b549a7)