{"record":{"id":"7071328cb0d4ae9d","repo":"apache/dolphinscheduler","slug":"the-exectype-should-be-start-process","errorCode":null,"errorMessage":"The execType should be START_PROCESS","messagePattern":"The execType should be START_PROCESS","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java","lineNumber":59,"sourceCode":"                                        StartParamListValidator startParamListValidator) {\n        this.tenantExistValidator = tenantExistValidator;\n        this.startParamListValidator = startParamListValidator;\n    }\n\n    @Override\n    public void validate(final BackfillWorkflowDTO backfillWorkflowDTO) {\n        final BackfillWorkflowDTO.BackfillParamsDTO backfillParams = backfillWorkflowDTO.getBackfillParams();\n        if (backfillParams == null) {\n            throw new IllegalArgumentException(\"backfillParams is null\");\n        }\n        if (CollectionUtils.isEmpty(backfillParams.getBackfillDateList())) {\n            throw new IllegalArgumentException(\"backfillDateList is empty\");\n        }\n        if (backfillParams.getExpectedParallelismNumber() < 0) {\n            throw new IllegalArgumentException(\"expectedParallelismNumber should >= 0\");\n        }\n        if (backfillWorkflowDTO.getExecType() != CommandType.COMPLEMENT_DATA) {\n            throw new IllegalArgumentException(\"The execType should be START_PROCESS\");\n        }\n        if (backfillWorkflowDTO.getWorkflowDefinition() == null) {\n            throw new IllegalArgumentException(\"The workflowDefinition should not be null\");\n        }\n        if (backfillWorkflowDTO.getWorkflowDefinition().getReleaseState() != ReleaseState.ONLINE) {\n            throw new IllegalStateException(\"The workflowDefinition should be online\");\n        }\n\n        tenantExistValidator.validate(backfillWorkflowDTO.getTenantCode());\n\n        startParamListValidator.validate(backfillWorkflowDTO.getStartParamList());\n    }\n}\n","sourceCodeStart":41,"sourceCodeEnd":73,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java#L41-L73","documentation":"BackfillWorkflowDTOValidator.validate requires the workflow's execType to be CommandType.COMPLEMENT_DATA for a backfill. The message text says START_PROCESS but the actual comparison in this validator is execType != COMPLEMENT_DATA, so any other exec type triggers IllegalArgumentException('The execType should be START_PROCESS'). Backfill is implemented as a complement-data execution, so other start types are rejected.","triggerScenarios":"Submitting a backfill request whose execType is START_PROCESS, RECOVER_TOLERANCE_FAULT_PROCESS, SCHEDULER, or any CommandType other than COMPLEMENT_DATA.","commonSituations":"Reusing a 'run workflow' client payload for the backfill endpoint; confusing the backfill endpoint with the trigger endpoint (which does require START_PROCESS); SDK defaulting execType to START_PROCESS; server-side copy of an older trigger validator wording.","solutions":["Set execType to CommandType.COMPLEMENT_DATA in the backfill request.","Verify you are calling the backfill endpoint, not the trigger endpoint; trigger requires START_PROCESS instead.","Update client/SDK defaults so backfill requests use COMPLEMENT_DATA.","If you intend a normal run, use the trigger API with execType START_PROCESS instead of the backfill API."],"exampleFix":"// before\ndto.setExecType(CommandType.START_PROCESS); // used backfill endpoint\n// after\ndto.setExecType(CommandType.COMPLEMENT_DATA); // required by BackfillWorkflowDTOValidator","handlingStrategy":"validation","validationCode":"if (dto.execType !== 'COMPLEMENT_DATA') {\n  throw new Error('Backfill requires execType COMPLEMENT_DATA');\n}","typeGuard":"function isBackfillExecType(dto) {\n  return dto?.execType === 'COMPLEMENT_DATA';\n}","tryCatchPattern":"try {\n  backfill(dto);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().contains(\"execType should be\")) {\n    // switch endpoint or fix execType and retry\n  }\n}","preventionTips":["Use the backfill client wrapper that hard-codes COMPLEMENT_DATA.","Don't share one request template between trigger and backfill endpoints.","Set SDK default execType per endpoint.","Note the misleading message text; the validator actually compares against COMPLEMENT_DATA."],"tags":["backfill","exec-type","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}