{"record":{"id":"3caabcf56b28e93c","repo":"conductor-oss/conductor","slug":"no-such-task-by-name-s","errorCode":null,"errorMessage":"No such task by name %s","messagePattern":"No such task by name (.+?)","errorType":"exception","errorClass":"NotFoundException","httpStatus":404,"severity":"error","filePath":"core/src/main/java/com/netflix/conductor/service/MetadataServiceImpl.java","lineNumber":86,"sourceCode":"            taskDefinition.setUpdateTime(null);\n\n            metadataDAO.createTaskDef(taskDefinition);\n            metadataChangeListener.onTaskDefRegistered(taskDefinition);\n        }\n    }\n\n    @Override\n    public void validateWorkflowDef(WorkflowDef workflowDef) {\n        // do nothing, WorkflowDef is annotated with @Valid and calling this method will validate it\n    }\n\n    /**\n     * @param taskDefinition Task Definition to be updated\n     */\n    public void updateTaskDef(TaskDef taskDefinition) {\n        TaskDef existing = metadataDAO.getTaskDef(taskDefinition.getName());\n        if (existing == null) {\n            throw new NotFoundException(\"No such task by name %s\", taskDefinition.getName());\n        }\n        taskDefinition.setUpdatedBy(WorkflowContext.get().getClientApp());\n        taskDefinition.setUpdateTime(System.currentTimeMillis());\n        taskDefinition.setCreateTime(existing.getCreateTime());\n        taskDefinition.setCreatedBy(existing.getCreatedBy());\n        metadataDAO.updateTaskDef(taskDefinition);\n        metadataChangeListener.onTaskDefUpdated(taskDefinition);\n    }\n\n    /**\n     * @param taskType Remove task definition\n     */\n    public void unregisterTaskDef(String taskType) {\n        metadataDAO.removeTaskDef(taskType);\n        metadataChangeListener.onTaskDefUnregistered(taskType);\n    }\n\n    /**","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/core/src/main/java/com/netflix/conductor/service/MetadataServiceImpl.java#L68-L104","documentation":"Thrown by MetadataServiceImpl.updateTaskDef when attempting to update a TaskDef whose name does not match any existing TaskDef in the metadata store. The method looks up the existing definition by name; if none is found, it throws NotFoundException (HTTP 404). You cannot update a task definition that has not been registered first.","triggerScenarios":"Calling the task definition update API (PUT /api/metadata/taskdefs) with a TaskDef whose name doesn't exist in the metadata DAO. Also when updating by a different name than what was registered, or after the TaskDef was deleted.","commonSituations":"Trying to update a TaskDef that was never registered (should use POST to create instead of PUT to update). The TaskDef was deleted in another environment. Name mismatch between the request body's name field and the registered task name (case-sensitive). Race condition where the TaskDef was unregistered between a read and the update call.","solutions":["Register the TaskDef first using POST /api/metadata/taskdefs before attempting to update it.","Verify the TaskDef name in the request matches an existing registered name exactly (case-sensitive).","Check if the TaskDef was recently deleted or unregistered via unregisterTaskDef.","If the intent is to create a new TaskDef, use POST instead of PUT."],"exampleFix":"// before — trying to update a non-existent task def\nPUT /api/metadata/taskdefs\n{\"name\":\"nonexistent_task\",\"retryCount\":5}\n// 404: No such task by name nonexistent_task\n\n// after — register first, then update\nPOST /api/metadata/taskdefs\n[{\"name\":\"nonexistent_task\",\"retryCount\":3}]\n// then update\nPUT /api/metadata/taskdefs\n{\"name\":\"nonexistent_task\",\"retryCount\":5}","handlingStrategy":"validation","validationCode":"// Check task def existence before updating\nTaskDef existing = metadataDAO.getTaskDef(taskDefinition.getName());\nif (existing == null) {\n    // Use create (POST) instead of update (PUT)\n    metadataService.registerTaskDef(List.of(taskDefinition));\n} else {\n    metadataService.updateTaskDef(taskDefinition);\n}","typeGuard":null,"tryCatchPattern":"try {\n    metadataService.updateTaskDef(taskDefinition);\n} catch (NotFoundException e) {\n    // TaskDef doesn't exist — create it instead\n    LOGGER.info(\"TaskDef '{}' not found, creating instead\", taskDefinition.getName());\n    metadataService.registerTaskDef(List.of(taskDefinition));\n}","preventionTips":["Register TaskDefs with POST before updating them with PUT.","Implement an upsert pattern: check existence, then create or update accordingly.","Use consistent naming for TaskDefs across environments to avoid name mismatches."],"tags":["metadata","task-definition","not-found","api"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}