From ceb3e977550793492d1ebc036d3a8e5f318cf88e Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 20 Sep 2025 08:02:31 -0400 Subject: [PATCH 1/7] move to using a local snapshot instead of downloading it --- .../workflows/overhead-benchmark-daily.yml | 3 + .../agents/LatestAgentSnapshotResolver.java | 137 +++++++----------- 2 files changed, 54 insertions(+), 86 deletions(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index e1f77b3f272a..e5c73fa0f5f5 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -31,6 +31,9 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 + - name: Build Latest snapshot JAR + run: ./gradlew assemble + - name: Run tests working-directory: benchmark-overhead run: ./gradlew test diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/agents/LatestAgentSnapshotResolver.java b/benchmark-overhead/src/test/java/io/opentelemetry/agents/LatestAgentSnapshotResolver.java index 58aaa1aa5049..c695e48cdaae 100644 --- a/benchmark-overhead/src/test/java/io/opentelemetry/agents/LatestAgentSnapshotResolver.java +++ b/benchmark-overhead/src/test/java/io/opentelemetry/agents/LatestAgentSnapshotResolver.java @@ -5,115 +5,80 @@ package io.opentelemetry.agents; -import static org.joox.JOOX.$; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; +import java.nio.file.StandardCopyOption; import java.util.Optional; -import java.time.Duration; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; -import org.joox.Match; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; public class LatestAgentSnapshotResolver { private static final Logger logger = LoggerFactory.getLogger(LatestAgentSnapshotResolver.class); - static final String BASE_URL = - "https://oss.sonatype.org/content/repositories/snapshots/io/opentelemetry/javaagent/opentelemetry-javaagent"; - static final String LATEST_SNAPSHOT_META = BASE_URL + "/maven-metadata.xml"; - - private static final OkHttpClient client = new OkHttpClient.Builder() - .connectTimeout(Duration.ofMinutes(1)) - .readTimeout(Duration.ofMinutes(1)) - .build(); - Optional resolve() throws IOException { - String version = fetchLatestSnapshotVersion(); - logger.info("Latest snapshot version is {}", version); - String latestFilename = fetchLatestFilename(version); - String url = BASE_URL + "/" + version + "/" + latestFilename; - byte[] jarBytes = fetchBodyBytesFrom(url); - Path path = Paths.get(".", "opentelemetry-javaagent-SNAPSHOT.jar"); - Files.write( - path, - jarBytes, - StandardOpenOption.CREATE, - StandardOpenOption.WRITE, - StandardOpenOption.TRUNCATE_EXISTING); - return Optional.of(path); - } + Path localJavaagentPath = findLocalJavaagentJar(); - private String fetchLatestFilename(String version) throws IOException { - String url = BASE_URL + "/" + version + "/maven-metadata.xml"; - String body = fetchBodyStringFrom(url); - Document document = $(body).document(); - Match match = $(document).xpath("/metadata/versioning/snapshotVersions/snapshotVersion"); - return match.get().stream() - .filter( - elem -> { - Match classifierMatch = $(elem).child("classifier"); - String classifier = classifierMatch == null ? null : classifierMatch.content(); - String extension = $(elem).child("extension").content(); - return "jar".equals(extension) && (classifier == null); - }) - .map(e -> $(e).child("value").content()) - .findFirst() - .map(value -> "opentelemetry-javaagent-" + value + ".jar") - .orElseThrow(); - } + if (localJavaagentPath == null || !Files.exists(localJavaagentPath)) { + throw new IOException("Local javaagent JAR not found. Please run './gradlew :javaagent:assemble' from the project root first."); + } - private String fetchLatestSnapshotVersion() throws IOException { - String url = LATEST_SNAPSHOT_META; - String body = fetchBodyStringFrom(url); - Document document = $(body).document(); - Match match = $(document).xpath("/metadata/versioning/latest"); - return match.get(0).getTextContent(); - } + logger.info("Using local javaagent JAR: {}", localJavaagentPath); - private String fetchBodyStringFrom(String url) throws IOException { - return fetchBodyFrom(url).string(); + Path targetPath = Paths.get(".", "opentelemetry-javaagent-SNAPSHOT.jar"); + Files.copy(localJavaagentPath, targetPath, StandardCopyOption.REPLACE_EXISTING); + return Optional.of(targetPath); } - private byte[] fetchBodyBytesFrom(String url) throws IOException { - return fetchBodyFrom(url).bytes(); - } + private Path findLocalJavaagentJar() { + Path relativePath = Paths.get("../javaagent/build/libs").toAbsolutePath().normalize(); + Path javaagentJar = findJavaagentJarInDirectory(relativePath); - // The sonatype repository can be very unreliable, so we retry a few times - private ResponseBody fetchBodyFrom(String url) throws IOException { - Request request = new Request.Builder().url(url).build(); - IOException lastException = null; + if (javaagentJar != null) { + return javaagentJar; + } - for (int attempt = 0; attempt < 3; attempt++) { - try { - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { - throw new IOException("Unexpected HTTP code " + response.code() + " for " + url); - } - ResponseBody body = response.body(); - if (body != null) { - byte[] data = body.bytes(); - return ResponseBody.create(data, body.contentType()); - } else { - throw new IOException("Response body is null"); - } - } - } catch (IOException e) { - lastException = e; - if (attempt < 2) { - logger.warn("Attempt {} to fetch {} failed: {}. Retrying...", attempt + 1, url, e.getMessage()); + // If not found, try from the project root (in case running from different location) + Path projectRoot = Paths.get(".").toAbsolutePath().normalize(); + while (projectRoot.getParent() != null) { + Path gradlewFile = projectRoot.resolve("gradlew"); + if (Files.exists(gradlewFile)) { + // Found the project root + Path javaagentLibsDir = projectRoot.resolve("javaagent/build/libs"); + javaagentJar = findJavaagentJarInDirectory(javaagentLibsDir); + if (javaagentJar != null) { + return javaagentJar; } + break; } + projectRoot = projectRoot.getParent(); + } + + return null; + } + + private Path findJavaagentJarInDirectory(Path directory) { + if (!Files.exists(directory) || !Files.isDirectory(directory)) { + return null; + } + + try { + return Files.list(directory) + .filter(path -> { + String filename = path.getFileName().toString(); + // Look for the main jar: opentelemetry-javaagent-VERSION.jar (no additional suffixes) + return filename.startsWith("opentelemetry-javaagent-") && + filename.endsWith(".jar") && + !filename.matches(".*-[a-z]+\\.jar"); // excludes anything with -word.jar pattern + }) + .findFirst() + .orElse(null); + } catch (IOException e) { + logger.warn("Failed to list files in directory {}: {}", directory, e.getMessage()); + return null; } - throw lastException; } } From 6e4a77cf1cf954d0d11bdfdbcd53d36b3dc9ac7f Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 20 Sep 2025 08:05:30 -0400 Subject: [PATCH 2/7] disable for test --- .github/workflows/overhead-benchmark-daily.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index e5c73fa0f5f5..efe28c611281 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -24,9 +24,9 @@ jobs: - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - - name: Copy results from gh-pages branch - run: | - rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ +# - name: Copy results from gh-pages branch +# run: | +# rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ - name: Setup Gradle uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 From 83f32288e584457b009c6001468f59294d51b5a8 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 20 Sep 2025 08:09:36 -0400 Subject: [PATCH 3/7] test --- .github/workflows/overhead-benchmark-daily.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index efe28c611281..e5c73fa0f5f5 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -24,9 +24,9 @@ jobs: - name: Free disk space run: .github/scripts/gha-free-disk-space.sh -# - name: Copy results from gh-pages branch -# run: | -# rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ + - name: Copy results from gh-pages branch + run: | + rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ - name: Setup Gradle uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 From 84a56c542385b5b762a3bbc476d9c43a18127dc7 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 20 Sep 2025 08:26:58 -0400 Subject: [PATCH 4/7] j21 --- .github/workflows/overhead-benchmark-daily.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index e5c73fa0f5f5..321e6208bba2 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -26,7 +26,18 @@ jobs: - name: Copy results from gh-pages branch run: | - rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ + mkdir -p benchmark-overhead/results + if [ -d "gh-pages/benchmark-overhead/results/" ]; then + rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ + else + echo "No existing results directory found, starting fresh" + fi + + - name: Set up JDK 21 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 + with: + distribution: 'temurin' + java-version: '21' - name: Setup Gradle uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 From 48a75ed66bdbfcd9801f5130b8d32c4db1dff97d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 20 Sep 2025 09:06:57 -0400 Subject: [PATCH 5/7] undo unnecessary thing --- .github/workflows/overhead-benchmark-daily.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index 321e6208bba2..3d30d8a59d68 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -26,12 +26,7 @@ jobs: - name: Copy results from gh-pages branch run: | - mkdir -p benchmark-overhead/results - if [ -d "gh-pages/benchmark-overhead/results/" ]; then - rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ - else - echo "No existing results directory found, starting fresh" - fi + rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ - name: Set up JDK 21 uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 @@ -42,7 +37,7 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 - - name: Build Latest snapshot JAR + - name: Build Latest Snapshot JAR run: ./gradlew assemble - name: Run tests From faf2d0fea9045c65bc541c5321293f906d8b6361 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 20 Sep 2025 12:23:40 -0400 Subject: [PATCH 6/7] use consistent approach to setting up jdk --- .github/workflows/overhead-benchmark-daily.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index 3d30d8a59d68..6d7c2da1d53e 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -28,11 +28,11 @@ jobs: run: | rsync -avv gh-pages/benchmark-overhead/results/ benchmark-overhead/results/ - - name: Set up JDK 21 - uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 + - name: Set up JDK for running Gradle + uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: - distribution: 'temurin' - java-version: '21' + distribution: temurin + java-version-file: .java-version - name: Setup Gradle uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 From dab959ec5b10fe270b35b15937e937a09f378e5c Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Fri, 26 Sep 2025 06:55:03 -0400 Subject: [PATCH 7/7] Update .github/workflows/overhead-benchmark-daily.yml Co-authored-by: Lauri Tulmin --- .github/workflows/overhead-benchmark-daily.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/overhead-benchmark-daily.yml b/.github/workflows/overhead-benchmark-daily.yml index 6d7c2da1d53e..dd9fa2db7ac1 100644 --- a/.github/workflows/overhead-benchmark-daily.yml +++ b/.github/workflows/overhead-benchmark-daily.yml @@ -38,7 +38,7 @@ jobs: uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3 - name: Build Latest Snapshot JAR - run: ./gradlew assemble + run: ./gradlew assemble -x javadoc - name: Run tests working-directory: benchmark-overhead