From c45e7a8ef918376f654e871b6e3ff247834e3142 Mon Sep 17 00:00:00 2001 From: Jack Shirazi Date: Wed, 3 Jun 2026 13:40:11 +0100 Subject: [PATCH 1/2] Handle multiple invalid server URLs --- .../agent/report/ApmServerHealthChecker.java | 8 ++++++- .../report/ApmServerHealthCheckerTest.java | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java index 275ebd07d1a..21354c43b79 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java @@ -100,7 +100,13 @@ public Version withConnection(HttpURLConnection connection) { return null; } }); - versions.remove(null); + return getMinVersionOrUnknown(versions); + } + + static Version getMinVersionOrUnknown(List versions) { + while (versions.remove(null)) { + // remove all unavailable server results before comparing versions + } if (!versions.isEmpty()) { return Collections.min(versions); } diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerHealthCheckerTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerHealthCheckerTest.java index 51e5ef978e4..167d6e690c7 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerHealthCheckerTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerHealthCheckerTest.java @@ -22,6 +22,9 @@ import org.junit.jupiter.api.Test; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -39,4 +42,25 @@ void testParseVersion() throws IOException { body = "{\"ok\":{\"build_date\":\"2021-10-13T17:29:41Z\",\"build_sha\":\"04a84d8d3d0358af5e73b3581c4ba37fbdbc979e\",\"version\":\"6.8.20\"}}"; assertThat(ApmServerHealthChecker.parseVersion(body).compareTo(Version.of("6.8.20"))).isEqualTo(0); } + + @Test + void testMinVersionIgnoresUnavailableServers() { + List versions = new ArrayList<>(Arrays.asList( + Version.of("8.0.0"), + null, + Version.of("7.17.0"), + null + )); + + assertThat(ApmServerHealthChecker.getMinVersionOrUnknown(versions)) + .isEqualTo(Version.of("7.17.0")); + } + + @Test + void testMinVersionReturnsUnknownWhenAllServersUnavailable() { + List versions = new ArrayList<>(Arrays.asList(null, null)); + + assertThat(ApmServerHealthChecker.getMinVersionOrUnknown(versions)) + .isEqualTo(ApmServerHealthChecker.UNKNOWN_VERSION); + } } From 1e2cac8a282b51aa08d5fe675efd93b66530727d Mon Sep 17 00:00:00 2001 From: Jack Shirazi Date: Fri, 5 Jun 2026 09:56:27 +0100 Subject: [PATCH 2/2] changelog addition --- CHANGELOG.next-release.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.next-release.md b/CHANGELOG.next-release.md index 159e581d2c5..6d2292dbecf 100644 --- a/CHANGELOG.next-release.md +++ b/CHANGELOG.next-release.md @@ -13,6 +13,7 @@ This file contains all changes which are not released yet. * Fix unsupported-aggregation warning in OpenTelemetry metric SDK exporter to use SLF4J-style `{}` placeholders instead of `%s`, so the metric name and aggregation type are rendered in the log message - [#4466](https://github.com/elastic/apm-agent-java/pull/4466) * Stop OTel metrics exporter from throwing `IndexOutOfBoundsException` when a histogram has no explicit bucket boundaries - [#4465](https://github.com/elastic/apm-agent-java/pull/4465) * Cast to parent buffer for Java 8 buffer method compatibility - [#4498](https://github.com/elastic/apm-agent-java/pull/4498) +* Minor fix to remove NPE noise if multiple APM URLs are invalid - [#4501](https://github.com/elastic/apm-agent-java/pull/4501) # Features and enhancements