{"record":{"id":"f594c1e7531ed9ac","repo":"apache/dolphinscheduler","slug":"50037","errorCode":"50037","errorMessage":"create task definition error","messagePattern":"create task definition error","errorType":"exception","errorClass":"ServiceException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java","lineNumber":288,"sourceCode":"        workflowDefinition.setExecutionType(executionType);\n\n        return createDagDefine(loginUser, taskRelationList, workflowDefinition, taskDefinitionLogs);\n    }\n\n    protected WorkflowDefinition createDagDefine(User loginUser,\n                                                 List<WorkflowTaskRelationLog> taskRelationList,\n                                                 WorkflowDefinition workflowDefinition,\n                                                 List<TaskDefinitionLog> taskDefinitionLogs) {\n        taskDatasourcePermissionChecker.checkPermission(loginUser, taskDefinitionLogs);\n        taskSubWorkflowPermissionChecker.checkPermission(loginUser, taskDefinitionLogs);\n        int saveTaskResult = processService.saveTaskDefine(loginUser, workflowDefinition.getProjectCode(),\n                taskDefinitionLogs, Boolean.TRUE);\n        if (saveTaskResult == Constants.EXIT_CODE_SUCCESS) {\n            log.info(\"The task has not changed, so skip\");\n        }\n        if (saveTaskResult == Constants.DEFINITION_FAILURE) {\n            log.error(\"Save task definition error.\");\n            throw new ServiceException(Status.CREATE_TASK_DEFINITION_ERROR);\n        }\n        int insertVersion =\n                processService.saveWorkflowDefine(loginUser, workflowDefinition, Boolean.TRUE, Boolean.TRUE);\n        if (insertVersion == 0) {\n            log.error(\"Save workflow definition error, workflowDefinitionCode:{}.\", workflowDefinition.getCode());\n            throw new ServiceException(Status.CREATE_WORKFLOW_DEFINITION_ERROR);\n        }\n        log.info(\"Save workflow definition complete, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                workflowDefinition.getCode(), insertVersion);\n        workflowDefinition.setVersion(insertVersion);\n        int insertResult = processService.saveTaskRelation(loginUser, workflowDefinition.getProjectCode(),\n                workflowDefinition.getCode(),\n                insertVersion, taskRelationList, taskDefinitionLogs, Boolean.TRUE);\n        if (insertResult != Constants.EXIT_CODE_SUCCESS) {\n            log.error(\n                    \"Save workflow task relations error, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                    workflowDefinition.getProjectCode(), workflowDefinition.getCode(), insertVersion);\n            throw new ServiceException(Status.CREATE_WORKFLOW_TASK_RELATION_ERROR);","sourceCodeStart":270,"sourceCodeEnd":306,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java#L270-L306","documentation":"Thrown by createDagDefine when the task-definition save step (saveTaskDefine via TaskDefinitionServiceImpl/Dao) returns Constants.DEFINITION_FAILURE instead of success, meaning task definition logs could not be persisted while creating the workflow's DAG.","triggerScenarios":"createWorkflowDefinition or doBatchOperateWorkflowDefinition generates taskDefinitionLogs whose persistence fails (invalid task JSON, DB insert error, constraint violation) leading saveTaskDefine to return DEFINITION_FAILURE.","commonSituations":"Malformed taskDefinitionJson in the API payload; task type plugin missing on the server; database issues (duplicate task definition code/version keys); importing workflows across incompatible versions.","solutions":["Validate taskDefinitionJson parses and each taskDefinition has valid name/type/taskParams before calling the API.","Check API server logs for the underlying exception inside saveTaskDefine to find the real cause (DB error vs bad params).","Ensure the task plugin types used are installed on this DolphinScheduler version; upgrade plugins or change task types.","Retry after fixing DB problems (space, duplicate keys, connectivity)."],"exampleFix":"// before: bad task params JSON\n\"taskDefinitionJson\": \"[{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"SHELL\\\",\\\"taskParams\\\":{\\\"rawScript\\\":}] }\"\n// after: valid taskParams\n\"taskDefinitionJson\": \"[{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"SHELL\\\",\\\"taskParams\\\":{\\\"rawScript\\\":\\\"echo hi\\\",\\\"resourceList\\\":[]}}]\"","handlingStrategy":"try-catch","validationCode":"// client-side: verify each taskDefinition JSON parses and has required fields\nfor (TaskDefinition t : taskDefinitions) {\n    if (t.getName() == null || t.getType() == null || t.getTaskParams() == null) throw new IllegalArgumentException(t.getName());\n}","typeGuard":null,"tryCatchPattern":"try {\n    workflowDefinitionService.createWorkflowDefinition(...);\n} catch (ServiceException e) {\n    if (e.getCode() == 50037) { /* inspect logs for saveTaskDefine root cause */ }\n    else throw e;\n}","preventionTips":["Validate taskDefinitionJson with the same DTOs the server uses before submitting.","Keep task plugin versions aligned between API and worker servers.","Watch database health (space, connections) during bulk workflow imports."],"tags":["task-definition","workflow-create","database-write","workflow-definition"],"backgroundTag":"database-write-failed","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"}