{"record":{"id":"5dd41fbf2a723918","repo":"conductor-oss/conductor","slug":"error-updating-task-s-in-workflow-s-5dd41f","errorCode":null,"errorMessage":"Error updating task: %s in workflow: %s","messagePattern":"Error updating task: (.+?) in workflow: (.+?)","errorType":"exception","errorClass":"TransientException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/netflix/conductor/core/dal/ExecutionDAOFacade.java","lineNumber":583,"sourceCode":"            /*\n             * Indexing a task for every update adds a lot of volume. That is ok but if async indexing\n             * is enabled and tasks are stored in memory until a block has completed, we would lose a lot\n             * of tasks on a system failure. So only index for each update if async indexing is not enabled.\n             * If it *is* enabled, tasks will be indexed only when a workflow is in terminal state.\n             */\n            if (!properties.isAsyncIndexingEnabled() && properties.isTaskIndexingEnabled()) {\n                indexDAO.indexTask(new TaskSummary(taskModel.toTask()));\n            }\n        } catch (TerminateWorkflowException e) {\n            // re-throw it so we can terminate the workflow\n            throw e;\n        } catch (Exception e) {\n            String errorMsg =\n                    String.format(\n                            \"Error updating task: %s in workflow: %s\",\n                            taskModel.getTaskId(), taskModel.getWorkflowInstanceId());\n            LOGGER.error(errorMsg, e);\n            throw new TransientException(errorMsg, e);\n        }\n    }\n\n    public void updateTasks(List<TaskModel> tasks) {\n        tasks.forEach(this::updateTask);\n    }\n\n    public void removeTask(String taskId) {\n        executionDAO.removeTask(taskId);\n    }\n\n    private void removeTaskIndex(WorkflowModel workflow, TaskModel task, boolean archiveTask)\n            throws JsonProcessingException {\n        if (!properties.isTaskIndexingEnabled()) {\n            return;\n        }\n        if (archiveTask) {\n            if (task.getStatus().isTerminal()) {","sourceCodeStart":565,"sourceCodeEnd":601,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/core/src/main/java/com/netflix/conductor/core/dal/ExecutionDAOFacade.java#L565-L601","documentation":"Catch-all TransientException thrown by updateTask when any Exception (other than TerminateWorkflowException, which is re-thrown) escapes the task-indexing / update block. The message carries taskId and workflowInstanceId. It means the task update did not complete (typically the index write failed) and the caller should treat it as retryable.","triggerScenarios":"A worker/decider calls updateTask and the synchronous indexDAO.indexTask(...) (when asyncIndexingEnabled=false and taskIndexingEnabled=true) throws, or the underlying executionDAO task update throws.","commonSituations":"Indexing disabled-async path hits an Elasticsearch outage. A task payload too large for the index. A connection pool exhaustion during a burst of task completions. Transient store failure mid-update.","solutions":["Inspect the wrapped cause — most often an index or DAO connectivity error.","Retry the task update with backoff; ensure idempotency on the worker side so a retry does not duplicate state.","Consider enabling conductor.app.async-indexing-enabled=true to decouple task updates from synchronous index writes.","If payloads are large, raise the index max document size or trim task output."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    executionDAOFacade.updateTask(taskModel);\n} catch (TransientException e) {\n    // task update/index failed; retry with backoff (ensure worker-side idempotency)\n}","preventionTips":["Enable async indexing (conductor.app.async-indexing-enabled=true) to decouple task updates from index writes if synchronous indexing is fragile.","Make worker task updates idempotent so retries are safe.","Cap task output size to avoid index rejections."],"tags":["task","index-dao","update","transient"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}