{"record":{"id":"f3737b40e870f8f3","repo":"apache/dolphinscheduler","slug":"main-table-using-version-f3737b","errorCode":"MAIN_TABLE_USING_VERSION","errorMessage":"Task definition can not be deleted due to version is being used, projectCode:{}, taskDefinitionCode:{}, version:{}.","messagePattern":"Task definition can not be deleted due to version is being used, projectCode:(.+?), taskDefinitionCode:(.+?), version:(.+?)\\.","errorType":"error_code","errorClass":"ServiceException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java","lineNumber":277,"sourceCode":"        pageInfo.setTotal((int) taskDefinitionVersionsPaging.getTotal());\n        result.setData(pageInfo);\n        putMsg(result, Status.SUCCESS);\n        return result;\n    }\n\n    @Override\n    public void deleteByCodeAndVersion(User loginUser, long projectCode, long taskCode, int version) {\n        Project project = projectDao.queryByCode(projectCode);\n        // check if user have write perm for project\n        projectService.checkHasProjectWritePermissionThrowException(loginUser, project);\n\n        TaskDefinition taskDefinition = taskDefinitionDao.queryByCode(taskCode);\n        if (taskDefinition == null || projectCode != taskDefinition.getProjectCode()) {\n            log.error(\"Task definition does not exist, taskDefinitionCode:{}.\", taskCode);\n            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, String.valueOf(taskCode));\n        }\n        if (taskDefinition.getVersion() == version) {\n            log.warn(\n                    \"Task definition can not be deleted due to version is being used, projectCode:{}, taskDefinitionCode:{}, version:{}.\",\n                    projectCode, taskCode, version);\n            throw new ServiceException(Status.MAIN_TABLE_USING_VERSION);\n        }\n        int delete = taskDefinitionLogMapper.deleteByCodeAndVersion(taskCode, version);\n        if (delete <= 0) {\n            log.error(\"Task definition version delete error, projectCode:{}, taskDefinitionCode:{}, version:{}.\",\n                    projectCode, taskCode, version);\n            throw new ServiceException(Status.DELETE_TASK_DEFINITION_VERSION_ERROR);\n        }\n        log.info(\n                \"Task definition version delete complete, projectCode:{}, taskDefinitionCode:{}, version:{}.\",\n                projectCode, taskCode, version);\n    }\n\n    @Override\n    public TaskDefinitionVO queryTaskDefinitionDetail(User loginUser, long projectCode, long taskCode) {\n        Project project = projectDao.queryByCode(projectCode);","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java#L259-L295","documentation":"Thrown by TaskDefinitionServiceImpl.deleteByCodeAndVersion when the requested version equals the task definition's current version (taskDefinition.getVersion() == version). The version is still in use by the main task definition row, so deleting its history record is forbidden.","triggerScenarios":"DELETE /task-definition/{projectCode}/{taskCode}/{version} where the version parameter matches the task definition's active version in t_ds_task_definition.","commonSituations":"Cleanup scripts deleting old task versions that accidentally include the current one; users deleting 'version 1' when the task was never edited past version 1.","solutions":["Choose a version number lower than the task definition's current version to delete.","Check the task's current version via the task-definition API before deleting any version.","If the current version itself must be removed, delete or modify the task definition (not just a version) through the proper task-definition delete/update API."],"exampleFix":"// before\ndeleteByCodeAndVersion(loginUser, projectCode, taskCode, currentVersion); // fails\n// after\nint currentVersion = taskDefinition.getVersion();\nif (version < currentVersion) {\n    deleteByCodeAndVersion(loginUser, projectCode, taskCode, version); // ok\n}","handlingStrategy":"validation","validationCode":"TaskDefinition td = taskDefinitionDao.queryByCode(taskCode);\nif (td != null && version >= td.getVersion()) {\n  throw new IllegalStateException('Only versions older than ' + td.getVersion() + ' can be deleted');\n}","typeGuard":null,"tryCatchPattern":"try {\n    taskDefinitionService.deleteByCodeAndVersion(loginUser, projectCode, taskCode, version);\n} catch (ServiceException e) {\n    if (e.getCode() == Status.MAIN_TABLE_USING_VERSION) {\n        // skip or pick an older version\n    } else { throw e; }\n}","preventionTips":["Fetch the current version first and only delete strictly older versions.","In cleanup scripts, iterate versions from 1 up to currentVersion - 1.","Never attempt to delete the active version; retire the whole task definition instead."],"tags":["task-definition","versioning","delete-blocked"],"backgroundTag":"resource-in-use","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"}