fix-1965 ( fabric8 only )#2167
Conversation
Signed-off-by: wind57 <eugen.rabii@gmail.com>
Signed-off-by: wind57 <eugen.rabii@gmail.com>
Signed-off-by: wind57 <eugen.rabii@gmail.com>
|
@ryanjbaxter can you trigger copilot please? |
| @Conditional(OnServiceMatchingStrategyCondition.class) | ||
| @Retention(RetentionPolicy.RUNTIME) | ||
| @Target({ ElementType.TYPE, ElementType.METHOD }) | ||
| public @interface ConditionalOnServiceMatchingStrategyCondition { |
There was a problem hiding this comment.
conditionally enable loadbalancer services searching : either by name or by labels
| /** | ||
| * Loadbalancer services discovery happens based on labels. | ||
| */ | ||
| LABELS |
There was a problem hiding this comment.
introduce a new way to load services
| public class Fabric8LabelBasedServicesListSupplier extends AbstractFabric8ServicesListSupplier { | ||
|
|
||
| private static final LogAccessor LOG = new LogAccessor(Fabric8LabelBasedServicesListSupplier.class); | ||
|
|
There was a problem hiding this comment.
this code is almost the same we have for name based searches, with the exception that this is done by labels here
There was a problem hiding this comment.
Pull request overview
This PR (fabric8 module only) introduces a configurable “service matching strategy” for SERVICE-mode load balancing (by service name vs by labels), adds a new Fabric8 label-based ServiceInstanceListSupplier, and refactors/expands the Fabric8 load balancer test suite + mock helpers accordingly.
Changes:
- Add
LoadBalancerServiceMatchingStrategy(NAME/LABELS) and a conditional mechanism to select the appropriate supplier based onspring.cloud.kubernetes.loadbalancer.service-matching-strategy(default NAME). - Implement
Fabric8LabelBasedServicesListSupplierand wire it into Fabric8 load balancer client configuration. - Refactor Fabric8 IT tests/mocks (remove
Util, add dedicated mock helpers) and add coverage for label-based behavior and caching scenarios.
Reviewed changes
Copilot reviewed 29 out of 29 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/name/cache/CacheEnabledWithinTTLTest.java | Adjust test package/imports; switch to new mock helpers. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/name/cache/CacheEnabledOutsideTTLTest.java | Adjust test package/imports; switch to new mock helpers. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/name/cache/CacheDisabledTest.java | New test validating cache-disabled behavior (NAME strategy) using new mock helpers. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/name/SpecificNamespaceTest.java | Package rename + refactor to new mock helpers. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/name/SelectiveNamespacesTest.java | Package rename + refactor to new mock helpers. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/name/AllNamespacesTest.java | Package rename + refactor to new mock helpers; consolidate call-count constant. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/label/cache/CacheEnabledWithinTTLTest.java | New label-strategy cache-within-TTL integration test. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/label/cache/CacheEnabledOutsideTTLTest.java | New label-strategy cache-outside-TTL integration test. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/label/cache/CacheDisabledTest.java | Update existing cache-disabled test to use LABELS strategy + new mock helpers. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/label/SpecificNamespaceTest.java | New label-strategy specific-namespace integration test. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/label/SelectiveNamespacesTest.java | New label-strategy selective-namespaces integration test. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/service/label/AllNamespacesTest.java | New label-strategy all-namespaces integration test. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/pod/SpecificNamespaceTest.java | Refactor to new indexer-mock helpers; remove WireMock global configure calls. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/pod/SelectiveNamespacesTest.java | Refactor to new indexer-mock helpers; remove WireMock global configure calls. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/mode/pod/AllNamespacesTest.java | Refactor to new indexer-mock helpers; minor assertion style cleanup. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/Util.java | Remove old monolithic test util (replaced by dedicated mock helper classes). |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/LoadbalancerMocks.java | New helper for mocking Fabric8 load balancer service list calls. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/LoadBalancerConfiguration.java | Fix package to match path and simplify imports for IT tests. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/DiscoveryClientIndexerMocks.java | New helper consolidating shared-informer indexer mock expectations. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/it/App.java | Fix package to match path (IT test boot app). |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8NamedServicesListSupplierMockClientTests.java | Rename test class; simplify test setup system properties. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerAutoConfigurationTests.java | Add tests validating default/explicit NAME vs LABELS strategy bean selection. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LabeledServicesListSupplierMockClientTests.java | New mock-client tests for label-based supplier behavior. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServicesListSupplier.java | Minor logging initialization simplification. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerClientConfiguration.java | Wire NAME vs LABELS suppliers via new conditional strategy selection. |
| spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LabelBasedServicesListSupplier.java | New label-filtering SERVICE-mode list supplier implementation. |
| spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/loadbalancer/OnServiceMatchingStrategyCondition.java | New Spring condition selecting matching strategy (defaults to NAME). |
| spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/loadbalancer/LoadBalancerServiceMatchingStrategy.java | New enum defining NAME vs LABELS matching strategies. |
| spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/loadbalancer/ConditionalOnServiceMatchingStrategyCondition.java | New conditional annotation for strategy-based bean selection. |
Comments suppressed due to low confidence (1)
spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerClientConfiguration.java:46
- Renaming the
@Beanmethod fromkubernetesServicesListSuppliertokubernetesNameBasedServicesListSupplierchanges the bean name and can be a breaking change for users that override or reference the bean by name. Consider explicitly keeping the previous bean name (e.g., via@Bean("kubernetesServicesListSupplier")) for the NAME strategy while introducing a separate bean name for the LABELS strategy.
@Bean
@ConditionalOnKubernetesLoadBalancerServiceModeEnabled
@ConditionalOnServiceMatchingStrategyCondition(NAME)
ServiceInstanceListSupplier kubernetesNameBasedServicesListSupplier(Environment environment,
KubernetesClient kubernetesClient, Fabric8ServiceInstanceMapper mapper,
KubernetesDiscoveryProperties discoveryProperties, ConfigurableApplicationContext context) {
return ServiceInstanceListSupplier.builder()
.withBase(new Fabric8ServicesListSupplier(environment, kubernetesClient, mapper, discoveryProperties))
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: wind57 <eugen.rabii@gmail.com>
|
@ryanjbaxter this is ready to be looked at. it only fixes fabric8 client code, I will work on k8s-client implementation also. In that PR, I will also update the documentation. |
No description provided.