From c086ca1545a6e8dbdcef0d919e86ef84e3fb6ee9 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 11:14:12 -0800 Subject: [PATCH 01/18] Load dlls from subfolder --- .../agent/internal/diagnostics/etw/EtwProvider.java | 5 +++-- .../applicationinsights/smoketestapp/TestController.java | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index c5b57a07525..fc9091e9789 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -10,9 +10,10 @@ import org.slf4j.LoggerFactory; public class EtwProvider { - private static final String LIB_FILENAME_32_BIT = "applicationinsights-java-etw-provider-x86.dll"; + private static final String LIB_FILENAME_32_BIT = + "inst/applicationinsights-java-etw-provider-x86.dll"; private static final String LIB_FILENAME_64_BIT = - "applicationinsights-java-etw-provider-x86-64.dll"; + "inst/applicationinsights-java-etw-provider-x86-64.dll"; private static final Logger LOGGER = LoggerFactory.getLogger(EtwProvider.class); diff --git a/smoke-tests/apps/VerifyAgentJar/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/VerifyAgentJar/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java index deec87d62a5..56fcfb6f971 100644 --- a/smoke-tests/apps/VerifyAgentJar/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java +++ b/smoke-tests/apps/VerifyAgentJar/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -85,8 +85,6 @@ public List getUnexpectedEntries() throws IOException { expectedEntries.add("rp-logger-config/"); expectedEntries.add("rp-logger-config/diagnostics\\.appender\\.xml"); expectedEntries.add("rp-logger-config/etw\\.appender\\.xml"); - expectedEntries.add("applicationinsights-java-etw-provider-x86-64\\.dll"); - expectedEntries.add("applicationinsights-java-etw-provider-x86\\.dll"); expectedEntries.add("inst/.*"); JarFile jarFile = new JarFile(AGENT_JAR); List unexpected = new ArrayList<>(); From 10bafaceb7d8af37f3b2ac8a83eca1ad0dfbc7c3 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 11:27:34 -0800 Subject: [PATCH 02/18] Prepare to release 3.5.1 --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c24e6f1253a..2d4d50cfdd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## Version 3.5.1 GA (03/05/2024) + +### Bug fixes: + +* Fix ETW initialization failure for App Service Windows ([#3571](https://github.com/microsoft/ApplicationInsights-Java/pull/3571)) + ## Version 3.5.0 GA (02/29/2024) ### Breaking changes From 2887f7b4f6f724b5e1bdd702b1796967fd953620 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 12:20:57 -0800 Subject: [PATCH 03/18] Fix --- .../agent/internal/diagnostics/etw/EtwProvider.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index fc9091e9789..cea171227a8 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -11,9 +11,9 @@ public class EtwProvider { private static final String LIB_FILENAME_32_BIT = - "inst/applicationinsights-java-etw-provider-x86.dll"; + "/inst/applicationinsights-java-etw-provider-x86.dll"; private static final String LIB_FILENAME_64_BIT = - "inst/applicationinsights-java-etw-provider-x86-64.dll"; + "/inst/applicationinsights-java-etw-provider-x86-64.dll"; private static final Logger LOGGER = LoggerFactory.getLogger(EtwProvider.class); @@ -40,6 +40,7 @@ public EtwProvider(String sdkVersion) { } } + @SuppressWarnings("SystemOut") private static File loadLibrary(String sdkVersion) throws IOException { String fileName = getDllFilenameForArch(); @@ -47,9 +48,14 @@ private static File loadLibrary(String sdkVersion) throws IOException { File dllPath = new File(targetDir, fileName); if (!dllPath.exists()) { + System.out.println("#### default dllPath doesn't exist" + dllPath.getAbsolutePath()); + System.out.println("#### extract to local folder instead"); DllFileUtils.extractToLocalFolder(dllPath, fileName); + } else { + System.out.println("#### default dllPath exists" + dllPath.getAbsolutePath()); } + System.out.println("#### finally load dll from " + dllPath.getAbsolutePath()); System.load(dllPath.getAbsolutePath()); return dllPath; From 60de39a51538e1404a2fe892d9ecc74e6fbe5e4b Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 13:17:11 -0800 Subject: [PATCH 04/18] Revert this --- .../agent/internal/diagnostics/etw/EtwProvider.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index cea171227a8..f677f570ac5 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -11,9 +11,9 @@ public class EtwProvider { private static final String LIB_FILENAME_32_BIT = - "/inst/applicationinsights-java-etw-provider-x86.dll"; + "applicationinsights-java-etw-provider-x86.dll"; private static final String LIB_FILENAME_64_BIT = - "/inst/applicationinsights-java-etw-provider-x86-64.dll"; + "applicationinsights-java-etw-provider-x86-64.dll"; private static final Logger LOGGER = LoggerFactory.getLogger(EtwProvider.class); From 69094e8474db8b5535fd6d3c93a983cbfa406588 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 13:30:51 -0800 Subject: [PATCH 05/18] Fix spotless --- .../agent/internal/diagnostics/etw/EtwProvider.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index f677f570ac5..702030d016b 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -10,8 +10,7 @@ import org.slf4j.LoggerFactory; public class EtwProvider { - private static final String LIB_FILENAME_32_BIT = - "applicationinsights-java-etw-provider-x86.dll"; + private static final String LIB_FILENAME_32_BIT = "applicationinsights-java-etw-provider-x86.dll"; private static final String LIB_FILENAME_64_BIT = "applicationinsights-java-etw-provider-x86-64.dll"; From 7baf0bdf0a56a3f41629b6c16a04bcb95133b4e0 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 14:57:31 -0800 Subject: [PATCH 06/18] Add more logs --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 11 ++++++++++- .../agent/internal/diagnostics/etw/EtwProvider.java | 9 ++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index fb077d98422..b10e76aae8f 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -53,6 +53,7 @@ public static File buildDllLocalPath(@Nullable String versionDirectory) { /** Assumes dllOnDisk is non-null and exists. */ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) throws IOException { + LOGGER.debug("#### extractToLocalFolder start"); ClassLoader classLoader = DllFileUtils.class.getClassLoader(); if (classLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); @@ -64,23 +65,31 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { if (dllOnDisk.exists()) { + LOGGER.debug("#### dllOnDisk exists: '{}'", dllOnDisk); if (dllOnDisk.isDirectory()) { + LOGGER.debug("#### dllOnDisk is a directory: '{}'", dllOnDisk.isDirectory()); throw new IOException( "Cannot extract dll: " + dllOnDisk.getAbsolutePath() + " exists as a directory"); } if (!dllOnDisk.canWrite()) { + LOGGER.debug("#### dllOnDisk is not writeable: '{}'", dllOnDisk.canWrite()); throw new IOException( "Cannote extract dll: " + dllOnDisk.getAbsolutePath() + " is not writeable."); + } else { + LOGGER.debug("#### dllOnDisk is writeable: '{}'", dllOnDisk.canWrite()); } + } else { + LOGGER.debug("#### dllOnDisk does not exist: '{}'", dllOnDisk); } int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { // while not EOF out.write(buffer, 0, bytesRead); } + LOGGER.debug("#### Successfully extracted '{}' to local folder", libraryToLoad); } } - LOGGER.debug("Successfully extracted '{}' to local folder", libraryToLoad); + LOGGER.debug("#### extractToLocalFolder done"); } private static final List CANDIDATE_USERNAME_ENVIRONMENT_VARIABLES = diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index 702030d016b..be8bb0d576c 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -39,7 +39,6 @@ public EtwProvider(String sdkVersion) { } } - @SuppressWarnings("SystemOut") private static File loadLibrary(String sdkVersion) throws IOException { String fileName = getDllFilenameForArch(); @@ -47,14 +46,14 @@ private static File loadLibrary(String sdkVersion) throws IOException { File dllPath = new File(targetDir, fileName); if (!dllPath.exists()) { - System.out.println("#### default dllPath doesn't exist" + dllPath.getAbsolutePath()); - System.out.println("#### extract to local folder instead"); + LOGGER.debug("#### default dllPath doesn't exist" + dllPath.getAbsolutePath()); + LOGGER.debug("#### extract to local folder instead"); DllFileUtils.extractToLocalFolder(dllPath, fileName); } else { - System.out.println("#### default dllPath exists" + dllPath.getAbsolutePath()); + LOGGER.debug("#### default dllPath exists" + dllPath.getAbsolutePath()); } - System.out.println("#### finally load dll from " + dllPath.getAbsolutePath()); + LOGGER.debug("#### finally load dll from " + dllPath.getAbsolutePath()); System.load(dllPath.getAbsolutePath()); return dllPath; From eb418e4a8708382a176bb8f5fd0bd337bb2b4f60 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 15:59:07 -0800 Subject: [PATCH 07/18] Fix deprecated ::set-output --- .github/workflows/build-common.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index 388b5f5f7df..f3c03c320a6 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -152,7 +152,7 @@ jobs: run: | modules=$(ls -d smoke-tests/apps/* | sed 's/\/$//' | sed 's/\//:/g' | sed 's/^/:/') inner_json=$(echo $modules | xargs echo | sed 's/ /","/g') - echo "::set-output name=matrix::{\"module\":[\"$inner_json\"]}" + echo "{matrix}={\"module\":[\"$inner_json\"]}" >> $GITHUB_OUTPUT smoke-test: needs: setup-smoke-test-matrix diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c1313ed50a1..3be1797ef54 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: $VERSION \ applicationinsights-agent-$VERSION.jar - echo "::set-output name=version::$VERSION" + echo "{version}={$VERSION}" >> $GITHUB_OUTPUT create-docs-pull-request: needs: From 6fbe0eed2acb2d9b42647f30e8b0620f0473915c Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 19:03:18 -0800 Subject: [PATCH 08/18] Handle IOException --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 3 +++ .../agent/internal/diagnostics/etw/EtwProvider.java | 1 + 2 files changed, 4 insertions(+) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index b10e76aae8f..752db4468f8 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -87,6 +87,9 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th out.write(buffer, 0, bytesRead); } LOGGER.debug("#### Successfully extracted '{}' to local folder", libraryToLoad); + } catch (IOException e) { + LOGGER.error("#### Failed to extract '{}' to local folder", libraryToLoad, e); + return; } } LOGGER.debug("#### extractToLocalFolder done"); diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index be8bb0d576c..4093eacfd32 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -48,6 +48,7 @@ private static File loadLibrary(String sdkVersion) throws IOException { if (!dllPath.exists()) { LOGGER.debug("#### default dllPath doesn't exist" + dllPath.getAbsolutePath()); LOGGER.debug("#### extract to local folder instead"); + dllPath.createNewFile(); DllFileUtils.extractToLocalFolder(dllPath, fileName); } else { LOGGER.debug("#### default dllPath exists" + dllPath.getAbsolutePath()); From 248f2566aa641bee1cb10d48ae23c0add6a87b27 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 19:37:55 -0800 Subject: [PATCH 09/18] Update --- .../diagnostics/etw/DllFileUtils.java | 3 ++- .../internal/diagnostics/etw/EtwProvider.java | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 752db4468f8..147a431b18f 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -30,6 +30,7 @@ private DllFileUtils() {} "The constructed file path cannot be controlled by an end user of the instrumented application") public static File buildDllLocalPath(@Nullable String versionDirectory) { File dllPath = getTempDir(); + LOGGER.debug("#### temp dir: '{}'", dllPath.getPath()); dllPath = new File(dllPath, AI_BASE_FOLDER); dllPath = new File(dllPath, AI_NATIVE_FOLDER); @@ -46,7 +47,7 @@ public static File buildDllLocalPath(@Nullable String versionDirectory) { if (!dllPath.exists() || !dllPath.canRead() || !dllPath.canWrite()) { throw new IllegalStateException("Failed to create a read/write folder for the native dll."); } - LOGGER.trace("{} folder exists", dllPath); + LOGGER.debug("{} folder exists", dllPath); return dllPath; } diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index 4093eacfd32..e02456eafd8 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -10,9 +10,10 @@ import org.slf4j.LoggerFactory; public class EtwProvider { - private static final String LIB_FILENAME_32_BIT = "applicationinsights-java-etw-provider-x86.dll"; + private static final String LIB_FILENAME_32_BIT = + "/inst/applicationinsights-java-etw-provider-x86.dll"; private static final String LIB_FILENAME_64_BIT = - "applicationinsights-java-etw-provider-x86-64.dll"; + "/inst/applicationinsights-java-etw-provider-x86-64.dll"; private static final Logger LOGGER = LoggerFactory.getLogger(EtwProvider.class); @@ -23,12 +24,15 @@ public EtwProvider(String sdkVersion) { try { dllPath = loadLibrary(sdkVersion); LOGGER.debug("EtwProvider initialized. Lib path={}", dllPath.getAbsolutePath()); + if (dllPath.exists()) { + LOGGER.debug("#### dllpath is fully loaded" + dllPath); + } } catch (Throwable t) { try { LOGGER.error("Error initializing EtwProvider", t); - if (dllPath != null) { - dllPath.deleteOnExit(); - } + // if (dllPath != null) { + // dllPath.deleteOnExit(); + // } } catch (Throwable chomp) { // ignore } @@ -46,9 +50,12 @@ private static File loadLibrary(String sdkVersion) throws IOException { File dllPath = new File(targetDir, fileName); if (!dllPath.exists()) { - LOGGER.debug("#### default dllPath doesn't exist" + dllPath.getAbsolutePath()); + LOGGER.debug("#### default dllPath doesn't exist" + dllPath.getPath()); LOGGER.debug("#### extract to local folder instead"); dllPath.createNewFile(); + if (dllPath.exists()) { + LOGGER.debug("#### dllPath exists after createNewFile" + dllPath); + } DllFileUtils.extractToLocalFolder(dllPath, fileName); } else { LOGGER.debug("#### default dllPath exists" + dllPath.getAbsolutePath()); From 86dbb555b6a9c5d19c963358f0e5c6f562f2a527 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 20:56:53 -0800 Subject: [PATCH 10/18] Fix IOException --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 12 +++++++++--- .../agent/internal/diagnostics/etw/EtwProvider.java | 5 ++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 147a431b18f..2ed406fef04 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -41,7 +41,12 @@ public static File buildDllLocalPath(@Nullable String versionDirectory) { } if (!dllPath.exists()) { - dllPath.mkdirs(); + try { + dllPath.mkdirs(); + } catch (SecurityException e) { + throw new IllegalStateException( + "Failed to create a folder AISDK/native for the native dll.", e); + } } if (!dllPath.exists() || !dllPath.canRead() || !dllPath.canWrite()) { @@ -59,9 +64,10 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th if (classLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } - try (InputStream in = classLoader.getResourceAsStream(libraryToLoad)) { + try (InputStream in = classLoader.getResourceAsStream("/inst/" + libraryToLoad)) { if (in == null) { - throw new IllegalStateException(String.format("Failed to find '%s' in jar", libraryToLoad)); + throw new IllegalStateException( + String.format("Failed to find '%s' in jar /inst/", libraryToLoad)); } byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index e02456eafd8..862023234a8 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -10,10 +10,9 @@ import org.slf4j.LoggerFactory; public class EtwProvider { - private static final String LIB_FILENAME_32_BIT = - "/inst/applicationinsights-java-etw-provider-x86.dll"; + private static final String LIB_FILENAME_32_BIT = "applicationinsights-java-etw-provider-x86.dll"; private static final String LIB_FILENAME_64_BIT = - "/inst/applicationinsights-java-etw-provider-x86-64.dll"; + "applicationinsights-java-etw-provider-x86-64.dll"; private static final Logger LOGGER = LoggerFactory.getLogger(EtwProvider.class); From ea83c93e9488dca2b3e4c9df7fe6263ace19235b Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 5 Mar 2024 21:07:33 -0800 Subject: [PATCH 11/18] Fix IllegalStateException --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 2ed406fef04..090292103ab 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -64,10 +64,10 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th if (classLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } - try (InputStream in = classLoader.getResourceAsStream("/inst/" + libraryToLoad)) { + try (InputStream in = classLoader.getResourceAsStream(libraryToLoad)) { if (in == null) { throw new IllegalStateException( - String.format("Failed to find '%s' in jar /inst/", libraryToLoad)); + String.format("Failed to find '%s' in jar ", libraryToLoad)); } byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { From f0c23ef3a98db038c1382c56b4e7745a2ecd0b93 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 10:29:17 -0800 Subject: [PATCH 12/18] Update linking path --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 4 ++-- etw/native/src/main/cpp/etw_provider.cpp | 4 ++-- ...ights_agent_bootstrap_diagnostics_etw_EtwProvider.h | 10 +++++----- etw/native/src/main/headers/etw_provider.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 090292103ab..05313749f32 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -64,10 +64,10 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th if (classLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } - try (InputStream in = classLoader.getResourceAsStream(libraryToLoad)) { + try (InputStream in = classLoader.getResourceAsStream("inst/" + libraryToLoad)) { if (in == null) { throw new IllegalStateException( - String.format("Failed to find '%s' in jar ", libraryToLoad)); + String.format("Failed to find '%s' in jar inst/", libraryToLoad)); } byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { diff --git a/etw/native/src/main/cpp/etw_provider.cpp b/etw/native/src/main/cpp/etw_provider.cpp index 01cf9b142a6..a0e0a6d0fa7 100644 --- a/etw/native/src/main/cpp/etw_provider.cpp +++ b/etw/native/src/main/cpp/etw_provider.cpp @@ -48,7 +48,7 @@ TRACELOGGING_DEFINE_PROVIDER( (0x1f0dc33f,0x30ae,0x5ff3,0x8b,0x01,0x8c,0xa9,0xb8,0x50,0x92,0x33)); /********cppWriteEvent(IpaEtwEventBase event)********/ -JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider_cppWriteEvent +JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider_cppWriteEvent (JNIEnv * env, jobject jobj_javaThis, jobject jobj_event) { try @@ -406,4 +406,4 @@ char * jstring2cstr(JNIEnv * env, jstring &jstr_input, char * cstr_output, aijni DBG("rls jstr chars (%s): js=%p, cc=%p\n", jstrid2name(field_id).c_str(), &cc_str, &jstr_input); env->ReleaseStringUTFChars(jstr_input, cc_str); return cstr_output; -} \ No newline at end of file +} diff --git a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h index 287f44159a0..3d4f094e720 100644 --- a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h +++ b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h @@ -1,18 +1,18 @@ /* DO NOT EDIT THIS FILE - it is machine generated */ #include -/* Header for class com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider */ +/* Header for class com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider */ -#ifndef _Included_com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider -#define _Included_com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider +#ifndef _Included_com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider +#define _Included_com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider #ifdef __cplusplus extern "C" { #endif /* - * Class: com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider + * Class: com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider * Method: cppWriteEvent * Signature: (Lcom/microsoft/applicationinsights/agent/bootstrap/diagnostics/etw/events/model/IpaEtwEventBase;)V */ -JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider_cppWriteEvent +JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider_cppWriteEvent (JNIEnv *, jobject, jobject); #ifdef __cplusplus diff --git a/etw/native/src/main/headers/etw_provider.h b/etw/native/src/main/headers/etw_provider.h index c36d975c385..47e6e74a397 100644 --- a/etw/native/src/main/headers/etw_provider.h +++ b/etw/native/src/main/headers/etw_provider.h @@ -26,7 +26,7 @@ #include #include #include -#include "com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h" +#include "com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h" TRACELOGGING_DECLARE_PROVIDER(provider_EtwHandle); From 9986e550279eef866ebd40d30e5fea9307dc8222 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 10:30:10 -0800 Subject: [PATCH 13/18] Revert --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 05313749f32..090292103ab 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -64,10 +64,10 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th if (classLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } - try (InputStream in = classLoader.getResourceAsStream("inst/" + libraryToLoad)) { + try (InputStream in = classLoader.getResourceAsStream(libraryToLoad)) { if (in == null) { throw new IllegalStateException( - String.format("Failed to find '%s' in jar inst/", libraryToLoad)); + String.format("Failed to find '%s' in jar ", libraryToLoad)); } byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { From 3ad71944f4c7d79b452edcc45ecec518ea4a19f2 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 10:48:09 -0800 Subject: [PATCH 14/18] Fix cpp compilation error --- etw/native/src/main/cpp/etw_provider.cpp | 6 +++--- ...oninsights_agent_bootstrap_diagnostics_etw_EtwProvider.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/etw/native/src/main/cpp/etw_provider.cpp b/etw/native/src/main/cpp/etw_provider.cpp index a0e0a6d0fa7..cf387881d5d 100644 --- a/etw/native/src/main/cpp/etw_provider.cpp +++ b/etw/native/src/main/cpp/etw_provider.cpp @@ -81,7 +81,7 @@ JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_internal_dia int getEventId(JNIEnv * env, jobject &jobj_event) throw(aijnierr_t) { jclass cls = env->GetObjectClass(jobj_event); - jmethodID jmid = env->GetMethodID(cls, "id", "()Lcom/microsoft/applicationinsights/agent/bootstrap/diagnostics/etw/events/model/IpaEtwEventId;"); + jmethodID jmid = env->GetMethodID(cls, "id", "()Lcom/microsoft/applicationinsights/agent/internal/diagnostics/etw/events/model/IpaEtwEventId;"); if (jmid == NULL) { throw AIJNIERR_METHOD_NAME; } @@ -285,7 +285,7 @@ void handleGenericException(JNIEnv * env) noexcept { jthrowable newJniException(JNIEnv * env, const char * message) noexcept { jthrowable rval = NULL; - jclass excls = env->FindClass("com/microsoft/applicationinsights/agent/bootstrap/diagnostics/etw/ApplicationInsightsEtwException"); + jclass excls = env->FindClass("com/microsoft/applicationinsights/agent/internal/diagnostics/etw/ApplicationInsightsEtwException"); if (excls == NULL) { DBG("Could not find ApplicationInsightsEtwException"); javaThrowUnknownError(env, " - could not find ApplicationInsightsEtwException"); @@ -314,7 +314,7 @@ jthrowable newJniException(JNIEnv * env, const char * message, jthrowable cause) } jthrowable rval = NULL; - jclass excls = env->FindClass("com/microsoft/applicationinsights/agent/bootstrap/diagnostics/etw/ApplicationInsightsEtwException"); + jclass excls = env->FindClass("com/microsoft/applicationinsights/agent/internal/diagnostics/etw/ApplicationInsightsEtwException"); if (excls == NULL) { DBG("Could not find class ApplicationInsightsEtwException"); javaThrowUnknownError(env, " - could not find class ApplicationInsightsEtwException"); diff --git a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h index 3d4f094e720..ab4349bb35c 100644 --- a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h +++ b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h @@ -10,7 +10,7 @@ extern "C" { /* * Class: com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider * Method: cppWriteEvent - * Signature: (Lcom/microsoft/applicationinsights/agent/bootstrap/diagnostics/etw/events/model/IpaEtwEventBase;)V + * Signature: (Lcom/microsoft/applicationinsights/agent/internal/diagnostics/etw/events/model/IpaEtwEventBase;)V */ JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider_cppWriteEvent (JNIEnv *, jobject, jobject); From 463efc912f77fc5873c2906cadb19d40f4fb968a Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 11:03:30 -0800 Subject: [PATCH 15/18] Fix --- ...licationinsights_agent_internal_diagnostics_etw_EtwProvider.h} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename etw/native/src/main/headers/{com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h => com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h} (100%) diff --git a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h similarity index 100% rename from etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h rename to etw/native/src/main/headers/com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h From 2d5c8f77636c56c37db0f46cddd7fb54162e951a Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 11:34:28 -0800 Subject: [PATCH 16/18] Clean up debugging logs --- .../diagnostics/etw/DllFileUtils.java | 20 +++---------------- .../internal/diagnostics/etw/EtwProvider.java | 20 ++++--------------- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 090292103ab..32382faeb8a 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -30,7 +30,6 @@ private DllFileUtils() {} "The constructed file path cannot be controlled by an end user of the instrumented application") public static File buildDllLocalPath(@Nullable String versionDirectory) { File dllPath = getTempDir(); - LOGGER.debug("#### temp dir: '{}'", dllPath.getPath()); dllPath = new File(dllPath, AI_BASE_FOLDER); dllPath = new File(dllPath, AI_NATIVE_FOLDER); @@ -52,54 +51,41 @@ public static File buildDllLocalPath(@Nullable String versionDirectory) { if (!dllPath.exists() || !dllPath.canRead() || !dllPath.canWrite()) { throw new IllegalStateException("Failed to create a read/write folder for the native dll."); } - LOGGER.debug("{} folder exists", dllPath); + LOGGER.trace("{} folder exists", dllPath); return dllPath; } /** Assumes dllOnDisk is non-null and exists. */ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) throws IOException { - LOGGER.debug("#### extractToLocalFolder start"); ClassLoader classLoader = DllFileUtils.class.getClassLoader(); if (classLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } try (InputStream in = classLoader.getResourceAsStream(libraryToLoad)) { if (in == null) { - throw new IllegalStateException( - String.format("Failed to find '%s' in jar ", libraryToLoad)); + throw new IllegalStateException(String.format("Failed to find '%s' in jar", libraryToLoad)); } byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { if (dllOnDisk.exists()) { - LOGGER.debug("#### dllOnDisk exists: '{}'", dllOnDisk); if (dllOnDisk.isDirectory()) { - LOGGER.debug("#### dllOnDisk is a directory: '{}'", dllOnDisk.isDirectory()); throw new IOException( "Cannot extract dll: " + dllOnDisk.getAbsolutePath() + " exists as a directory"); } if (!dllOnDisk.canWrite()) { - LOGGER.debug("#### dllOnDisk is not writeable: '{}'", dllOnDisk.canWrite()); throw new IOException( "Cannote extract dll: " + dllOnDisk.getAbsolutePath() + " is not writeable."); - } else { - LOGGER.debug("#### dllOnDisk is writeable: '{}'", dllOnDisk.canWrite()); } - } else { - LOGGER.debug("#### dllOnDisk does not exist: '{}'", dllOnDisk); } int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { // while not EOF out.write(buffer, 0, bytesRead); } - LOGGER.debug("#### Successfully extracted '{}' to local folder", libraryToLoad); - } catch (IOException e) { - LOGGER.error("#### Failed to extract '{}' to local folder", libraryToLoad, e); - return; + LOGGER.debug("Successfully extracted '{}' to local folder", libraryToLoad); } } - LOGGER.debug("#### extractToLocalFolder done"); } private static final List CANDIDATE_USERNAME_ENVIRONMENT_VARIABLES = diff --git a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java index 862023234a8..d3d311b27c4 100644 --- a/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java +++ b/etw/java/src/main/jni/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProvider.java @@ -23,15 +23,12 @@ public EtwProvider(String sdkVersion) { try { dllPath = loadLibrary(sdkVersion); LOGGER.debug("EtwProvider initialized. Lib path={}", dllPath.getAbsolutePath()); - if (dllPath.exists()) { - LOGGER.debug("#### dllpath is fully loaded" + dllPath); - } } catch (Throwable t) { try { - LOGGER.error("Error initializing EtwProvider", t); - // if (dllPath != null) { - // dllPath.deleteOnExit(); - // } + LOGGER.debug("Error initializing EtwProvider", t); + if (dllPath != null) { + dllPath.deleteOnExit(); + } } catch (Throwable chomp) { // ignore } @@ -49,18 +46,9 @@ private static File loadLibrary(String sdkVersion) throws IOException { File dllPath = new File(targetDir, fileName); if (!dllPath.exists()) { - LOGGER.debug("#### default dllPath doesn't exist" + dllPath.getPath()); - LOGGER.debug("#### extract to local folder instead"); - dllPath.createNewFile(); - if (dllPath.exists()) { - LOGGER.debug("#### dllPath exists after createNewFile" + dllPath); - } DllFileUtils.extractToLocalFolder(dllPath, fileName); - } else { - LOGGER.debug("#### default dllPath exists" + dllPath.getAbsolutePath()); } - LOGGER.debug("#### finally load dll from " + dllPath.getAbsolutePath()); System.load(dllPath.getAbsolutePath()); return dllPath; From 00f0e9bada090d7d3abf2b75f7497f89189d46ba Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 11:49:26 -0800 Subject: [PATCH 17/18] Revert log location after output stream is closed --- .../agent/internal/diagnostics/etw/DllFileUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 32382faeb8a..0ab99e01fac 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -83,9 +83,9 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th while ((bytesRead = in.read(buffer)) != -1) { // while not EOF out.write(buffer, 0, bytesRead); } - LOGGER.debug("Successfully extracted '{}' to local folder", libraryToLoad); } } + LOGGER.debug("Successfully extracted '{}' to local folder", libraryToLoad); } private static final List CANDIDATE_USERNAME_ENVIRONMENT_VARIABLES = From 9efef26ccd359985d4d6ee46b765bd3ccce92d1f Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 6 Mar 2024 12:48:02 -0800 Subject: [PATCH 18/18] Revert set-output artifact for now --- .github/workflows/build-common.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index f3c03c320a6..388b5f5f7df 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -152,7 +152,7 @@ jobs: run: | modules=$(ls -d smoke-tests/apps/* | sed 's/\/$//' | sed 's/\//:/g' | sed 's/^/:/') inner_json=$(echo $modules | xargs echo | sed 's/ /","/g') - echo "{matrix}={\"module\":[\"$inner_json\"]}" >> $GITHUB_OUTPUT + echo "::set-output name=matrix::{\"module\":[\"$inner_json\"]}" smoke-test: needs: setup-smoke-test-matrix diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3be1797ef54..c1313ed50a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: $VERSION \ applicationinsights-agent-$VERSION.jar - echo "{version}={$VERSION}" >> $GITHUB_OUTPUT + echo "::set-output name=version::$VERSION" create-docs-pull-request: needs: