{"record":{"id":"fda55279469b4b7b","repo":"apache/seatunnel","slug":"unknown-checkpoint-type","errorCode":null,"errorMessage":"Unknown checkpoint type: ","messagePattern":"Unknown checkpoint type: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/checkpoint/CheckpointType.java","lineNumber":46,"sourceCode":"    /** Automatically triggered by the schema change. */\n    SCHEMA_CHANGE_AFTER_POINT_TYPE(true, \"schema-change-after-point\"),\n\n    /** Triggered by the user. */\n    SAVEPOINT_TYPE(false, \"savepoint\"),\n\n    /** Automatically triggered by the Task. */\n    COMPLETED_POINT_TYPE(true, \"completed-point\");\n\n    private final boolean auto;\n    private final String name;\n\n    public static CheckpointType fromName(String name) {\n        for (CheckpointType type : CheckpointType.values()) {\n            if (type.name.equals(name)) {\n                return type;\n            }\n        }\n        throw new IllegalArgumentException(\"Unknown checkpoint type: \" + name);\n    }\n\n    CheckpointType(boolean auto, String name) {\n        this.auto = auto;\n        this.name = name;\n    }\n\n    public boolean isAuto() {\n        return auto;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public boolean isFinalCheckpoint() {\n        return this == COMPLETED_POINT_TYPE || this == SAVEPOINT_TYPE;\n    }","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/checkpoint/CheckpointType.java#L28-L64","documentation":"CheckpointType.fromName converts a checkpoint type name string (e.g. from job config) into the CheckpointType enum; when no enum constant's name matches the input it throws an IllegalArgumentException. Valid names are the enum constants such as 'checkpoint'/'savepoint' style types defined in CheckpointType.","triggerScenarios":"Calling CheckpointType.fromName(name) with a string that is not an exact match of any enum constant's name — typically an unknown value read from job configuration or deserialized state.","commonSituations":"Typo or wrong case in job config (e.g. 'SavePoint' vs 'savepoint'); restoring a job with a checkpoint type name produced by an incompatible older/newer SeaTunnel version; hand-edited job JSON.","solutions":["Use one of the exact enum names accepted by CheckpointType (check the enum constants in CheckpointType.java) with correct case.","Omit the option to use the default checkpoint type for normal streaming/batch jobs.","If migrating from an older version, update persisted job/state files to the current enum names."],"exampleFix":"// before\nCheckpointType.fromName(\"SavePoint\");\n// after\nCheckpointType.fromName(\"savepoint\");","handlingStrategy":"validation","validationCode":"Set<String> valid = Arrays.stream(CheckpointType.values()).map(CheckpointType::name).collect(Collectors.toSet());\nif (!valid.contains(inputName)) throw new IllegalArgumentException(\"checkpoint type must be one of \" + valid + \", got: \" + inputName);","typeGuard":null,"tryCatchPattern":"try { CheckpointType.fromName(name); } catch (IllegalArgumentException e) { log.error(\"bad checkpoint type '{}', use exact enum name\", name, e); throw e; }","preventionTips":["Use CheckpointType enum constants directly in code instead of raw strings.","Copy config values from docs, matching case exactly.","When migrating, regenerate job/savepoint metadata instead of hand-editing names."],"tags":["enum","checkpoint","zeta-engine"],"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-14T05:17:10.506Z"}