From 18e3cd83d69214fbd3a3121e1fba818876373a92 Mon Sep 17 00:00:00 2001 From: Helen <56097766+heyams@users.noreply.github.com> Date: Wed, 6 Mar 2024 13:31:48 -0800 Subject: [PATCH] Fix ETW init failure (#3571) --- CHANGELOG.md | 6 ++++++ .../diagnostics/etw/DllFileUtils.java | 7 ++++++- .../internal/diagnostics/etw/EtwProvider.java | 2 +- etw/native/src/main/cpp/etw_provider.cpp | 10 ++++----- ...nt_bootstrap_diagnostics_etw_EtwProvider.h | 21 ------------------- ...ent_internal_diagnostics_etw_EtwProvider.h | 21 +++++++++++++++++++ etw/native/src/main/headers/etw_provider.h | 2 +- .../smoketestapp/TestController.java | 2 -- 8 files changed, 40 insertions(+), 31 deletions(-) delete mode 100644 etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h create mode 100644 etw/native/src/main/headers/com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h 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 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..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 @@ -40,7 +40,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()) { 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..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 @@ -25,7 +25,7 @@ public EtwProvider(String sdkVersion) { LOGGER.debug("EtwProvider initialized. Lib path={}", dllPath.getAbsolutePath()); } catch (Throwable t) { try { - LOGGER.error("Error initializing EtwProvider", t); + LOGGER.debug("Error initializing EtwProvider", t); if (dllPath != null) { dllPath.deleteOnExit(); } diff --git a/etw/native/src/main/cpp/etw_provider.cpp b/etw/native/src/main/cpp/etw_provider.cpp index 01cf9b142a6..cf387881d5d 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 @@ -81,7 +81,7 @@ JNIEXPORT void JNICALL Java_com_microsoft_applicationinsights_agent_bootstrap_di 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"); @@ -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 deleted file mode 100644 index 287f44159a0..00000000000 --- a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider.h +++ /dev/null @@ -1,21 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider */ - -#ifndef _Included_com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider -#define _Included_com_microsoft_applicationinsights_agent_bootstrap_diagnostics_etw_EtwProvider -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: com_microsoft_applicationinsights_agent_bootstrap_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 - (JNIEnv *, jobject, jobject); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h new file mode 100644 index 00000000000..ab4349bb35c --- /dev/null +++ b/etw/native/src/main/headers/com_microsoft_applicationinsights_agent_internal_diagnostics_etw_EtwProvider.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_microsoft_applicationinsights_agent_internal_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_internal_diagnostics_etw_EtwProvider + * Method: cppWriteEvent + * 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); + +#ifdef __cplusplus +} +#endif +#endif 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); 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<>();