apache/dolphinscheduler · error · ServiceException

50032

50032

Error message

create workflow task relation error

What it means

Thrown by createDagDefine when processService.saveTaskRelation returns a code other than Constants.EXIT_CODE_SUCCESS, meaning the workflow-task relation edges (DAG lineages between tasks) could not be saved after the definition was created.

Source

Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java:306

            throw new ServiceException(Status.CREATE_TASK_DEFINITION_ERROR);
        }
        int insertVersion =
                processService.saveWorkflowDefine(loginUser, workflowDefinition, Boolean.TRUE, Boolean.TRUE);
        if (insertVersion == 0) {
            log.error("Save workflow definition error, workflowDefinitionCode:{}.", workflowDefinition.getCode());
            throw new ServiceException(Status.CREATE_WORKFLOW_DEFINITION_ERROR);
        }
        log.info("Save workflow definition complete, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
                workflowDefinition.getCode(), insertVersion);
        workflowDefinition.setVersion(insertVersion);
        int insertResult = processService.saveTaskRelation(loginUser, workflowDefinition.getProjectCode(),
                workflowDefinition.getCode(),
                insertVersion, taskRelationList, taskDefinitionLogs, Boolean.TRUE);
        if (insertResult != Constants.EXIT_CODE_SUCCESS) {
            log.error(
                    "Save workflow task relations error, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
                    workflowDefinition.getProjectCode(), workflowDefinition.getCode(), insertVersion);
            throw new ServiceException(Status.CREATE_WORKFLOW_TASK_RELATION_ERROR);
        }
        log.info(
                "Save workflow task relations complete, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
                workflowDefinition.getProjectCode(), workflowDefinition.getCode(), insertVersion);

        saveWorkflowLineage(workflowDefinition.getProjectCode(), workflowDefinition.getCode(),
                insertVersion, taskDefinitionLogs);
        return workflowDefinition;
    }

    @Override
    public void saveWorkflowLineage(long projectCode,
                                    long workflowDefinitionCode,
                                    int workflowDefinitionVersion,
                                    List<TaskDefinitionLog> taskDefinitionLogList) {
        List<WorkflowTaskLineage> workflowTaskLineageList = generateWorkflowLineageList(taskDefinitionLogList,
                workflowDefinitionCode, workflowDefinitionVersion);

View on GitHub (pinned to 02eac45a1b)

Solutions

  1. Ensure taskRelationJson entries only reference task names/codes present in taskDefinitionJson and that preTasks form a valid DAG.
  2. Regenerate taskRelationJson from the UI or a current-version export rather than hand-editing.
  3. Check API logs for the exception inside saveTaskRelation and fix the DB issue; retry creation.

Example fix

// before: relation references unknown task
"taskRelationJson": "[{\"preTaskName\":\"start\",\"postTaskName\":\"ghost_task\"}]"
// after: all endpoints exist in taskDefinitionJson
"taskRelationJson": "[{\"preTaskName\":\"start\",\"postTaskName\":\"a\"}]" // 'a' defined above
Defensive patterns

Strategy: validation

Validate before calling

Set<String> names = taskDefinitions.stream().map(TaskDefinition::getName).collect(Collectors.toSet());
boolean valid = taskRelations.stream().allMatch(r ->
    (r.getPreTaskName() == null || names.contains(r.getPreTaskName()))
    && names.contains(r.getPostTaskName()));

Try / catch

try {
    workflowDefinitionService.createWorkflowDefinition(...);
} catch (ServiceException e) {
    if (e.getCode() == 50032) { /* fix taskRelationJson endpoints, retry */ }
    else throw e;
}

Prevention

When it happens

Trigger: createWorkflowDefinition/doBatchOperateWorkflowDefinition with taskRelationJson referencing task codes/names inconsistent with the generated taskDefinitionLogs, or a DB failure inserting relation log rows.

Common situations: Hand-crafted taskRelationJson with wrong preTask/postTask names or missing tasks; relation list referencing tasks not in taskDefinitionJson; importing a DAG exported from a different version; DB transaction errors.

Related errors


AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06). Data as JSON: /api/errors/075ee8226ecf4dad. Report an issue: GitHub.