{"record":{"id":"2ddac162ca27faab","repo":"apache/seatunnel","slug":"init-file-storage-properties-is-not-contains-req","errorCode":null,"errorMessage":"init file storage properties is not contains ${requiredProperty}","messagePattern":"init file storage properties is not contains (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-engine/seatunnel-engine-storage/imap-storage-plugins/imap-storage-file/src/main/java/org/apache/seatunnel/engine/imap/storage/file/IMapFileStorage.java","lineNumber":361,"sourceCode":"                log.error(\"wait for write status error\", e);\n            } finally {\n                RequestFutureCache.remove(entry.getKey());\n            }\n            if (!success) {\n                failures.add(entry.getValue());\n            }\n        }\n        return failures;\n    }\n\n    private void checkInitStorageProperties(Map<String, Object> properties) {\n        if (properties == null || properties.isEmpty()) {\n            throw new IllegalArgumentException(\"init file storage properties is empty\");\n        }\n        List<String> requiredProperties = Arrays.asList(BUSINESS_KEY, CLUSTER_NAME);\n        for (String requiredProperty : requiredProperties) {\n            if (!properties.containsKey(requiredProperty)) {\n                throw new IllegalArgumentException(\n                        \"init file storage properties is not contains \" + requiredProperty);\n            }\n        }\n    }\n}\n","sourceCodeStart":343,"sourceCodeEnd":367,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-engine/seatunnel-engine-storage/imap-storage-plugins/imap-storage-file/src/main/java/org/apache/seatunnel/engine/imap/storage/file/IMapFileStorage.java#L343-L367","documentation":"checkInitStorageProperties requires the properties map passed to initialize() to contain both BUSINESS_KEY and CLUSTER_NAME; if either key is absent this IllegalArgumentException is thrown naming the missing property. The missing value is needed to build the WAL root path for the business data.","triggerScenarios":"Calling initialize() with a properties map that lacks the business key or the cluster name entry — e.g. partial YAML config or typo'd property name.","commonSituations":"Property renamed/typo'd in seatunnel.yaml (case-sensitive keys); upgrade where storage config keys changed; hand-written programmatic init missing one of the two keys.","solutions":["Add the exact missing key named in the message (business key and/or cluster name) to the storage properties.","Compare your config against the documented property names — they are case-sensitive.","Validate config before engine start by pre-checking the map in deployment scripts."],"exampleFix":"// before\nprops.put(\"cluster\", \"prod\"); // wrong key\n// after\nprops.put(\"cluster.name\", \"prod\");","handlingStrategy":"validation","validationCode":"java.util.List<String> required = java.util.Arrays.asList(\"storage.businessKey\", \"cluster.name\");\nfor (String k : required) {\n    if (!properties.containsKey(k) || properties.get(k) == null) {\n        throw new IllegalStateException(\"missing storage property: \" + k);\n    }\n}","typeGuard":null,"tryCatchPattern":"try { storage.initialize(props); } catch (IllegalArgumentException e) { /* message names the missing key; add it and re-init */ }","preventionTips":["Copy property names verbatim from the docs — they are case-sensitive","Diff your storage config against a known-good template after upgrades","Pre-validate required keys in deployment tooling"],"tags":["configuration","initialization","missing-key"],"backgroundTag":"missing-required-config-field","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"}