{"record":{"id":"f8915e035edec1c5","repo":"apache/druid","slug":"no-servers-found-for-query-s-matching-configured-f8915e","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/StrictTierSelectorStrategy.java","lineNumber":143,"sourceCode":"      if (configuredPriorities.containsKey(priority)) {\n        candidatePrioritizedServers.put(priority, 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 (candidatePrioritizedServers.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 = super.pick(query, candidatePrioritizedServers, segment, numServersToPick);\n    log.debug(\"Selected servers[%s] for query[%s] from given servers[%s] and numServersToPick[%s]\", selectedServers, query, prioritizedServers, numServersToPick);","sourceCodeStart":125,"sourceCodeEnd":161,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/client/selector/StrictTierSelectorStrategy.java#L125-L161","documentation":"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.","triggerScenarios":"pick() finds prioritizedServers whose priority keys share no overlap with config.getPriorities() — every candidate server announces a priority outside the configured strict priority set.","commonSituations":"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.","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."],"exampleFix":"// before (broker runtime.properties)\ndruid.server.selector.priorities=10\n// after (include priorities historicals announce)\ndruid.server.selector.priorities=0,10","handlingStrategy":"fallback","validationCode":"Set<Integer> available = prioritizedServers.keySet();\nif (available.stream().noneMatch(config.getPriorities()::contains)) { log.warn(\"No priorities match strict selector\"); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Sync broker strict priority config with actual server priorities","Monitor tierSelector/noServer metric","Scale up priority-matched historicals before broker cutover"],"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"}