{"record":{"id":"15ed1ecf20016034","repo":"conductor-oss/conductor","slug":"failed-to-get-task-def-s","errorCode":null,"errorMessage":"Failed to get task def: %s","messagePattern":"Failed to get task def: (.+?)","errorType":"exception","errorClass":"TransientException","httpStatus":null,"severity":"error","filePath":"cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java","lineNumber":351,"sourceCode":"                    .collect(Collectors.toList());\n        } catch (DriverException e) {\n            Monitors.error(CLASS_NAME, \"getAllWorkflowDefsLatestVersions\");\n            String errorMsg = \"Error retrieving all workflow defs latest versions\";\n            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg, e);\n        }\n    }\n\n    private TaskDef getTaskDefFromDB(String name) {\n        try {\n            ResultSet resultSet = session.execute(selectTaskDefStatement.bind(name));\n            recordCassandraDaoRequests(\"getTaskDef\", name, null);\n            return Optional.ofNullable(resultSet.one()).map(this::setDefaults).orElse(null);\n        } catch (DriverException e) {\n            Monitors.error(CLASS_NAME, \"getTaskDef\");\n            String errorMsg = String.format(\"Failed to get task def: %s\", name);\n            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg, e);\n        }\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private List<TaskDef> getAllTaskDefsFromDB() {\n        try {\n            ResultSet resultSet = session.execute(selectAllTaskDefsStatement.bind(TASK_DEFS_KEY));\n            List<Row> rows = resultSet.all();\n            if (rows.size() == 0) {\n                LOGGER.info(\"No task definitions were found.\");\n                return Collections.EMPTY_LIST;\n            }\n            return rows.stream().map(this::setDefaults).collect(Collectors.toList());\n        } catch (DriverException e) {\n            Monitors.error(CLASS_NAME, \"getAllTaskDefs\");\n            String errorMsg = \"Failed to get all task defs\";\n            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg, e);","sourceCodeStart":333,"sourceCodeEnd":369,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java#L333-L369","documentation":"Thrown when a DriverException occurs in getTaskDefFromDB while reading a single TaskDef by name (SELECT + JSON deserialization via setDefaults). Wrapped as TransientException, signalling a retryable infrastructure failure on the read path.","triggerScenarios":"session.execute(selectTaskDefStatement.bind(name)) raises a DriverException, or deserialization of the row fails inside the read after the driver error path is entered.","commonSituations":"Looking up a task def during a Cassandra restart or network blip; the task_def table replica set cannot satisfy read consistency; connection pool exhausted.","solutions":["Retry the task-def read with backoff.","Verify cluster health and that the task_def table exists.","Review conductor.cassandra.readConsistencyLevel vs replication factor.","Inspect the wrapped DriverException to identify timeout vs unavailable."],"exampleFix":"// before: single read\nTaskDef td = metadataDAO.getTaskDef(name);\n\n// after: retry transient reads\nTaskDef td = RetryUtils.retryOn(TransientException.class, 3,\n        Duration.ofMillis(150),\n        () -> metadataDAO.getTaskDef(name));","handlingStrategy":"retry","validationCode":"// Pre-flight: verify session before a task-def read\nif (cassandraSession.isClosed()) {\n    throw new IllegalStateException(\"Cassandra session is closed; cannot read task def\");\n}","typeGuard":null,"tryCatchPattern":"// Retry transient task-def reads\ntry {\n    return metadataDAO.getTaskDef(name);\n} catch (TransientException e) {\n    return backoffAndRetry(() -> metadataDAO.getTaskDef(name), 3);\n}","preventionTips":["Wrap task-def reads in retry-with-backoff for TransientException.","Confirm the task_def table exists after deploys.","Cache hot task defs to reduce driver round-trips.","Align read consistency with replication factor."],"tags":["cassandra","task-definition","transient","network","driver","read"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}