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

  1. Reopen the task group (set status back to yes/open) before updating it.
  2. Check group status via the API before issuing updates and skip closed groups.
  3. 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

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.