{"record":{"id":"dc7a7ab9932f9f58","repo":"conductor-oss/conductor","slug":"failed-to-get-workflow-s","errorCode":null,"errorMessage":"Failed to get workflow: %s","messagePattern":"Failed to get workflow: (.+?)","errorType":"exception","errorClass":"TransientException","httpStatus":500,"severity":"error","filePath":"cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java","lineNumber":568,"sourceCode":"                        Optional.ofNullable(resultSet.one())\n                                .map(\n                                        row -> {\n                                            WorkflowModel wf =\n                                                    readValue(\n                                                            row.getString(PAYLOAD_KEY),\n                                                            WorkflowModel.class);\n                                            recordCassandraDaoRequests(\n                                                    \"getWorkflow\", \"n/a\", wf.getWorkflowName());\n                                            return wf;\n                                        })\n                                .orElse(null);\n            }\n            return workflow;\n        } catch (DriverException e) {\n            Monitors.error(CLASS_NAME, \"getWorkflow\");\n            String errorMsg = String.format(\"Failed to get workflow: %s\", workflowId);\n            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg);\n        }\n    }\n\n    /**\n     * This is a dummy implementation and this feature is not implemented for Cassandra backed\n     * Conductor\n     */\n    @Override\n    public List<String> getRunningWorkflowIds(String workflowName, int version) {\n        throw new UnsupportedOperationException(\n                \"This method is not implemented in CassandraExecutionDAO. Please use ExecutionDAOFacade instead.\");\n    }\n\n    /**\n     * This is a dummy implementation and this feature is not implemented for Cassandra backed\n     * Conductor\n     */\n    @Override","sourceCodeStart":550,"sourceCodeEnd":586,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java#L550-L586","documentation":"getWorkflow wraps any com.datastax.driver.core.exceptions.DriverException in a TransientException. DriverExceptions denote cluster-side or connectivity failures (timeouts, unavailable nodes, read failures) that are expected to succeed on retry, so the framework RetryTemplate retries this up to 3 times with no backoff (ConductorCoreConfiguration). If retries are exhausted the exception propagates.","triggerScenarios":"Any getWorkflow / getWorkflowById read hitting a DriverException: node down, read timeout, consistency level not met, connection pool exhaustion, or network partition to Cassandra.","commonSituations":"Cassandra cluster under load or losing nodes; RF/consistency misconfiguration; driver connection pool too small for concurrency; GC stalls on Cassandra nodes.","solutions":["Confirm the Cassandra cluster is healthy and the requested consistency level is satisfiable by live replicas.","Tune the DataStax driver connection pool / timeouts (cassandra.properties) and ensure RF >= nodes required for the read consistency.","Rely on the built-in RetryTemplate; if exhaustion recurs, investigate the underlying DriverException cause logged at error.","For chronic timeouts, scale the cluster or lower read consistency (after evaluating correctness)."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// The framework RetryTemplate already retries TransientException 3x.\n// For direct calls, mirror that contract:\nint max = 3;\nfor (int attempt = 1; attempt <= max; attempt++) {\n    try {\n        return executionDAO.getWorkflow(workflowId, includeTasks);\n    } catch (TransientException e) {\n        if (attempt == max) throw e;\n        LOGGER.warn(\"getWorkflow attempt {} failed, retrying\", attempt, e);\n    }\n}","preventionTips":["Tune the DataStax driver connection pool and read timeouts to the cluster's latency profile.","Ensure RF and read consistency are compatible with expected node loss.","Monitor Cassandra node health and GC, and alert on DriverException rates."],"tags":["cassandra","persistence","transient","driver","network","retry","dao"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}