apache/druid · warning
No servers found for query
Error message
No servers found for query[%s] matching configured priorities[%s]. Available priorities[%s].
What it means
StrictTierSelectorStrategy requires servers matching the configured priorities; it does not pool across other servers as freely as the pooled strategy. When no server in the tier matches any configured priority, it logs this warning, emits 'tierSelector/noServer', and proceeds with its strict fallback. It signals a config/topology mismatch between broker priority config and available servers.
Solutions
- Update the broker's configured priorities to include the priorities the tier's servers actually announce.
- Restore/scale up historicals with the configured priority values.
- Consider switching to the pooled tier selector strategy if strict priority matching is too brittle for the topology.
- Monitor tierSelector/noServer metrics to detect recurring mismatches.
Example fix
// before (broker runtime.properties) druid.server.selector.priorities=10 // after (include priorities historicals announce) druid.server.selector.priorities=0,10
Defensive patterns
Strategy: fallback
Validate before calling
Set<Integer> available = prioritizedServers.keySet();
if (available.stream().noneMatch(config.getPriorities()::contains)) { log.warn("No priorities match strict selector"); } Prevention
- Sync broker strict priority config with actual server priorities
- Monitor tierSelector/noServer metric
- Scale up priority-matched historicals before broker cutover
When it happens
Trigger: pick() finds prioritizedServers whose priority keys share no overlap with config.getPriorities() — every candidate server announces a priority outside the configured strict priority set.
Common situations: Historicals upgraded/re-prioritized while broker strict priority config stale; tier dedicated to a priority class that is scaled to zero; segment metadata queries generated by the system hitting a tier without matching priorities.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- No servers found for query
- At most one of 'druid.broker.segment.watchedTiers' and…
- Failed to initialize
- If configured, 'druid.broker.segment.ignoredTiers' must be…
- If configured, 'druid.broker.segment.watchedTiers' must be…
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/f8915e035edec1c5.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/main/java/org/apache/druid/client/selector/StrictTierSelectorStrategy.java:143
if (configuredPriorities.containsKey(priority)) {
candidatePrioritizedServers.put(priority, servers);
} else {
log.debug(
"Server priority[%d] not in the configured list of priorities[%s] so ignore servers[%s] for query[%s]",
priority, config.getPriorities(), servers, query
);
}
}
if (candidatePrioritizedServers.isEmpty()) {
if (query == null || query instanceof SegmentMetadataQuery) {
// Debug logging to reduce logging spam as these are typically system-generated segment metadata queries
log.debug(
"No server found for query[%s] from server priorities[%s]. Configured priorities[%s].",
query, prioritizedServers.keySet(), config.getPriorities()
);
} else {
log.warn(
"No servers found for query[%s] matching configured priorities[%s]. Available priorities[%s].",
query, config.getPriorities(), prioritizedServers.keySet()
);
emitter.emit(
ServiceMetricEvent.builder()
.setMetric("tierSelector/noServer", 1)
.setDimension("dataSource", String.valueOf(query.getDataSource()))
.setDimension("tierSelectorType", TYPE)
.setDimension("queryType", query.getType())
.setDimension("queryPriority", String.valueOf(query.context().getPriority()))
.setDimensionIfNotNull("queryId", query.getId())
);
}
return List.of();
}
final List<QueryableDruidServer> selectedServers = super.pick(query, candidatePrioritizedServers, segment, numServersToPick);
log.debug("Selected servers[%s] for query[%s] from given servers[%s] and numServersToPick[%s]", selectedServers, query, prioritizedServers, numServersToPick);View on GitHub (pinned to 9b90983fd2)