apache/dolphinscheduler · error · ServiceException
130003
130003
Error message
task group status error
What it means
updateTaskGroup refuses to modify a task group whose status is not Flag.YES (i.e., the group has been closed/disabled), throwing Status.TASK_GROUP_STATUS_ERROR (code 130003). Closed groups are immutable until reopened.
Source
Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskGroupServiceImpl.java:144
log.warn("Parameter name can ot be null.");
throw new ServiceException(Status.NAME_NULL);
}
if (groupSize <= 0) {
log.warn("Parameter task group size is must bigger than 1.");
throw new ServiceException(Status.TASK_GROUP_SIZE_ERROR);
}
Long exists = taskGroupMapper.selectCount(new QueryWrapper<TaskGroup>().lambda()
.eq(TaskGroup::getName, name)
.eq(TaskGroup::getUserId, loginUser.getId())
.ne(TaskGroup::getId, id));
if (exists > 0) {
log.error("Task group with the same name already exists.");
throw new ServiceException(Status.TASK_GROUP_NAME_EXSIT);
}
if (taskGroup.getStatus() != Flag.YES) {
log.warn("Task group has been closed, taskGroupId:{}.", id);
throw new ServiceException(Status.TASK_GROUP_STATUS_ERROR);
}
taskGroup.setGroupSize(groupSize);
taskGroup.setDescription(description);
taskGroup.setUpdateTime(new Date());
if (StringUtils.isNotEmpty(name)) {
taskGroup.setName(name);
}
if (taskGroupMapper.updateById(taskGroup) <= 0) {
log.error("Update task group error, taskGroupId:{}.", id);
throw new ServiceException(Status.UPDATE_TASK_GROUP_ERROR);
}
log.info("Update task group complete, taskGroupId:{}.", id);
return taskGroup;
}
@Override
public PageInfo<TaskGroup> queryAllTaskGroup(User loginUser, String name, Integer status, int pageNo,
int pageSize) {View on GitHub (pinned to 02eac45a1b)
Solutions
- Reopen the task group (set status back to yes/open) before updating it.
- Check group status via the API before issuing updates and skip closed groups.
- Create a new active group instead of editing the closed one.
Example fix
// before
updateTaskGroup(user, closedGroupId, name, desc, size); // fails, group closed
// after
if (apiClient.getTaskGroup(id).getStatus() == Flag.YES) {
updateTaskGroup(user, id, name, desc, size);
} else {
apiClient.openTaskGroup(id);
updateTaskGroup(user, id, name, desc, size);
} Defensive patterns
Strategy: try-catch
Validate before calling
TaskGroup g = api.getTaskGroup(id);
if (g.getStatus() != Flag.YES) { api.openTaskGroup(id); /* or skip */ } Try / catch
try { api.updateTaskGroup(u, id, name, desc, size); }
catch (ServiceException e) { if (e.getCode() == 130003) { api.openTaskGroup(id); retry(); } } Prevention
- Check group status before any update
- Refresh stale UI forms before saving edits
- Alert operators when automations target closed groups
When it happens
Trigger: POST /task-group/update-or-create (update path) targeting a group whose t_ds_task_group.status is 0 (closed), typically after closeTaskGroup was called on it.
Common situations: Automations updating groups without checking their status; a group closed by an admin while a user still edits it in a stale UI form; scripts that close then try to resize groups.
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
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/24502d8008182367.
Report an issue: GitHub.