conductor-oss/conductor · error · NotFoundException

No such taskType found by name: %s

Error message

No such taskType found by name: %s

What it means

Thrown by MetadataServiceImpl.getTaskDef when metadataDAO.getTaskDef(taskType) returns null, meaning no TaskDef is registered under that name. It surfaces as an HTTP 404 (NotFoundException maps to NOT_FOUND) when a client requests a task definition that does not exist in the metadata store. The placeholder %s is filled with the requested taskType name.

Source

Thrown at core/src/main/java/com/netflix/conductor/service/MetadataServiceImpl.java:118

        metadataDAO.removeTaskDef(taskType);
        metadataChangeListener.onTaskDefUnregistered(taskType);
    }

    /**
     * @return List of all the registered tasks
     */
    public List<TaskDef> getTaskDefs() {
        return metadataDAO.getAllTaskDefs();
    }

    /**
     * @param taskType Task to retrieve
     * @return Task Definition
     */
    public TaskDef getTaskDef(String taskType) {
        TaskDef taskDef = metadataDAO.getTaskDef(taskType);
        if (taskDef == null) {
            throw new NotFoundException("No such taskType found by name: %s", taskType);
        }
        return taskDef;
    }

    /**
     * @param workflowDef Workflow definition to be updated
     */
    public void updateWorkflowDef(WorkflowDef workflowDef) {
        workflowDef.setUpdateTime(System.currentTimeMillis());
        metadataDAO.updateWorkflowDef(workflowDef);
        metadataChangeListener.onWorkflowDefUpdated(workflowDef);
    }

    /**
     * @param workflowDefList Workflow definitions to be updated.
     */
    public BulkResponse<String> updateWorkflowDef(List<WorkflowDef> workflowDefList) {
        BulkResponse<String> bulkResponse = new BulkResponse<>();

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Verify the exact taskType spelling against registered defs via GET /api/metadata/taskdefs (list all).
  2. Register the missing definition with POST /api/metadata/taskdefs using the correct name.
  3. If the def was deleted, re-register it from your definition-as-code source.
  4. Confirm you are pointed at the correct cluster/environment metadata store.

Example fix

// before
TaskDef def = metadataService.getTaskDef("myTaskX"); // throws

// after
List<TaskDef> all = metadataService.getTaskDefs();
boolean exists = all.stream().anyMatch(t -> t.getName().equals("myTask"));
TaskDef def = exists ? metadataService.getTaskDef("myTask") : null;
Defensive patterns

Strategy: validation

Validate before calling

List<TaskDef> defs = metadataService.getTaskDefs();
boolean exists = defs.stream().anyMatch(t -> t.getName().equals(taskType));
if (!exists) {
    // register or skip
}

Try / catch

try {
    TaskDef def = metadataService.getTaskDef(taskType);
} catch (NotFoundException e) {
    // task not registered; handle gracefully
}

Prevention

When it happens

Trigger: Calling GET /api/metadata/taskdefs/{taskType} with a name that was never registered, or that was unregistered. Also triggered internally by any code path that resolves a TaskDef by name and finds nothing (e.g. workflow referencing a task whose definition was removed).

Common situations: Typo in the taskType path segment; the task definition was registered under a different environment/cluster; the task def was deleted via unregisterTaskDef; a recently deployed workflow references a task name that has not yet been registered in that environment.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/e9f90659ac607927. Report an issue: GitHub.