apache/dolphinscheduler · error · ServiceException
50021
50021
Error message
workflow definition [{0}] is already online What it means
Thrown in switchVersion when processService.isTaskOnline(taskCode) reports the task is currently used by an ONLINE (released) workflow definition. Switching versions of a task that is live in a published workflow is forbidden; the task must be taken offline first.
Source
Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java:204
/**
* switch task definition
*
* @param loginUser login user
* @param projectCode project code
* @param taskCode task code
* @param version the version user want to switch
*/
@Transactional
@Override
public void switchVersion(User loginUser, long projectCode, long taskCode, int version) {
Project project = projectDao.queryByCode(projectCode);
projectService.checkHasProjectWritePermissionThrowException(loginUser, project);
if (processService.isTaskOnline(taskCode)) {
log.warn(
"Task definition version can not be switched due to workflow definition is {}, taskDefinitionCode:{}.",
ReleaseState.ONLINE.getDescp(), taskCode);
throw new ServiceException(Status.WORKFLOW_DEFINE_STATE_ONLINE);
}
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));
}
TaskDefinitionLog taskDefinitionUpdate =
taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskCode, version);
taskDatasourcePermissionChecker.checkPermission(loginUser, Collections.singletonList(taskDefinitionUpdate));
taskSubWorkflowPermissionChecker.checkPermission(loginUser, Collections.singletonList(taskDefinitionUpdate));
taskDefinitionUpdate.setUserId(loginUser.getId());
taskDefinitionUpdate.setUpdateTime(new Date());
taskDefinitionUpdate.setId(taskDefinition.getId());
boolean switchSuccess = taskDefinitionDao.updateById(taskDefinitionUpdate);
if (!switchSuccess) {
log.error("Task definition version switch error, taskDefinitionCode:{}.", taskCode);
throw new ServiceException(Status.SWITCH_TASK_DEFINITION_VERSION_ERROR);
}View on GitHub (pinned to 02eac45a1b)
Solutions
- Set the workflow definition to OFFLINE, then switch the task version, then re-publish.
- Choose a task that is not part of an online workflow.
- Inform the workflow owner that the change requires taking the workflow offline.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java:204 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/e1f7a92bf5fa7754.
Report an issue: GitHub.