{"record":{"id":"8b7593959e9a60c0","repo":"apache/druid","slug":"requested-delete-tier-s-but-no-lookups-exist","errorCode":null,"errorMessage":"Requested delete tier [%s]. But no lookups exist!","messagePattern":"Requested delete tier \\[(.+?)\\]\\. But no lookups exist!","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java","lineNumber":263,"sourceCode":"      }\n      return configManager.set(LOOKUP_CONFIG_KEY, updatedSpec, auditInfo).isOk();\n    }\n  }\n\n  public Map<String, Map<String, LookupExtractorFactoryMapContainer>> getKnownLookups()\n  {\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) {","sourceCodeStart":245,"sourceCodeEnd":281,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java#L245-L281","documentation":"LookupCoordinatorManager.deleteTier() returns false and logs this warning when the lookup coordinator has no known lookup configuration at all (getKnownLookups() returns null), so there is nothing to delete the tier from. It is a no-op guard, not an exception.","triggerScenarios":"deleteTier(tier) is called before any lookup config has ever been persisted; the config manager returns null for LOOKUP_CONFIG_KEY (fresh cluster, or lookup config storage empty/unavailable).","commonSituations":"Calling the DELETE lookup-tier API on a cluster where no lookups were ever configured; tests invoking deleteTier on an uninitialized config manager; config wiped externally in ZooKeeper/derby-backed config store.","solutions":["Verify the cluster actually has lookup configs: GET /druid/coordinator/v1/lookups/config (or /status for all).","If the tier truly should not exist, treat the false return as success and skip the call.","If lookups were expected, check connectivity/health of the lookup config manager (druid.manager.lookups config) and its backing store.","Update the client to handle the false return rather than assuming an exception."],"exampleFix":"// before\nboolean ok = coordinatorManager.deleteTier(\"__default\");\n// after\nboolean existing = coordinatorManager.getKnownLookups() != null;\nboolean ok = existing && coordinatorManager.deleteTier(\"__default\");","handlingStrategy":"type-guard","validationCode":"boolean hasLookups = coordinatorManager.getKnownLookups() != null;\nif (!hasLookups) { /* skip deleteTier or treat as success */ }","typeGuard":"boolean lookupsConfigured = coordinatorManager.getKnownLookups() != null;","tryCatchPattern":null,"preventionTips":["Null-check getKnownLookups() before delete operations.","Treat boolean false returns as idempotent outcomes.","Bootstrap lookup config before running deletion jobs.","Use GET /druid/coordinator/v1/lookups/config to verify state first."],"tags":["lookups","coordinator","delete","noop"],"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"}