{"record":{"id":"a379d505b8b9f1c8","repo":"apache/druid","slug":"some-locks-for-task-s-are-already-revoked-a379d5","errorCode":null,"errorMessage":"Some locks for task[%s] are already revoked","messagePattern":"Some locks for task\\[(.+?)\\] are already revoked","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentNukeAction.java","lineNumber":86,"sourceCode":"    return new TypeReference<>() {};\n  }\n\n  @Override\n  public Integer perform(Task task, TaskActionToolbox toolbox)\n  {\n    TaskLocks.checkLockCoversSegments(task, toolbox.getTaskLockbox(), segments);\n\n    final int numDeletedSegments;\n    try {\n      final Set<Interval> intervals = segments.stream().map(DataSegment::getInterval).collect(Collectors.toSet());\n      numDeletedSegments = toolbox.getTaskLockbox().doInCriticalSection(\n          task,\n          intervals,\n          CriticalAction.<Integer>builder().onValidLocks(\n              () -> toolbox.getIndexerMetadataStorageCoordinator().deleteSegments(segments)\n          ).onInvalidLocks(\n              () -> {\n                throw new ISE(\"Some locks for task[%s] are already revoked\", task.getId());\n              }\n          ).build()\n      );\n\n      log.info(\n          \"Deleted [%d] segments from metadata store out of requested[%d],\"\n          + \" across [%d] intervals[%s], for task[%s] of datasource[%s].\",\n          numDeletedSegments, segments.size(),\n          intervals.size(), intervals,\n          task.getId(), task.getDataSource()\n      );\n    }\n    catch (Exception e) {\n      throw new RuntimeException(e);\n    }\n\n    // Emit metrics\n    final ServiceMetricEvent.Builder metricBuilder = new ServiceMetricEvent.Builder();","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentNukeAction.java#L68-L104","documentation":"SegmentNukeAction.perform() deletes segments from the metadata store only while holding valid task locks. Its CriticalAction.onInvalidLocks callback throws this ISE when any of the task's locks have already been revoked, preventing destructive deletes (segment nuking) under stale authority. The task should fail and reacquire locks.","triggerScenarios":"A kill/nuke task attempts SEGMENT_NUKE after its interval locks were preempted by a higher-priority task, or between lock acquisition and execution the locks were revoked.","commonSituations":"Kill tasks racing with compaction or newer overwrite tasks for the same interval; concurrent kill tasks on the same data; priority misconfiguration allowing silent preemption.","solutions":["Retry the kill task after the competing task finishes.","Ensure no overlapping compaction/overwrite tasks target the same intervals while nuking.","Verify lock priority settings (druid.indexer.task.priority etc.) so only intended tasks preempt.","Serialize kill operations via your orchestration instead of running concurrent kills."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Verify no overlapping higher-priority tasks and valid locks before nuking:\n// if (toolbox.getTaskLockbox().isLockRevokedOrMissing(task)) abort kill;","typeGuard":null,"tryCatchPattern":"try { rows = nukeAction.perform(task, toolbox); } catch (ISE e) { if (e.getMessage().contains(\"already revoked\")) { /* retry kill after competitor finishes */ } else throw e; }","preventionTips":["Run kill tasks only when no compaction/overwrite overlaps the intervals.","Avoid concurrent kill tasks on the same data.","Set explicit lock priorities to control preemption.","Orchestrate kills as serialized maintenance jobs."],"tags":["druid","locking","segment-deletion","preemption"],"backgroundTag":"segment-lock-revoked","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}