{"record":{"id":"ee4364fded998e08","repo":"apache/druid","slug":"requested-delete-of-tier-s-that-does-not-exist","errorCode":null,"errorMessage":"Requested delete of tier [%s] that does not exist!","messagePattern":"Requested delete of tier \\[(.+?)\\] that does not exist!","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java","lineNumber":269,"sourceCode":"  {\n    Preconditions.checkState(lifecycleLock.awaitStarted(5, TimeUnit.SECONDS), \"not started\");\n    return lookupMapConfigRef.get();\n  }\n\n  public boolean deleteTier(final String tier, AuditInfo auditInfo)\n  {\n    Preconditions.checkState(lifecycleLock.awaitStarted(5, TimeUnit.SECONDS), \"not started\");\n\n    synchronized (this) {\n      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> priorSpec = getKnownLookups();\n      if (priorSpec == null) {\n        LOG.warn(\"Requested delete tier [%s]. But no lookups exist!\", tier);\n        return false;\n      }\n      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> updateSpec = new HashMap<>(priorSpec);\n\n      if (updateSpec.remove(tier) == null) {\n        LOG.warn(\"Requested delete of tier [%s] that does not exist!\", tier);\n        return false;\n      }\n\n      return configManager.set(LOOKUP_CONFIG_KEY, updateSpec, auditInfo).isOk();\n    }\n  }\n\n  public boolean deleteLookup(final String tier, final String lookup, AuditInfo auditInfo)\n  {\n    Preconditions.checkState(lifecycleLock.awaitStarted(5, TimeUnit.SECONDS), \"not started\");\n\n    synchronized (this) {\n      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> priorSpec = getKnownLookups();\n      if (priorSpec == null) {\n        LOG.warn(\"Requested delete lookup [%s]/[%s]. But no lookups exist!\", tier, lookup);\n        return false;\n      }\n      final Map<String, Map<String, LookupExtractorFactoryMapContainer>> updateSpec = new HashMap<>(priorSpec);","sourceCodeStart":251,"sourceCodeEnd":287,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java#L251-L287","documentation":"LookupCoordinatorManager.deleteTier() logs this warning and returns false when a lookup config exists but does not contain the requested tier key, so removing it is a no-op. Nothing is changed or persisted.","triggerScenarios":"deleteTier(tier) is invoked with a tier name that is absent from the current known-lookups map (updateSpec.remove(tier) == null) — e.g., typo'd tier or tier already deleted.","commonSituations":"DELETE requests to /druid/coordinator/v1/lookups/config/{tier} with a wrong tier name; race where another operator already removed the tier; renaming tiers between deployments.","solutions":["List existing tiers via GET /druid/coordinator/v1/lookups/config and confirm the exact tier name.","Treat the false return as idempotent success if the goal is 'tier must not exist'.","Fix the tier name in the client/tooling (case-sensitive match required).","Serialize tier management to avoid concurrent delete race conditions."],"exampleFix":"// before\nmanager.deleteTier(\"__defaul\"); // typo\n// after\nmanager.deleteTier(\"__default\");","handlingStrategy":"validation","validationCode":"Map<String, Map<String, Object>> config = coordinatorManager.getKnownLookups();\nif (config == null || !config.containsKey(tier)) { /* tier absent: skip or treat as success */ }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify the tier name against the live config before deleting.","Keep tier names in one shared constant/config source.","Handle the false return idempotently in automation.","Avoid concurrent tier deletes from multiple operators."],"tags":["lookups","coordinator","delete","not-found"],"backgroundTag":"resource-not-found","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"}