{"record":{"id":"04dbfff720cf4ab7","repo":"apache/seatunnel","slug":"set-checkpoint-mode-failed-unknown-checkpoint-mod","errorCode":null,"errorMessage":"set checkpoint.mode failed, unknown checkpoint.mode [{}],only support exactly-once,at-least-once","messagePattern":"set checkpoint\\.mode failed, unknown checkpoint\\.mode \\[(.+?)\\],only support exactly-once,at-least-once","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-core/seatunnel-flink-starter/seatunnel-flink-starter-common/src/main/java/org/apache/seatunnel/core/starter/flink/execution/AbstractFlinkRuntimeEnvironment.java","lineNumber":129,"sourceCode":"        } else if (EnvironmentUtil.hasPathAndWaring(config, ConfigKeyName.CHECKPOINT_TIMEOUT)) {\n            long timeout = config.getLong(ConfigKeyName.CHECKPOINT_TIMEOUT);\n            checkpointConfig.setCheckpointTimeout(timeout);\n        } else if (config.hasPath(EnvCommonOptions.CHECKPOINT_MIN_PAUSE.key())) {\n            long minPause = config.getLong(EnvCommonOptions.CHECKPOINT_MIN_PAUSE.key());\n            checkpointConfig.setMinPauseBetweenCheckpoints(minPause);\n        }\n\n        if (EnvironmentUtil.hasPathAndWaring(config, ConfigKeyName.CHECKPOINT_MODE)) {\n            String mode = config.getString(ConfigKeyName.CHECKPOINT_MODE);\n            switch (mode.toLowerCase()) {\n                case \"exactly-once\":\n                    checkpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);\n                    break;\n                case \"at-least-once\":\n                    checkpointConfig.setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);\n                    break;\n                default:\n                    LOGGER.warn(\n                            \"set checkpoint.mode failed, unknown checkpoint.mode [{}],only support exactly-once,at-least-once\",\n                            mode);\n                    break;\n            }\n        }\n\n        if (EnvironmentUtil.hasPathAndWaring(config, ConfigKeyName.CHECKPOINT_DATA_URI)) {\n            String uri = config.getString(ConfigKeyName.CHECKPOINT_DATA_URI);\n            StateBackend fsStateBackend = new FsStateBackend(uri);\n            if (EnvironmentUtil.hasPathAndWaring(config, ConfigKeyName.STATE_BACKEND)) {\n                String stateBackend = config.getString(ConfigKeyName.STATE_BACKEND);\n                if (\"rocksdb\".equalsIgnoreCase(stateBackend)) {\n                    StateBackend rocksDBStateBackend =\n                            new RocksDBStateBackend(fsStateBackend, TernaryBoolean.TRUE);\n                    environment.setStateBackend(rocksDBStateBackend);\n                }\n            } else {\n                environment.setStateBackend(fsStateBackend);","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-core/seatunnel-flink-starter/seatunnel-flink-starter-common/src/main/java/org/apache/seatunnel/core/starter/flink/execution/AbstractFlinkRuntimeEnvironment.java#L111-L147","documentation":"This warning is emitted by AbstractFlinkRuntimeEnvironment.setCheckpoint when the user-provided 'checkpoint.mode' value in the SeaTunnel env block does not match one of the supported Flink checkpointing modes ('exactly-once' or 'at-least-once'). Instead of failing the job, the starter logs a warning and leaves the checkpointing mode unset, so Flink defaults apply. It signals a config typo rather than a runtime failure.","triggerScenarios":"A job config's env block contains 'checkpoint.mode' with any value other than 'exactly-once' or 'at-least-once' (case-sensitive), e.g. 'exactly_once', 'EXACTLY-ONCE', 'once', or a misspelling; the value is passed through createStreamEnvironment -> setCheckpoint.","commonSituations":"Copying example configs that use underscores instead of hyphens; uppercase values after hand-editing; migrating configs from engines with different mode names (e.g. Flink SQL 'EXACTLY_ONCE' constants).","solutions":["Fix checkpoint.mode in the env block of the SeaTunnel config to exactly 'exactly-once' or 'at-least-once' (lowercase, hyphenated).","Remove the checkpoint.mode key entirely to accept the Flink default.","Check the starter logs for this warning after job submission to confirm the mode took effect."],"exampleFix":"// before\nenv {\n  checkpoint.mode = EXACTLY_ONCE\n}\n// after\nenv {\n  checkpoint.mode = \"exactly-once\"\n}","handlingStrategy":"validation","validationCode":"String mode = config.getString(\"checkpoint.mode\");\nif (!java.util.Arrays.asList(\"exactly-once\",\"at-least-once\").contains(mode)) {\n    throw new IllegalArgumentException(\"checkpoint.mode must be exactly-once or at-least-once, got: \" + mode);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep enum-like env values lowercase and hyphenated per SeaTunnel docs.","Grep job configs in CI for checkpoint.mode values outside the allowed set.","Watch job logs for 'set checkpoint.mode failed' warnings after config changes."],"tags":["flink","config","checkpointing"],"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"}