apache/druid · info
Tier [ ] does not exist
Error message
Tier [%s] does not exist
What it means
LookupCoordinatorManager.getLookup() logs this warning and returns null when the lookup config exists but the requested tier is not in it. The lookup therefore cannot be resolved; callers must handle the null return.
Solutions
- List tiers via GET /druid/coordinator/v1/lookups/config and use an exact, case-sensitive tier name.
- Null-check getLookup()'s return in calling code.
- If the tier should exist, re-add it via POST /druid/coordinator/v1/lookups/config/{tier}.
- Confirm the client targets the intended cluster (tiers often differ per environment).
Example fix
// before
manager.getLookup("default", "country"); // tier never created
// after
manager.getLookup("__default", "country"); // configured tier name Defensive patterns
Strategy: validation
Validate before calling
Map<String, Map<String, Object>> config = coordinatorManager.getKnownLookups();
if (config != null && config.containsKey(tier)) {
LookupExtractorFactoryMapContainer c = coordinatorManager.getLookup(tier, lookupName);
// c may still be null if the lookup itself is missing
} Prevention
- Validate tier names against GET /druid/coordinator/v1/lookups/config.
- Null-check getLookup() return values.
- Create missing tiers explicitly before adding/reading lookups.
- Keep tier naming consistent across environments.
When it happens
Trigger: getLookup(tier, lookupName) is called with a tier name absent from the known-lookups map (prior.get(tier) == null) — wrong tier name, tier deleted, or lookup registered on another tier.
Common situations: API calls to /druid/coordinator/v1/lookups/{tier}/{lookup} with a nonexistent tier; environment drift where tiers differ between dev and prod; clients assuming the implicit '__default' tier that was never configured.
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 of tier
- Requested tier [ ] lookupName [ ]. But no lookups exist!
- lookup management on node
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/a14e2dbe92ae6170.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:356
/**
* Try to find a lookupName spec for the specified lookupName.
*
* @param lookupName The lookupName to look for
*
* @return The lookupName spec if found or null if not found or if no lookups at all are found
*/
@Nullable
public LookupExtractorFactoryMapContainer getLookup(final String tier, final String lookupName)
{
final Map<String, Map<String, LookupExtractorFactoryMapContainer>> prior = getKnownLookups();
if (prior == null) {
LOG.warn("Requested tier [%s] lookupName [%s]. But no lookups exist!", tier, lookupName);
return null;
}
final Map<String, LookupExtractorFactoryMapContainer> tierLookups = prior.get(tier);
if (tierLookups == null) {
LOG.warn("Tier [%s] does not exist", tier);
return null;
}
return tierLookups.get(lookupName);
}
public boolean isStarted()
{
return lifecycleLock.isStarted();
}
@VisibleForTesting
boolean awaitStarted(long waitTimeMs)
{
return lifecycleLock.awaitStarted(waitTimeMs, TimeUnit.MILLISECONDS);
}
// start() and stop() are synchronized so that they never run in parallel in case of ZK acting funny or druid bug and
// coordinator becomes leader and drops leadership in quick succession.View on GitHub (pinned to 9b90983fd2)