Skip to content

Commit 3d5fd98

Browse files
committed
Merge branch '3.0.x'
2 parents 1d403cb + 504fe36 commit 3d5fd98

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8KubernetesDiscoveryClientUtils.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,26 +222,31 @@ else if (!properties.namespaces().isEmpty()) {
222222

223223
// see https://github.com/spring-cloud/spring-cloud-kubernetes/issues/1182 on why this
224224
// is needed
225-
static List<Endpoints> withFilter(List<Endpoints> initial, KubernetesDiscoveryProperties properties,
225+
static List<Endpoints> withFilter(List<Endpoints> endpoints, KubernetesDiscoveryProperties properties,
226226
KubernetesClient client, Predicate<Service> filter) {
227227

228228
if (properties.filter() == null || properties.filter().isBlank()) {
229229
LOG.debug(() -> "filter not present");
230-
return initial;
230+
return endpoints;
231231
}
232232

233233
List<Endpoints> result = new ArrayList<>();
234234
// group by namespace in order to make a single API call per namespace when
235235
// retrieving services
236-
Map<String, List<Endpoints>> byNamespace = initial.stream()
236+
Map<String, List<Endpoints>> endpointsByNamespace = endpoints.stream()
237237
.collect(Collectors.groupingBy(x -> x.getMetadata().getNamespace()));
238238

239-
for (Map.Entry<String, List<Endpoints>> entry : byNamespace.entrySet()) {
240-
Set<String> withFilter = client.services().inNamespace(entry.getKey()).list().getItems().stream()
239+
for (Map.Entry<String, List<Endpoints>> entry : endpointsByNamespace.entrySet()) {
240+
// get all services in the namespace that match the filter
241+
Set<String> filteredServiceNames = client.services().inNamespace(entry.getKey()).list().getItems().stream()
241242
.filter(filter).map(service -> service.getMetadata().getName()).collect(Collectors.toSet());
242243

243-
result.addAll(
244-
entry.getValue().stream().filter(x -> withFilter.contains(x.getMetadata().getName())).toList());
244+
// in the previous step we might have taken "too many" services, so in the
245+
// next one take only those that have a matching endpoints, by name.
246+
// This way we only get the endpoints that have a matching service with an
247+
// applied filter, it's like we filtered endpoints by that filter.
248+
result.addAll(entry.getValue().stream()
249+
.filter(endpoint -> filteredServiceNames.contains(endpoint.getMetadata().getName())).toList());
245250

246251
}
247252

spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ public List<ServiceInstance> getInstances(String serviceId) {
109109

110110
List<ServiceInstance> instances = new ArrayList<>();
111111
for (EndpointSubsetNS es : subsetsNS) {
112+
// subsetsNS are only those that matched the serviceId
112113
instances.addAll(getNamespaceServiceInstances(es, serviceId));
113114
}
114115

0 commit comments

Comments
 (0)