{"record":{"id":"fc4983248c23ee95","repo":"apache/druid","slug":"toomanyattemptsforjob","errorCode":null,"errorMessage":"TooManyAttemptsForJob","messagePattern":"TooManyAttemptsForJob","errorType":"error_code","errorClass":"MSQException","httpStatus":null,"severity":"error","filePath":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java","lineNumber":780,"sourceCode":"        return taskHistory;\n      });\n      // remove the worker from the relaunch set\n      iterator.remove();\n    }\n  }\n\n  private void checkRelaunchLimitsOrThrow(TaskTracker tracker, MSQWorkerTask relaunchTask)\n  {\n    if (relaunchTask.getRetryCount() > Limits.PER_WORKER_RELAUNCH_LIMIT) {\n      throw new MSQException(new TooManyAttemptsForWorker(\n          Limits.PER_WORKER_RELAUNCH_LIMIT,\n          relaunchTask.getId(),\n          relaunchTask.getWorkerNumber(),\n          tracker.statusRef.get().getErrorMsg()\n      ));\n    }\n    if (currentRelaunchCount > Limits.TOTAL_RELAUNCH_LIMIT) {\n      throw new MSQException(new TooManyAttemptsForJob(\n          Limits.TOTAL_RELAUNCH_LIMIT,\n          currentRelaunchCount,\n          relaunchTask.getId(),\n          tracker.statusRef.get().getErrorMsg()\n      ));\n    }\n  }\n\n  private void shutDownTasks()\n  {\n\n    cleanFailedTasksWhichAreRelaunched();\n    for (final Map.Entry<String, TaskTracker> taskEntry : taskTrackersByWorkerNumber()) {\n      final String taskId = taskEntry.getKey();\n      final TaskTracker tracker = taskEntry.getValue();\n      if ((!canceledWorkerTasks.contains(taskId))\n          &&\n          (!tracker.isComplete())) {","sourceCodeStart":762,"sourceCodeEnd":798,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java#L762-L798","documentation":"A guard exception raised in checkRelaunchLimitsOrThrow when a worker task's retry (relaunch) count exceeds Limits.PER_WORKER_RELAUNCH_LIMIT. The controller relaunches failed workers only a bounded number of times; once a single worker exceeds that budget the launcher gives up on it and surfaces TooManyAttemptsForWorker so the query fails fast instead of looping forever.","triggerScenarios":"Thrown at multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java:780 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the worker task logs and tracker.getErrorMsg() to find the root cause of the repeated failures (OOM, node loss, task queue overflow) and fix that first.","Increase Limits.PER_WORKER_RELAUNCH_LIMIT / TOTAL_RELAUNCH_LIMIT via MSQ tuning config if transient infrastructure instability is expected.","Re-run the query on a healthier cluster; persistent worker failures are usually environmental (spot interruptions, resource exhaustion)."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}