/** * Returns the resources with the given type. * * @param typeUrl the URL for the requested resource type */ public Map<String, ? extends Message> resources(String typeUrl) { if (Strings.isNullOrEmpty(typeUrl)) { return ImmutableMap.of(); } switch (typeUrl) { case CLUSTER_TYPE_URL: return clusters().resources(); case ENDPOINT_TYPE_URL: return endpoints().resources(); case LISTENER_TYPE_URL: return listeners().resources(); case ROUTE_TYPE_URL: return routes().resources(); case SECRET_TYPE_URL: return secrets().resources(); default: return ImmutableMap.of(); } }
/** * Asserts that all dependent resources are included in the snapshot. All EDS resources are listed by name in CDS * resources, and all RDS resources are listed by name in LDS resources. * * <p>Note that clusters and listeners are requested without name references, so Envoy will accept the snapshot list * of clusters as-is, even if it does not match all references found in xDS. * * @throws SnapshotConsistencyException if the snapshot is not consistent */ public void ensureConsistent() throws SnapshotConsistencyException { Set<String> clusterEndpointRefs = Resources.getResourceReferences(clusters().resources().values()); ensureAllResourceNamesExist(CLUSTER_TYPE_URL, ENDPOINT_TYPE_URL, clusterEndpointRefs, endpoints().resources()); Set<String> listenerRouteRefs = Resources.getResourceReferences(listeners().resources().values()); ensureAllResourceNamesExist(LISTENER_TYPE_URL, ROUTE_TYPE_URL, listenerRouteRefs, routes().resources()); }