{"record":{"id":"8816012f5150a005","repo":"apache/druid","slug":"no-servers-found-for-query-s-matching-configured","errorCode":null,"errorMessage":"No servers found for query[%s] matching configured priorities[%s]. Available priorities[%s].","messagePattern":"No servers found for query\\[(.+?)\\] matching configured priorities\\[(.+?)\\]\\. Available priorities\\[(.+?)\\]\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"server/src/main/java/org/apache/druid/client/selector/PooledTierSelectorStrategy.java","lineNumber":112,"sourceCode":"      if (configuredPriorities.contains(priority)) {\n        candidateServerPool.addAll(servers);\n      } else {\n        log.debug(\n            \"Server priority[%d] not in the configured list of priorities[%s] so ignore servers[%s] for query[%s]\",\n            priority, config.getPriorities(), servers, query\n        );\n      }\n    }\n\n    if (candidateServerPool.isEmpty()) {\n      if (query == null || query instanceof SegmentMetadataQuery) {\n        // Debug logging to reduce logging spam as these are typically system-generated segment metadata queries\n        log.debug(\n            \"No server found for query[%s] from server priorities[%s]. Configured priorities[%s].\",\n            query, prioritizedServers.keySet(), config.getPriorities()\n        );\n      } else {\n        log.warn(\n            \"No servers found for query[%s] matching configured priorities[%s]. Available priorities[%s].\",\n            query, config.getPriorities(), prioritizedServers.keySet()\n        );\n        emitter.emit(\n            ServiceMetricEvent.builder()\n                              .setMetric(\"tierSelector/noServer\", 1)\n                              .setDimension(\"dataSource\", String.valueOf(query.getDataSource()))\n                              .setDimension(\"tierSelectorType\", TYPE)\n                              .setDimension(\"queryType\", query.getType())\n                              .setDimension(\"queryPriority\", String.valueOf(query.context().getPriority()))\n                              .setDimensionIfNotNull(\"queryId\", query.getId())\n        );\n      }\n      return List.of();\n    }\n\n    final List<QueryableDruidServer> selectedServers = serverSelectorStrategy.pick(query, candidateServerPool, segment, numServersToPick);\n    log.debug(\"Selected servers[%s] for query[%s] from given servers[%s] and candidateServerPool[%s]\", selectedServers, query, prioritizedServers, candidateServerPool);","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/client/selector/PooledTierSelectorStrategy.java#L94-L130","documentation":"PooledTierSelectorStrategy picks a query-serving server from a tier, honoring server priority configuration. When no servers in the tier match any of the configured priorities, it logs this warning, emits a 'tierSelector/noServer' metric, and then falls back to its pooling selection. It indicates a mismatch between broker priority configuration and actual server priorities.","triggerScenarios":"pick() is called for a query and prioritizedServers (servers grouped by priority) contains no priority that appears in the selector's configured priorities list — e.g. all available servers have priorities outside the configured set.","commonSituations":"druid.processing.priority / tier priority config lists priorities no historical actually announces; historicals reconfigured with new priorities while broker config unchanged; all historicals of the needed priority tier are down; system-generated segment metadata queries hitting a tier with no matching priorities.","solutions":["Align the selector's configured priorities with the priorities actually announced by servers in the tier (check broker runtime.properties vs historical server priorities).","Bring up or restore historicals whose priorities match the configured set.","If the fallback behavior is acceptable, treat as warning noise and remove unneeded priorities from config.","Check the tierSelector/noServer metric frequency to quantify impact."],"exampleFix":"// before (broker runtime.properties)\ndruid.server.selector.priorities=0,5\n// after (match historicals announcing priority 10)\ndruid.server.selector.priorities=0,5,10","handlingStrategy":"fallback","validationCode":"Set<Integer> available = prioritizedServers.keySet();\nif (available.stream().noneMatch(config.getPriorities()::contains)) { log.warn(\"No priorities match; relying on fallback\"); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep broker priority config in sync with historical priorities","Alert on tierSelector/noServer metric","Prefer pooled strategy for heterogeneous tiers"],"tags":["druid","broker","server-selection","priority","load-balancing"],"backgroundTag":"empty-result-set","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}