apache/dolphinscheduler · error · ServiceException
MAIN_TABLE_USING_VERSION
MAIN_TABLE_USING_VERSION
Error message
Task definition can not be deleted due to version is being used, projectCode:{}, taskDefinitionCode:{}, version:{}. What it means
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.
Source
Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java:277
pageInfo.setTotal((int) taskDefinitionVersionsPaging.getTotal());
result.setData(pageInfo);
putMsg(result, Status.SUCCESS);
return result;
}
@Override
public void deleteByCodeAndVersion(User loginUser, long projectCode, long taskCode, int version) {
Project project = projectDao.queryByCode(projectCode);
// check if user have write perm for project
projectService.checkHasProjectWritePermissionThrowException(loginUser, project);
TaskDefinition taskDefinition = taskDefinitionDao.queryByCode(taskCode);
if (taskDefinition == null || projectCode != taskDefinition.getProjectCode()) {
log.error("Task definition does not exist, taskDefinitionCode:{}.", taskCode);
throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, String.valueOf(taskCode));
}
if (taskDefinition.getVersion() == version) {
log.warn(
"Task definition can not be deleted due to version is being used, projectCode:{}, taskDefinitionCode:{}, version:{}.",
projectCode, taskCode, version);
throw new ServiceException(Status.MAIN_TABLE_USING_VERSION);
}
int delete = taskDefinitionLogMapper.deleteByCodeAndVersion(taskCode, version);
if (delete <= 0) {
log.error("Task definition version delete error, projectCode:{}, taskDefinitionCode:{}, version:{}.",
projectCode, taskCode, version);
throw new ServiceException(Status.DELETE_TASK_DEFINITION_VERSION_ERROR);
}
log.info(
"Task definition version delete complete, projectCode:{}, taskDefinitionCode:{}, version:{}.",
projectCode, taskCode, version);
}
@Override
public TaskDefinitionVO queryTaskDefinitionDetail(User loginUser, long projectCode, long taskCode) {
Project project = projectDao.queryByCode(projectCode);View on GitHub (pinned to 02eac45a1b)
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.
Example fix
// before
deleteByCodeAndVersion(loginUser, projectCode, taskCode, currentVersion); // fails
// after
int currentVersion = taskDefinition.getVersion();
if (version < currentVersion) {
deleteByCodeAndVersion(loginUser, projectCode, taskCode, version); // ok
} Defensive patterns
Strategy: validation
Validate before calling
TaskDefinition td = taskDefinitionDao.queryByCode(taskCode);
if (td != null && version >= td.getVersion()) {
throw new IllegalStateException('Only versions older than ' + td.getVersion() + ' can be deleted');
} Try / catch
try {
taskDefinitionService.deleteByCodeAndVersion(loginUser, projectCode, taskCode, version);
} catch (ServiceException e) {
if (e.getCode() == Status.MAIN_TABLE_USING_VERSION) {
// skip or pick an older version
} else { throw e; }
} Prevention
- 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.
When it happens
Trigger: DELETE /task-definition/{projectCode}/{taskCode}/{version} where the version parameter matches the task definition's active version in t_ds_task_definition.
Common situations: 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.
Related errors
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/f3737b40e870f8f3.
Report an issue: GitHub.