apache/druid · warning
Found lookups for tier
Error message
Found lookups for tier [%s] in DB, but no nodes discovered for it
What it means
During the lookup management loop, the coordinator compares tiers that have lookups configured in the metadata store (DB) against tiers discovered from live lookup nodes. If a tier has lookups configured but no nodes were discovered to host them, it logs a warning. The lookups for that tier cannot be loaded anywhere until nodes join.
Solutions
- Verify lookup nodes for the tier are running and discoverable via service discovery.
- Check the tier name in lookup configuration matches the druid.lookup.lookupTier of running nodes.
- If the tier is intentionally empty, remove its lookups from the DB or delete the tier.
Example fix
// before (DB config)
{"tier":"__default","lookups":{"country":{"v":1,...}}}
// after: ensure nodes announce tier
// druid.lookup.lookupTier="__default" and node is up, or remove unused lookups from the tier Defensive patterns
Strategy: validation
Validate before calling
// before relying on a tier
boolean tierHasNodes = lookupCoordinatorManager.getAllTiers().contains(tier);
if (!tierHasNodes) { LOG.warn("tier %s has no nodes; lookups will not be loaded", tier); } Prevention
- Keep tier names consistent between DB lookup config and node druid.lookup.lookupTier
- Monitor node discovery health; alert when configured tiers have zero discovered nodes
- Ensure lookup nodes register with service discovery on startup
When it happens
Trigger: lookupManagementLoop runs, allLookupTiers from the DB contains a non-empty tier, and lookupNodeDiscovery.getAllTiers() does not report that tier.
Common situations: All lookup nodes of a tier are down; tier name typo between cluster configuration and DB entries; service discovery (druid.discovery) misconfiguration; nodes not yet started after fresh deployment.
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
- Node[ ] discovered but doesn't have service[ ]. Ignored.
- A valid tlsPort needs to specified when druid.enableTlsPort…
- At least one of the druid.enablePlaintextPort or…
- At least one task runner must be enabled
- At most one of 'druid.broker.segment.watchedTiers' and…
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/264401d661d64c84.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:564
final Map<String, Map<String, LookupExtractorFactoryMapContainer>> allLookupTiers = lookupMapConfigRef.get();
if (allLookupTiers == null) {
LOG.info("Not updating lookups because no data exists");
return;
}
LOG.debug("Starting lookup sync for on all nodes.");
try {
List<ListenableFuture<Map.Entry>> futures = new ArrayList<>();
Set<String> discoveredLookupTiers = lookupNodeDiscovery.getAllTiers();
// Check and Log warnings about lookups configured by user in DB but no nodes discovered to load those.
for (String tierInDB : allLookupTiers.keySet()) {
if (!discoveredLookupTiers.contains(tierInDB) &&
!allLookupTiers.getOrDefault(tierInDB, ImmutableMap.of()).isEmpty()) {
LOG.warn("Found lookups for tier [%s] in DB, but no nodes discovered for it", tierInDB);
}
}
for (String tier : discoveredLookupTiers) {
LOG.debug("Starting lookup mgmt for tier [%s].", tier);
final Map<String, LookupExtractorFactoryMapContainer> tierLookups = allLookupTiers.getOrDefault(tier, ImmutableMap.of());
for (final HostAndPortWithScheme node : lookupNodeDiscovery.getNodesInTier(tier)) {
LOG.debug(
"Starting lookup mgmt for tier [%s] and host [%s:%s:%s].",
tier,
node.getScheme(),
node.getHostText(),
node.getPort()
);
View on GitHub (pinned to 9b90983fd2)