From 78d884c50dfa8844c62d989db700a31fed5f6fe4 Mon Sep 17 00:00:00 2001 From: qnnn <65326092+qnnn@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:19:26 +0800 Subject: [PATCH 1/8] Optimize instance selection performance (#1363) --- .../cloud/loadbalancer/core/RandomLoadBalancer.java | 13 ++++++++----- .../loadbalancer/core/RoundRobinLoadBalancer.java | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java index ed97037c..f1b9f356 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,11 +29,13 @@ import org.springframework.cloud.client.loadbalancer.DefaultResponse; import org.springframework.cloud.client.loadbalancer.EmptyResponse; import org.springframework.cloud.client.loadbalancer.Request; import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.util.function.SingletonSupplier; /** * A random-based implementation of {@link ReactorServiceInstanceLoadBalancer}. * * @author Olga Maciaszek-Sharma + * @author Nan Chiu * @since 2.2.7 */ public class RandomLoadBalancer implements ReactorServiceInstanceLoadBalancer { @@ -42,7 +44,7 @@ public class RandomLoadBalancer implements ReactorServiceInstanceLoadBalancer { private final String serviceId; - private ObjectProvider serviceInstanceListSupplierProvider; + private final SingletonSupplier serviceInstanceListSingletonSupplier; /** * @param serviceInstanceListSupplierProvider a provider of @@ -52,14 +54,15 @@ public class RandomLoadBalancer implements ReactorServiceInstanceLoadBalancer { public RandomLoadBalancer(ObjectProvider serviceInstanceListSupplierProvider, String serviceId) { this.serviceId = serviceId; - this.serviceInstanceListSupplierProvider = serviceInstanceListSupplierProvider; + this.serviceInstanceListSingletonSupplier = SingletonSupplier.of( + () -> serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new) + ); } @SuppressWarnings("rawtypes") @Override public Mono> choose(Request request) { - ServiceInstanceListSupplier supplier = serviceInstanceListSupplierProvider - .getIfAvailable(NoopServiceInstanceListSupplier::new); + ServiceInstanceListSupplier supplier = serviceInstanceListSingletonSupplier.obtain(); return supplier.get(request) .next() .map(serviceInstances -> processInstanceResponse(supplier, serviceInstances)); diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java index 7bed7fe5..6eede246 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ import org.springframework.cloud.client.loadbalancer.DefaultResponse; import org.springframework.cloud.client.loadbalancer.EmptyResponse; import org.springframework.cloud.client.loadbalancer.Request; import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.util.function.SingletonSupplier; /** * A Round-Robin-based implementation of {@link ReactorServiceInstanceLoadBalancer}. @@ -37,6 +38,7 @@ import org.springframework.cloud.client.loadbalancer.Response; * @author Spencer Gibb * @author Olga Maciaszek-Sharma * @author Zhuozhi JI + * @author Nan Chiu */ public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer { @@ -46,7 +48,7 @@ public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalance final String serviceId; - ObjectProvider serviceInstanceListSupplierProvider; + private final SingletonSupplier serviceInstanceListSingletonSupplier; /** * @param serviceInstanceListSupplierProvider a provider of @@ -67,7 +69,9 @@ public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalance public RoundRobinLoadBalancer(ObjectProvider serviceInstanceListSupplierProvider, String serviceId, int seedPosition) { this.serviceId = serviceId; - this.serviceInstanceListSupplierProvider = serviceInstanceListSupplierProvider; + this.serviceInstanceListSingletonSupplier = SingletonSupplier.of( + () -> serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new) + ); this.position = new AtomicInteger(seedPosition); } @@ -77,8 +81,7 @@ public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalance // https://github.com/Netflix/ocelli/blob/master/ocelli-core/ // src/main/java/netflix/ocelli/loadbalancer/RoundRobinLoadBalancer.java public Mono> choose(Request request) { - ServiceInstanceListSupplier supplier = serviceInstanceListSupplierProvider - .getIfAvailable(NoopServiceInstanceListSupplier::new); + ServiceInstanceListSupplier supplier = serviceInstanceListSingletonSupplier.obtain(); return supplier.get(request) .next() .map(serviceInstances -> processInstanceResponse(supplier, serviceInstances)); From a7995a49ad421920fdaa063d8c5894dc14e4dd40 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Mon, 2 Sep 2024 20:02:41 +0000 Subject: [PATCH 2/8] Bumping versions --- .../cloud/loadbalancer/core/RandomLoadBalancer.java | 5 ++--- .../cloud/loadbalancer/core/RoundRobinLoadBalancer.java | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java index f1b9f356..67222ffa 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RandomLoadBalancer.java @@ -54,9 +54,8 @@ public class RandomLoadBalancer implements ReactorServiceInstanceLoadBalancer { public RandomLoadBalancer(ObjectProvider serviceInstanceListSupplierProvider, String serviceId) { this.serviceId = serviceId; - this.serviceInstanceListSingletonSupplier = SingletonSupplier.of( - () -> serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new) - ); + this.serviceInstanceListSingletonSupplier = SingletonSupplier + .of(() -> serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new)); } @SuppressWarnings("rawtypes") diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java index 6eede246..64805204 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java @@ -69,9 +69,8 @@ public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalance public RoundRobinLoadBalancer(ObjectProvider serviceInstanceListSupplierProvider, String serviceId, int seedPosition) { this.serviceId = serviceId; - this.serviceInstanceListSingletonSupplier = SingletonSupplier.of( - () -> serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new) - ); + this.serviceInstanceListSingletonSupplier = SingletonSupplier + .of(() -> serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new)); this.position = new AtomicInteger(seedPosition); } From 99a0e6eeb210c9d1f15aabba4a31690120e40c55 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 4 Sep 2024 12:04:12 +0200 Subject: [PATCH 3/8] Update GH actions. --- .github/workflows/maven.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 96e8b1d4..7979a5c5 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -5,9 +5,9 @@ name: Build on: push: - branches: [ main, 4.1.x, 4.0.x, 3.1.x ] + branches: [ main, 4.1.x ] pull_request: - branches: [ main, 4.1.x, 4.0.x, 3.1.x ] + branches: [ main, 4.1.x ] jobs: build: From 29c9612b8ada48cddc294d88a4d43f26bb02e1db Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 4 Sep 2024 12:05:16 +0200 Subject: [PATCH 4/8] Update dependabot. --- .github/dependabot.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8546d0b2..c2bc6b95 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,6 +10,11 @@ updates: target-branch: "4.0.x" # oldest OSS supported branch schedule: interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + target-branch: "4.1.x" + schedule: + interval: "weekly" - package-ecosystem: "github-actions" directory: "/" target-branch: "main" @@ -37,6 +42,17 @@ updates: update-types: - version-update:semver-major - version-update:semver-minor + - package-ecosystem: maven + directory: / + schedule: + interval: daily + target-branch: 4.1.x + ignore: + # only upgrade patch versions for maintenance branch + - dependency-name: "*" + update-types: + - version-update:semver-major + - version-update:semver-minor - package-ecosystem: maven directory: / schedule: From b911c0ca4126ba601b5a881f3c02b51c210ddb84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:03:06 +0200 Subject: [PATCH 5/8] Bump maven-resolver.version from 1.9.16 to 1.9.22 (#1377) Bumps `maven-resolver.version` from 1.9.16 to 1.9.22. Updates `org.apache.maven.resolver:maven-resolver-connector-basic` from 1.9.16 to 1.9.22 - [Release notes](https://github.com/apache/maven-resolver/releases) - [Commits](https://github.com/apache/maven-resolver/compare/maven-resolver-1.9.16...maven-resolver-1.9.22) Updates `org.apache.maven.resolver:maven-resolver-impl` from 1.9.16 to 1.9.22 - [Release notes](https://github.com/apache/maven-resolver/releases) - [Commits](https://github.com/apache/maven-resolver/compare/maven-resolver-1.9.16...maven-resolver-1.9.22) Updates `org.apache.maven.resolver:maven-resolver-transport-http` from 1.9.16 to 1.9.22 --- updated-dependencies: - dependency-name: org.apache.maven.resolver:maven-resolver-connector-basic dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.maven.resolver:maven-resolver-impl dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.maven.resolver:maven-resolver-transport-http dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spring-cloud-test-support/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-test-support/pom.xml b/spring-cloud-test-support/pom.xml index 87163933..406c455b 100644 --- a/spring-cloud-test-support/pom.xml +++ b/spring-cloud-test-support/pom.xml @@ -16,7 +16,7 @@ Spring Cloud Test Support 3.9.5 - 1.9.16 + 1.9.22 From 4c0a6fa492f3ec3173d5d72e8a104ba6badfd07e Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 4 Sep 2024 14:05:29 +0200 Subject: [PATCH 6/8] Upgrade maven resolver provider version. --- spring-cloud-test-support/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-test-support/pom.xml b/spring-cloud-test-support/pom.xml index 406c455b..d2b9b7b3 100644 --- a/spring-cloud-test-support/pom.xml +++ b/spring-cloud-test-support/pom.xml @@ -15,7 +15,7 @@ spring-cloud-test-support Spring Cloud Test Support - 3.9.5 + 3.9.9 1.9.22 From e5516f1da08899030ec45bb7686aa4972301bb96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:06:34 +0200 Subject: [PATCH 7/8] Bump maven-resolver.version from 1.9.16 to 1.9.22 (#1375) Bumps `maven-resolver.version` from 1.9.16 to 1.9.22. Updates `org.apache.maven.resolver:maven-resolver-connector-basic` from 1.9.16 to 1.9.22 - [Release notes](https://github.com/apache/maven-resolver/releases) - [Commits](https://github.com/apache/maven-resolver/compare/maven-resolver-1.9.16...maven-resolver-1.9.22) Updates `org.apache.maven.resolver:maven-resolver-impl` from 1.9.16 to 1.9.22 - [Release notes](https://github.com/apache/maven-resolver/releases) - [Commits](https://github.com/apache/maven-resolver/compare/maven-resolver-1.9.16...maven-resolver-1.9.22) Updates `org.apache.maven.resolver:maven-resolver-transport-http` from 1.9.16 to 1.9.22 --- updated-dependencies: - dependency-name: org.apache.maven.resolver:maven-resolver-connector-basic dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.maven.resolver:maven-resolver-impl dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.maven.resolver:maven-resolver-transport-http dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spring-cloud-test-support/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-test-support/pom.xml b/spring-cloud-test-support/pom.xml index 39dbd6c4..9f0ef05c 100644 --- a/spring-cloud-test-support/pom.xml +++ b/spring-cloud-test-support/pom.xml @@ -16,7 +16,7 @@ Spring Cloud Test Support 3.9.5 - 1.9.16 + 1.9.22 From 5412d6db541c94f604be38f821d658b81b55c283 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 4 Sep 2024 15:33:18 +0200 Subject: [PATCH 8/8] Add missing test dependency. --- spring-cloud-commons/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index 70f12033..b4a439fa 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -225,5 +225,11 @@ micrometer-observation-test test + + org.apache.commons + commons-lang3 + 3.16.0 + test +