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

  1. Update the broker's configured priorities to include the priorities the tier's servers actually announce.
  2. Restore/scale up historicals with the configured priority values.
  3. Consider switching to the pooled tier selector strategy if strict priority matching is too brittle for the topology.
  4. 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

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


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)