apache/dolphinscheduler · error
DELETE_PROJECT_ERROR_DEFINES_NOT_NULL
DELETE_PROJECT_ERROR_DEFINES_NOT_NULL
Error message
Please delete the workflow definitions in project first! project code:{}. What it means
deleteProject returns DELETE_PROJECT_ERROR_DEFINES_NOT_NULL when the project still contains workflow definitions. DolphinScheduler refuses to delete a non-empty project to avoid orphaning workflow definitions; all workflows must be deleted first.
Source
Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java:353
* delete project by code
*
* @param loginUser login user
* @param projectCode project code
* @return delete result code
*/
@Override
public Result deleteProject(User loginUser, Long projectCode) {
Result result = new Result();
Project project = projectDao.queryByCode(projectCode);
checkHasProjectWritePermissionThrowException(loginUser, project);
checkProjectAndAuthThrowException(loginUser, project, PROJECT_DELETE);
List<WorkflowDefinition> workflowDefinitionList =
workflowDefinitionDao.queryAllDefinitionList(project.getCode());
if (!workflowDefinitionList.isEmpty()) {
log.warn("Please delete the workflow definitions in project first! project code:{}.", projectCode);
putMsg(result, Status.DELETE_PROJECT_ERROR_DEFINES_NOT_NULL);
return result;
}
// delete the task group
taskGroupService.deleteTaskGroupByProjectCode(project.getCode());
boolean delete = projectDao.deleteById(project.getId());
if (delete) {
log.info("Project is deleted and id is :{}.", project.getId());
result.setData(Boolean.TRUE);
putMsg(result, Status.SUCCESS);
} else {
log.error("Project delete error, project code:{}, project name:{}.", projectCode, project.getName());
putMsg(result, Status.DELETE_PROJECT_ERROR);
}
return result;
}
View on GitHub (pinned to 02eac45a1b)
Solutions
- Delete all workflow definitions in the project first (DELETE /process-definition/{code} for each, batch delete via /process-definition/batch-delete).
- If workflows are reusable, move them to another project before deleting this project.
- Automate cleanup: list definitions via GET /process-definition/list then delete each before calling project delete.
Example fix
// before projectService.deleteProject(user, projectCode); // DELETE_PROJECT_ERROR_DEFINES_NOT_NULL // after List<WorkflowDefinition> defs = workflowDefinitionDao.queryAllDefinitionList(projectCode); defs.forEach(d -> processDefinitionService.deleteProcessDefinitionByCode(user, d.getCode())); projectService.deleteProject(user, projectCode); // now succeeds
Defensive patterns
Strategy: validation
Validate before calling
List<WorkflowDefinition> defs = workflowDefinitionDao.queryAllDefinitionList(projectCode);
if (!defs.isEmpty()) throw new IllegalStateException("delete workflow definitions first"); Try / catch
catch (ServiceException e) { if (e.getCode() == Status.DELETE_PROJECT_ERROR_DEFINES_NOT_NULL) { /* delete workflows then retry */ } } Prevention
- Always purge workflow definitions before deleting a project.
- Script teardown in the right order: workflows, then project.
- Audit projects for definitions before cleanup runs.
When it happens
Trigger: DELETE /projects/{code} (or deleteProject) while queryAllDefinitionList(project.getCode()) returns at least one workflow definition for the project.
Common situations: Cleaning up old projects that were used in production; deleting a project copied from a template that shipped with workflows; teardown scripts that delete projects but not their workflow definitions first.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Recover workflow instance failed: %s
- The workflow instance: %s status is %s, cannot repeat runnin
- Repeat running workflow instance failed: %s
- The workflow instance: %s status is %s, can not stop
- WorkflowInstance: %s stop failed: %s
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/701a1cfa091701af.
Report an issue: GitHub.