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); + } }