apache/druid · info
Requested delete of tier
Error message
Requested delete of tier [%s] that does not exist!
What it means
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.
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.
Example fix
// before
manager.deleteTier("__defaul"); // typo
// after
manager.deleteTier("__default"); Defensive patterns
Strategy: validation
Validate before calling
Map<String, Map<String, Object>> config = coordinatorManager.getKnownLookups();
if (config == null || !config.containsKey(tier)) { /* tier absent: skip or treat as success */ } Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Requested delete of lookup
- Requested delete of lookup
- Requested delete lookup
- Requested delete tier
- Tier [ ] does not exist
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/ee4364fded998e08.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:269
{
Preconditions.checkState(lifecycleLock.awaitStarted(5, TimeUnit.SECONDS), "not started");
return lookupMapConfigRef.get();
}
public boolean deleteTier(final String tier, AuditInfo auditInfo)
{
Preconditions.checkState(lifecycleLock.awaitStarted(5, TimeUnit.SECONDS), "not started");
synchronized (this) {
final Map<String, Map<String, LookupExtractorFactoryMapContainer>> priorSpec = getKnownLookups();
if (priorSpec == null) {
LOG.warn("Requested delete tier [%s]. But no lookups exist!", tier);
return false;
}
final Map<String, Map<String, LookupExtractorFactoryMapContainer>> updateSpec = new HashMap<>(priorSpec);
if (updateSpec.remove(tier) == null) {
LOG.warn("Requested delete of tier [%s] that does not exist!", tier);
return false;
}
return configManager.set(LOOKUP_CONFIG_KEY, updateSpec, auditInfo).isOk();
}
}
public boolean deleteLookup(final String tier, final String lookup, AuditInfo auditInfo)
{
Preconditions.checkState(lifecycleLock.awaitStarted(5, TimeUnit.SECONDS), "not started");
synchronized (this) {
final Map<String, Map<String, LookupExtractorFactoryMapContainer>> priorSpec = getKnownLookups();
if (priorSpec == null) {
LOG.warn("Requested delete lookup [%s]/[%s]. But no lookups exist!", tier, lookup);
return false;
}
final Map<String, Map<String, LookupExtractorFactoryMapContainer>> updateSpec = new HashMap<>(priorSpec);View on GitHub (pinned to 9b90983fd2)