{"record":{"id":"415b920140cebf5f","repo":"conductor-oss/conductor","slug":"failed-to-remove-task-lookup-s","errorCode":null,"errorMessage":"Failed to remove task lookup: %s","messagePattern":"Failed to remove task lookup: (.+?)","errorType":"exception","errorClass":"TransientException","httpStatus":500,"severity":"error","filePath":"cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java","lineNumber":820,"sourceCode":"            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg);\n        }\n    }\n\n    protected void removeTaskLookup(TaskModel task) {\n        try {\n            recordCassandraDaoRequests(\n                    \"removeTaskLookup\", task.getTaskType(), task.getWorkflowType());\n            if (task.getTaskDefinition().isPresent()\n                    && task.getTaskDefinition().get().concurrencyLimit() > 0) {\n                removeTaskFromLimit(task);\n            }\n            session.execute(deleteTaskLookupStatement.bind(UUID.fromString(task.getTaskId())));\n        } catch (DriverException e) {\n            Monitors.error(CLASS_NAME, \"removeTaskLookup\");\n            String errorMsg = String.format(\"Failed to remove task lookup: %s\", task.getTaskId());\n            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg);\n        }\n    }\n\n    @VisibleForTesting\n    void validateTasks(List<TaskModel> tasks) {\n        Preconditions.checkNotNull(tasks, \"Tasks object cannot be null\");\n        Preconditions.checkArgument(!tasks.isEmpty(), \"Tasks object cannot be empty\");\n        tasks.forEach(\n                task -> {\n                    Preconditions.checkNotNull(task, \"task object cannot be null\");\n                    Preconditions.checkNotNull(task.getTaskId(), \"Task id cannot be null\");\n                    Preconditions.checkNotNull(\n                            task.getWorkflowInstanceId(), \"Workflow instance id cannot be null\");\n                    Preconditions.checkNotNull(\n                            task.getReferenceTaskName(), \"Task reference name cannot be null\");\n                });\n\n        String workflowId = tasks.get(0).getWorkflowInstanceId();","sourceCodeStart":802,"sourceCodeEnd":838,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java#L802-L838","documentation":"removeTaskLookup wraps DriverException in a TransientException naming the task id. It deletes the task_lookup row (and removes the task from its limit if applicable); driver failures are retried by the framework RetryTemplate.","triggerScenarios":"Deleting the task_lookup entry by task id fails at the driver level during task/workflow cleanup.","commonSituations":"Cluster instability during heavy task cleanup, driver pool exhaustion, consistency not met.","solutions":["Verify Cassandra is reachable and the delete consistency is satisfiable.","Tune driver connection pool and timeouts.","Rely on the framework retry; inspect the logged DriverException for the real cause.","Ensure RF tolerates node loss for the configured consistency."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"RetryTemplate retry = RetryTemplate.builder().retryOn(TransientException.class).maxAttempts(3).noBackoff().build();\nretry.execute(ctx -> { removeTaskLookup(task); return null; });","preventionTips":["Tune driver connection pool and delete timeouts for task cleanup spikes.","Maintain RF adequate for the configured consistency.","Alert on rising transient delete failures to catch cluster issues early."],"tags":["cassandra","persistence","transient","driver","task","retry","dao"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}