From 30635842c3f23547cc8be5cf9d506de846b5f2b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:31:11 +0100 Subject: [PATCH 1/4] Bump @antora/collector-extension in /docs (#4369) --- updated-dependencies: - dependency-name: "@antora/collector-extension" 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> --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index cff679751..2054ec1c5 100644 --- a/docs/package.json +++ b/docs/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-beta.4", + "@antora/collector-extension": "1.0.0-beta.5", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From 4596c56e6eaa3c6cb8e4af4468d737c1a992d038 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:32:29 +0100 Subject: [PATCH 2/4] Bump codecov/codecov-action from 4 to 5 (#4367) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index f9c048e4a..7e6f06596 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -28,6 +28,6 @@ jobs: cache: 'maven' - name: Build with Maven run: ./mvnw clean install -B -U -P sonar - - uses: codecov/codecov-action@v4 + - uses: codecov/codecov-action@v5 with: fail_ci_if_error: false From 5d213f792847245b8092826c8341c4ababd60387 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:52:18 +0100 Subject: [PATCH 3/4] Bump testcontainers.version from 1.20.3 to 1.20.4 (#4373) Bumps `testcontainers.version` from 1.20.3 to 1.20.4. Updates `org.testcontainers:mockserver` from 1.20.3 to 1.20.4 - [Release notes](https://github.com/testcontainers/testcontainers-java/releases) - [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.3...1.20.4) Updates `org.testcontainers:junit-jupiter` from 1.20.3 to 1.20.4 - [Release notes](https://github.com/testcontainers/testcontainers-java/releases) - [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.3...1.20.4) --- updated-dependencies: - dependency-name: org.testcontainers:mockserver dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.testcontainers:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e93fcdfa7..bc19d8bed 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ netflix 4.1.5-SNAPSHOT 4.1.4-SNAPSHOT - 1.20.3 + 1.20.4 5.15.0 From 011d1815867d8c3907b46d76017f921d565139a2 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Fri, 22 Nov 2024 14:58:05 +0100 Subject: [PATCH 4/4] Use task executor for Euereka Server metrics. (#4376) --- spring-cloud-netflix-eureka-server/pom.xml | 6 ++++++ .../EurekaInstanceMetricsAutoConfiguration.java | 6 ++++-- .../server/metrics/EurekaInstanceMonitor.java | 11 ++++++++++- .../eureka/server/EurekaInstanceMonitorTests.java | 15 ++++++++++++--- ...nstanceMonitorWithCustomTagsProviderTests.java | 15 ++++++++++++--- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index cc41eab9d..5da81a111 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -98,6 +98,12 @@ spring-security-rsa test + + org.awaitility + awaitility + test + + diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMetricsAutoConfiguration.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMetricsAutoConfiguration.java index 62bce04e1..d47a30a21 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMetricsAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMetricsAutoConfiguration.java @@ -28,11 +28,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration; import org.springframework.context.annotation.Bean; +import org.springframework.core.task.TaskExecutor; /** * Auto-configuration for Eureka Instance metrics. * * @author Wonchul Heo + * @author Olga Maciaszek-Sharma * @since 4.1.2 */ @ConditionalOnClass(MeterRegistry.class) @@ -51,8 +53,8 @@ class EurekaInstanceMetricsAutoConfiguration { @ConditionalOnMissingBean @Bean public EurekaInstanceMonitor eurekaInstanceMeterBinder(MeterRegistry meterRegistry, - PeerAwareInstanceRegistry instanceRegistry, EurekaInstanceTagsProvider tagProvider) { - return new EurekaInstanceMonitor(meterRegistry, instanceRegistry, tagProvider); + PeerAwareInstanceRegistry instanceRegistry, EurekaInstanceTagsProvider tagProvider, TaskExecutor executor) { + return new EurekaInstanceMonitor(meterRegistry, instanceRegistry, tagProvider, executor); } } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMonitor.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMonitor.java index 99bbd624a..5442ec232 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMonitor.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/metrics/EurekaInstanceMonitor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.eureka.server.metrics; import java.util.Map; import java.util.Objects; +import java.util.concurrent.Executor; import java.util.stream.Collectors; import com.netflix.eureka.registry.PeerAwareInstanceRegistry; @@ -36,6 +37,7 @@ import org.springframework.context.event.SmartApplicationListener; * {@link PeerAwareInstanceRegistry}. * * @author Wonchul Heo + * @author Olga Maciaszek-Sharma * @since 4.1.2 */ public class EurekaInstanceMonitor implements SmartApplicationListener { @@ -46,14 +48,17 @@ public class EurekaInstanceMonitor implements SmartApplicationListener { private final EurekaInstanceTagsProvider tagProvider; + private final Executor executor; + EurekaInstanceMonitor(MeterRegistry meterRegistry, PeerAwareInstanceRegistry instanceRegistry, - EurekaInstanceTagsProvider tagProvider) { + EurekaInstanceTagsProvider tagProvider, Executor executor) { Objects.requireNonNull(meterRegistry); this.instanceRegistry = Objects.requireNonNull(instanceRegistry); this.tagProvider = Objects.requireNonNull(tagProvider); this.eurekaInstances = MultiGauge.builder("eureka.server.instances") .description("Number of application instances registered with the Eureka server.") .register(meterRegistry); + this.executor = executor; } @Override @@ -71,6 +76,10 @@ public class EurekaInstanceMonitor implements SmartApplicationListener { .stream() .flatMap(application -> application.getInstances().stream()) .collect(Collectors.groupingBy(tagProvider::eurekaInstanceTags, Collectors.counting())); + executor.execute(() -> registerMetrics(aggregatedCounts)); + } + + private void registerMetrics(Map aggregatedCounts) { eurekaInstances.register(aggregatedCounts.entrySet() .stream() .map(entry -> MultiGauge.Row.of(entry.getKey(), entry.getValue())) diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorTests.java index 41872218e..a5740752e 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorTests.java @@ -28,14 +28,21 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.netflix.eureka.server.metrics.EurekaInstanceMonitor; import org.springframework.context.annotation.Configuration; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; +import static org.awaitility.pollinterval.FibonacciPollInterval.fibonacci; import static org.springframework.cloud.netflix.eureka.server.EurekaInstanceFixture.getInstanceInfo; import static org.springframework.cloud.netflix.eureka.server.EurekaInstanceFixture.getLeaseInfo; /** + * Tests for {@link EurekaInstanceMonitor}. + * * @author Wonchul Heo + * @author Olga Maciaszek-Sharma */ @SpringBootTest(classes = EurekaInstanceMonitorTests.Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @@ -151,9 +158,11 @@ class EurekaInstanceMonitorTests { } private void assertEurekaInstance(Map meterRegistryCounts) { - meterRegistryCounts.forEach((tags, - count) -> assertThat((long) meterRegistry.get("eureka.server.instances").tags(tags).gauge().value()) - .isEqualTo(count)); + await().atMost(5, SECONDS) + .pollInterval(fibonacci()) + .untilAsserted(() -> meterRegistryCounts.forEach((tags, + count) -> assertThat((long) meterRegistry.get("eureka.server.instances").tags(tags).gauge().value()) + .isEqualTo(count))); } @Configuration(proxyBeanMethods = false) diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorWithCustomTagsProviderTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorWithCustomTagsProviderTests.java index ec832013f..c7ea689dc 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorWithCustomTagsProviderTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaInstanceMonitorWithCustomTagsProviderTests.java @@ -27,16 +27,23 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.netflix.eureka.server.metrics.EurekaInstanceMonitor; import org.springframework.cloud.netflix.eureka.server.metrics.EurekaInstanceTagsProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; +import static org.awaitility.pollinterval.FibonacciPollInterval.fibonacci; import static org.springframework.cloud.netflix.eureka.server.EurekaInstanceFixture.getInstanceInfo; import static org.springframework.cloud.netflix.eureka.server.EurekaInstanceFixture.getLeaseInfo; /** + * Tests for {@link EurekaInstanceMonitor} with custom tags provider. + * * @author Wonchul Heo + * @author Olga Maciaszek-Sharma */ @SpringBootTest(classes = EurekaInstanceMonitorWithCustomTagsProviderTests.Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @@ -82,9 +89,11 @@ class EurekaInstanceMonitorWithCustomTagsProviderTests { } private void assertEurekaInstance(Map meterRegistryCounts) { - meterRegistryCounts.forEach((tags, - count) -> assertThat((long) meterRegistry.get("eureka.server.instances").tags(tags).gauge().value()) - .isEqualTo(count)); + await().atMost(5, SECONDS) + .pollInterval(fibonacci()) + .untilAsserted(() -> meterRegistryCounts.forEach((tags, + count) -> assertThat((long) meterRegistry.get("eureka.server.instances").tags(tags).gauge().value()) + .isEqualTo(count))); } @Configuration(proxyBeanMethods = false)