{"record":{"id":"c50a3e091833755f","repo":"apache/dolphinscheduler","slug":"10107-c50a3e","errorCode":"10107","errorMessage":"update workflow definition error","messagePattern":"update workflow 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":751,"sourceCode":"            }\n        } else {\n            isChange = true;\n        }\n        if (!isChange) {\n            log.info(\n                    \"workflow definition does not need to be updated because there is no change, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                    workflowDefinition.getProjectCode(), workflowDefinition.getCode(), workflowDefinition.getVersion());\n            return workflowDefinition;\n        }\n        log.info(\n                \"workflow definition needs to be updated, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                workflowDefinition.getProjectCode(), workflowDefinition.getCode(), workflowDefinition.getVersion());\n        workflowDefinition.setUpdateTime(new Date());\n        int insertVersion =\n                processService.saveWorkflowDefine(loginUser, workflowDefinition, Boolean.TRUE, Boolean.TRUE);\n        if (insertVersion <= 0) {\n            log.error(\"Update workflow definition error, workflowDefinitionCode:{}.\", workflowDefinition.getCode());\n            throw new ServiceException(Status.UPDATE_WORKFLOW_DEFINITION_ERROR);\n        }\n        log.info(\n                \"Update workflow definition complete, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                workflowDefinition.getCode(), insertVersion);\n        workflowDefinition.setVersion(insertVersion);\n\n        taskUsedInOtherTaskValid(loginUser, workflowDefinition, taskRelationList);\n        int insertResult = processService.saveTaskRelation(loginUser, workflowDefinition.getProjectCode(),\n                workflowDefinition.getCode(), insertVersion, taskRelationList, taskDefinitionLogs, Boolean.TRUE);\n        if (insertResult != Constants.EXIT_CODE_SUCCESS) {\n            log.error(\n                    \"Update workflow task relations error, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                    workflowDefinition.getProjectCode(), workflowDefinition.getCode(), insertVersion);\n            throw new ServiceException(Status.UPDATE_WORKFLOW_DEFINITION_ERROR);\n        }\n        log.info(\n                \"Update workflow task relations complete, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.\",\n                workflowDefinition.getProjectCode(), workflowDefinition.getCode(), insertVersion);","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java#L733-L769","documentation":"Thrown when processService.saveWorkflowDefine returns a version <= 0, meaning the updated workflow definition row (including its new log version) failed to persist. This is the generic 'workflow update failed' signal from the definition save step of updateDagDefine.","triggerScenarios":"updateWorkflowDefinition or batch update where the DB insert/update of the definition fails — DB constraint violation, connection failure, or invalid definition state.","commonSituations":"Database connectivity issues, unique key conflicts, oversized definition payloads, DB under transaction failure after task save succeeded.","solutions":["Check DolphinScheduler server logs and DB health for the root cause of saveWorkflowDefine failure","Retry the update after confirming the database is reachable","Verify the definition fields (name, timeouts, locations) satisfy DB constraints","Re-run the update once the transient DB issue is resolved"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// pre-check DB connectivity and constraint-sensitive fields before update\nboolean dbUp = checkDatabaseHealth();","typeGuard":null,"tryCatchPattern":"try { ... } catch (ServiceException e) { if (e.getCode() == 10107) { /* log and retry with backoff */ } }","preventionTips":["Monitor DolphinScheduler DB health","Keep definition payloads within DB limits","Retry transient DB failures with backoff"],"tags":["workflow","database","persistence"],"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"}