{"record":{"id":"cea36c52b8a94291","repo":"apache/seatunnel","slug":"connector-jar-storage-mode-must-in-shared-iso","errorCode":null,"errorMessage":"${CONNECTOR_JAR_STORAGE_MODE} must in [SHARED, ISOLATED]","messagePattern":"(.+?) must in \\[SHARED, ISOLATED\\]","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/YamlSeaTunnelDomConfigProcessor.java","lineNumber":464,"sourceCode":"        return checkpointPluginConfig;\n    }\n\n    private ConnectorJarStorageConfig parseConnectorJarStorageConfig(\n            Node connectorJarStorageConfigNode) {\n        ConnectorJarStorageConfig connectorJarStorageConfig = new ConnectorJarStorageConfig();\n        for (Node node : childElements(connectorJarStorageConfigNode)) {\n            String name = cleanNodeName(node);\n            if (ServerConfigOptions.MasterServerConfigOptions.ENABLE_CONNECTOR_JAR_STORAGE\n                    .key()\n                    .equals(name)) {\n                connectorJarStorageConfig.setEnable(getBooleanValue(getTextContent(node)));\n            } else if (ServerConfigOptions.MasterServerConfigOptions.CONNECTOR_JAR_STORAGE_MODE\n                    .key()\n                    .equals(name)) {\n                String mode = getTextContent(node).toUpperCase();\n                if (StringUtils.isNotBlank(mode)\n                        && !Arrays.asList(\"SHARED\", \"ISOLATED\").contains(mode)) {\n                    throw new IllegalArgumentException(\n                            ServerConfigOptions.MasterServerConfigOptions.CONNECTOR_JAR_STORAGE_MODE\n                                    + \" must in [SHARED, ISOLATED]\");\n                }\n                connectorJarStorageConfig.setStorageMode(ConnectorJarStorageMode.valueOf(mode));\n            } else if (ServerConfigOptions.MasterServerConfigOptions.CONNECTOR_JAR_STORAGE_PATH\n                    .key()\n                    .equals(name)) {\n                connectorJarStorageConfig.setStoragePath(getTextContent(node));\n            } else if (ServerConfigOptions.MasterServerConfigOptions\n                    .CONNECTOR_JAR_CLEANUP_TASK_INTERVAL\n                    .key()\n                    .equals(name)) {\n                connectorJarStorageConfig.setCleanupTaskInterval(\n                        getIntegerValue(\n                                ServerConfigOptions.MasterServerConfigOptions\n                                        .CONNECTOR_JAR_CLEANUP_TASK_INTERVAL\n                                        .key(),\n                                getTextContent(node)));","sourceCodeStart":446,"sourceCodeEnd":482,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/YamlSeaTunnelDomConfigProcessor.java#L446-L482","documentation":"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.","triggerScenarios":"Engine YAML contains the connector-jar storage mode key with a value like 'CLUSTER' or a misspelling; parseEngineConfig -> parseConnectorJarStorageConfig performs the whitelist check.","commonSituations":"Typos in seatunnel.yaml; users guessing mode names from other frameworks ('CLASSIC', 'LOCAL'); leftover values from a version with a different mode set.","solutions":["Set the value to SHARED or ISOLATED (case-insensitive).","Remove or blank the key to use the default ConnectorJarStorageMode.","Confirm supported modes in the docs for your engine version."],"exampleFix":"# before\nconnector-jar-storage:\n  mode: CLASSIC\n# after\nconnector-jar-storage:\n  mode: SHARED","handlingStrategy":"validation","validationCode":"String mode = props.getProperty(\"connector-jar-storage.mode\", \"\").trim().toUpperCase(Locale.ROOT);\nif (!mode.isEmpty() && !List.of(\"SHARED\", \"ISOLATED\").contains(mode)) {\n    throw new IllegalArgumentException(\"connector-jar-storage.mode must be SHARED or ISOLATED, got \" + mode);\n}","typeGuard":null,"tryCatchPattern":"try {\n    connectorJarStorageConfig.setStorageMode(ConnectorJarStorageMode.valueOf(mode));\n} catch (IllegalArgumentException e) {\n    throw new ConfigValidationException(\"connector-jar-storage.mode must be SHARED|ISOLATED\", e);\n}","preventionTips":["Only use SHARED or ISOLATED; leave blank/absent for the default.","Add enum whitelist validation to config CI.","Check version docs when upgrading, since accepted sets can evolve."],"tags":["config","enum","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}