{"record":{"id":"ea0231c9fbb7ded0","repo":"grpc/grpc-java","slug":"no-xds-servers-found-for-authority","errorCode":null,"errorMessage":"No xds servers found for authority ","messagePattern":"No xds servers found for authority ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"xds/src/main/java/io/grpc/xds/client/XdsClientImpl.java","lineNumber":482,"sourceCode":"    for (Map<String, ResourceSubscriber<?>> subscriberMap : resourceSubscribers.values()) {\n      for (ResourceSubscriber<?> subscriber : subscriberMap.values()) {\n        if (cpcForThisStream == null || authoritiesForCpc.contains(subscriber.authority)) {\n          subscriber.stopTimer();\n        }\n      }\n    }\n  }\n\n  private ControlPlaneClient getOrCreateControlPlaneClient(String authority) throws IOException {\n    // Optimize for the common case of a working ads stream already exists for the authority\n    ControlPlaneClient activeCpc = getActiveCpc(authority);\n    if (activeCpc != null && !activeCpc.isInError()) {\n      return activeCpc;\n    }\n\n    ImmutableList<ServerInfo> serverInfos = getServerInfos(authority);\n    if (serverInfos == null) {\n      throw new IllegalArgumentException(\"No xds servers found for authority \" + authority);\n    }\n\n    for (ServerInfo serverInfo : serverInfos) {\n      ControlPlaneClient cpc = getOrCreateControlPlaneClient(serverInfo);\n      if (cpc.isInError()) {\n        continue;\n      }\n      return cpc;\n    }\n\n    // Everything existed and is in backoff so throw\n    throw new IOException(\"All xds transports for authority \" + authority + \" are in backoff\");\n  }\n\n  private ControlPlaneClient getOrCreateControlPlaneClient(ServerInfo serverInfo) {\n    syncContext.throwIfNotInThisSynchronizationContext();\n    if (serverCpClientMap.containsKey(serverInfo)) {\n      return serverCpClientMap.get(serverInfo);","sourceCodeStart":464,"sourceCodeEnd":500,"githubUrl":"https://github.com/grpc/grpc-java/blob/64daddc1f3d1975670f769f3e97bde8b2ba32d25/xds/src/main/java/io/grpc/xds/client/XdsClientImpl.java#L464-L500","documentation":"XdsClientImpl.getOrCreateControlPlaneClient looks up the list of ServerInfo for the requested authority. If no bootstrap servers are registered for that authority (getServerInfos returns null), it throws IllegalArgumentException(\"No xds servers found for authority \" + authority). The client cannot open a control-plane channel for an unknown authority.","triggerScenarios":"Requesting resources for an authority that has no entry in the bootstrap 'authorities' map (or when no top-level servers are configured as fallback for the empty/\"\" authority); bootstrap loaded without the authority in question.","commonSituations":"Multi-authority (Traffic Director federation) setups where the resource's authority wasn't listed under 'authorities' in the bootstrap file; typo in the authority name; using a default-authority resource while bootstrap only defines named authorities.","solutions":["Add the missing authority (with its own 'xds_servers' list) to the 'authorities' section of the bootstrap JSON.","Fix the authority name used in the resource name (xdstp://<authority>/...) to match one configured in bootstrap.","Verify the bootstrap file was actually loaded with the intended authorities by checking the logged bootstrap configuration.","If the resource should use the default server, drop the authority from the resource name instead of requesting an unconfigured one."],"exampleFix":"// before: bootstrap has no entry for foo.com\n// after\n\"authorities\": {\n  \"foo.com\": { \"xds_servers\": [{ \"server_uri\": \"dns:///xds-foo.example.com:443\",\n                                  \"channel_creds\": [{\"type\": \"google_default\"}] }] }\n}","handlingStrategy":"validation","validationCode":"java.util.Map<String, ?> bootstrap = parseBootstrapJson();\njava.util.Map<String, ?> authorities = (java.util.Map<String, ?>) bootstrap.get(\"authorities\");\nif (authorities == null || !authorities.containsKey(authorityName)) {\n  throw new IllegalStateException(\"authority not configured in bootstrap: \" + authorityName);\n}","typeGuard":"boolean authorityConfigured(java.util.Map<String, ?> bootstrap, String authority) {\n  Object a = bootstrap.get(\"authorities\");\n  return a instanceof java.util.Map && ((java.util.Map<?, ?>) a).containsKey(authority);\n}","tryCatchPattern":"try {\n  xdsClient.createResourceWatcher(...);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().startsWith(\"No xds servers found for authority\")) {\n    // add the authority to bootstrap 'authorities' or fix the resource name\n  }\n}","preventionTips":["List every authority used in xdstp:// resource names under bootstrap 'authorities'.","Derive authority names from the same config that generates the bootstrap file to avoid typos.","Log the parsed bootstrap at startup and confirm authorities are present."],"tags":["grpc","xds","authority","configuration","not-found"],"backgroundTag":"resource-not-found","analyzedSha":"64daddc1f3d1975670f769f3e97bde8b2ba32d25","analyzedAt":"2026-09-08T06:14:57.704Z","contentChangedAt":"2026-09-08T06:14:57.704Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}