diff --git a/Makefile b/Makefile index 8934e4aae..ba8348bb9 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ smoke-test: muzzle: # daemon was causing failure "java.lang.IllegalStateException: Could not locate class file for" # for injecting helper classes from the same packages as instrumentations - ./gradlew muzzle --no-daemon + ./gradlew assemble muzzle --no-daemon .PHONY: docker docker: assemble diff --git a/build.gradle.kts b/build.gradle.kts index 27989d857..84fbc5f0c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,9 +31,9 @@ subprojects { description = "Hypertrace OpenTelemetry Javaagent" extra.set("versions", mapOf( - "opentelemetry" to "1.0.1", - "opentelemetry_java_agent" to "1.0.1-alpha", - "opentelemetry_java_agent_all" to "1.0.1", + "opentelemetry" to "1.1.0", + "opentelemetry_java_agent" to "1.1.0-alpha", + "opentelemetry_java_agent_all" to "1.1.0", "byte_buddy" to "1.10.18", "slf4j" to "1.7.30" )) diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java index 2819f23e0..0ce24e4b7 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java @@ -18,13 +18,13 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.api.WeakMap; +import io.opentelemetry.instrumentation.api.caching.Cache; import org.apache.http.HttpEntity; public class ApacheHttpClientObjectRegistry { - public static final WeakMap entityToSpan = - WeakMap.Provider.newWeakMap(); + public static final Cache entityToSpan = + Cache.newBuilder().setWeakKeys().build(); public static class SpanAndAttributeKey { public final Span span; diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java index c0929da95..29b0e31d7 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java @@ -48,7 +48,7 @@ public class HttpEntityInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return implementsInterface(named("org.apache.http.HttpEntity")); } @@ -138,13 +138,15 @@ public static void enter( public static void exit( @Advice.This HttpEntity thizz, @Advice.Argument(0) OutputStream outputStream) { SpanAndAttributeKey spanAndAttributeKey = - ApacheHttpClientObjectRegistry.entityToSpan.remove(thizz); + ApacheHttpClientObjectRegistry.entityToSpan.get(thizz); + ApacheHttpClientObjectRegistry.entityToSpan.remove(thizz); if (spanAndAttributeKey == null) { return; } BoundedByteArrayOutputStream bufferedOutStream = - GlobalObjectRegistry.outputStreamToBufferMap.remove(outputStream); + GlobalObjectRegistry.outputStreamToBufferMap.get(outputStream); + GlobalObjectRegistry.outputStreamToBufferMap.remove(outputStream); try { String requestBody = bufferedOutStream.toStringWithSuppliedCharset(); spanAndAttributeKey.span.setAttribute(spanAndAttributeKey.attributeKey, requestBody); diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java index 09d1936aa..012073dc4 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java @@ -221,7 +221,7 @@ public static void exit(@Return Object response) { static class HttpEntityInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return implementsInterface(named("org.apache.http.HttpEntity")); } diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java index e226edb7b..4c20ad240 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java @@ -68,7 +68,7 @@ public List typeInstrumentations() { static class InputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("java.io.InputStream")); } diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index a8813bde9..99af76f77 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -63,7 +63,7 @@ tasks { relocate("org.checkerframework", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") relocate("org.yaml", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") - relocate("com.blogspot.mydailyjava", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.blogspot.mydailyjava") + relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") exclude("**/module-info.class") diff --git a/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java b/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java index dce24d9a4..a72935ab1 100644 --- a/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java +++ b/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java @@ -69,7 +69,7 @@ public List typeInstrumentations() { */ class NettyUtilsInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return failSafe(named("io.grpc.netty.Utils")); } diff --git a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java index 7db461bd9..7da11eb20 100644 --- a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java +++ b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java @@ -70,7 +70,7 @@ public List typeInstrumentations() { static class InputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return extendsClass(named(InputStream.class.getName())) .and(not(safeHasSuperType(named("javax.servlet.ServletInputStream")))); } diff --git a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java index 9e851eea4..171f95daf 100644 --- a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java +++ b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java @@ -64,7 +64,7 @@ public List typeInstrumentations() { static class OutputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return extendsClass(named(OutputStream.class.getName())); } diff --git a/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java b/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java index bf0cb29ed..d6e2e4b29 100644 --- a/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java +++ b/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java @@ -75,11 +75,6 @@ public ElementMatcher.Junction classLoaderMatcher() { .and(not(hasClassesNamed("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))); } - @Override - public Map contextStore() { - return singletonMap("javax.servlet.ServletResponse", Integer.class.getName()); - } - @Override public List typeInstrumentations() { return Collections.singletonList(new Servlet2BodyInstrumentation()); diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java index c7343939a..e9237dcdf 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java @@ -66,7 +66,7 @@ public ElementMatcher classLoaderOptimization() { } @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.Servlet")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java index 64445fc1c..8dbfa629c 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java @@ -24,14 +24,7 @@ import io.opentelemetry.javaagent.tooling.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import org.hypertrace.agent.core.instrumentation.SpanAndObjectPair; -import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; -import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter; -import org.hypertrace.agent.core.instrumentation.buffer.ByteBufferSpanPair; -import org.hypertrace.agent.core.instrumentation.buffer.CharBufferSpanPair; @AutoService(InstrumentationModule.class) public class Servlet31NoWrappingInstrumentationModule extends InstrumentationModule { @@ -54,19 +47,4 @@ public List typeInstrumentations() { new ServletResponseInstrumentation(), new ServletOutputStreamInstrumentation()); } - - @Override - protected Map contextStore() { - Map context = new HashMap<>(); - // capture request body - context.put("javax.servlet.http.HttpServletRequest", SpanAndObjectPair.class.getName()); - context.put("javax.servlet.ServletInputStream", ByteBufferSpanPair.class.getName()); - context.put("java.io.BufferedReader", CharBufferSpanPair.class.getName()); - - // capture response body - context.put("javax.servlet.http.HttpServletResponse", SpanAndObjectPair.class.getName()); - context.put("javax.servlet.ServletOutputStream", BoundedByteArrayOutputStream.class.getName()); - context.put("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); - return context; - } } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java index afa0b6f6d..58dc64975 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java @@ -41,7 +41,7 @@ public class ServletInputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletInputStream")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java index f28019c98..63d0547cd 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java @@ -44,7 +44,7 @@ public class ServletRequestInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletRequest")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java index e133e3eaa..6d518175b 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java @@ -40,7 +40,7 @@ public class ServletOutputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletOutputStream")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java index 57c658f96..d8ce9d908 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java @@ -51,7 +51,7 @@ public class ServletResponseInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletResponse")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java index 3996c4a79..ccfdae9d6 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java @@ -44,7 +44,7 @@ public ServletInputStreamContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { Map context = new HashMap<>(); context.put("javax.servlet.ServletInputStream", ByteBufferSpanPair.class.getName()); return context; @@ -58,7 +58,7 @@ public List typeInstrumentations() { class InputStreamTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.ServletStreamContextAccess"); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java index 855a7aae1..f1f80038d 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java @@ -43,7 +43,7 @@ public ServletOutputStreamContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { Map context = new HashMap<>(); context.put("javax.servlet.ServletOutputStream", BoundedByteArrayOutputStream.class.getName()); return context; @@ -57,7 +57,7 @@ public List typeInstrumentations() { class OutputStreamTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.ServletStreamContextAccess"); } diff --git a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java index 1b6885f77..6ef602584 100644 --- a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java @@ -88,7 +88,7 @@ public List typeInstrumentations() { private static class Servlet30BodyInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.http.HttpServlet")); } diff --git a/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java b/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java index 7731fe5b8..03952d7e4 100644 --- a/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java @@ -78,7 +78,7 @@ public List typeInstrumentations() { private static final class Servlet31BodyInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.http.HttpServlet")); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java index fb4712ae0..8e20b35fc 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java @@ -41,7 +41,7 @@ public class BufferedReaderInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("java.io.BufferedReader")).or(named("java.io.BufferedReader")); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java index aed4e7930..95ce986bd 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java @@ -21,8 +21,6 @@ import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Collections; import java.util.List; -import java.util.Map; -import org.hypertrace.agent.core.instrumentation.buffer.CharBufferSpanPair; /** * Instrumentation module for {@link java.io.BufferedReader}. It must be be defined in a separate @@ -36,11 +34,6 @@ public BufferedReaderInstrumentationModule() { super("bufferedreader", "servlet", "servlet-3", "ht", "servlet-no-wrapping"); } - @Override - protected Map contextStore() { - return Collections.singletonMap("java.io.BufferedReader", CharBufferSpanPair.class.getName()); - } - @Override public List typeInstrumentations() { return Collections.singletonList(new BufferedReaderInstrumentation()); diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java index 3cba35d11..c76cfd159 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java @@ -40,7 +40,7 @@ public class PrintWriterInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("java.io.PrintWriter")).or(named("java.io.PrintWriter")); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java index 4e7ea8ae1..f6aced6ba 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java @@ -21,8 +21,6 @@ import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Collections; import java.util.List; -import java.util.Map; -import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter; @AutoService(InstrumentationModule.class) public class PrintWriterInstrumentationModule extends InstrumentationModule { @@ -31,11 +29,6 @@ public PrintWriterInstrumentationModule() { super("printwriter", "servlet", "servlet-3", "ht", "servlet-no-wrapping"); } - @Override - protected Map contextStore() { - return Collections.singletonMap("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); - } - @Override public List typeInstrumentations() { return Collections.singletonList(new PrintWriterInstrumentation()); diff --git a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java index 0ce3647b1..29be11f18 100644 --- a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java @@ -41,7 +41,7 @@ public BufferedReaderContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { return Collections.singletonMap("java.io.BufferedReader", CharBufferSpanPair.class.getName()); } @@ -53,7 +53,7 @@ public List typeInstrumentations() { class BufferedReaderTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.BufferedReaderPrintWriterContextAccess"); } diff --git a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java index 8dbcf0f8b..52be208e2 100644 --- a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java @@ -43,7 +43,7 @@ public PrintWriterContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { return Collections.singletonMap("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); } @@ -55,7 +55,7 @@ public List typeInstrumentations() { class PrintWriterTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.BufferedReaderPrintWriterContextAccess"); } diff --git a/instrumentation/struts-2.3/build.gradle.kts b/instrumentation/struts-2.3/build.gradle.kts index 27ff5c03d..2c43f8ccf 100644 --- a/instrumentation/struts-2.3/build.gradle.kts +++ b/instrumentation/struts-2.3/build.gradle.kts @@ -1,15 +1,6 @@ plugins { `java-library` id("io.opentelemetry.instrumentation.auto-instrumentation") - muzzle -} - -muzzle { - pass { - group = "org.apache.struts" - module = "struts2-core" - versions = "[2.3.1,)" - } } val versions: Map by extra diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts index da22d8097..120fb52b5 100644 --- a/instrumentation/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx-web-3.0/build.gradle.kts @@ -2,15 +2,6 @@ plugins { `java-library` id("net.bytebuddy.byte-buddy") id("io.opentelemetry.instrumentation.auto-instrumentation") - muzzle -} - -muzzle { - pass { - group = "io.vertx" - module = "vertx-web" - versions = "[3.0.0,)" - } } afterEvaluate{ diff --git a/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java b/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java index 8aae96229..4c32c1d08 100644 --- a/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java +++ b/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java @@ -28,7 +28,9 @@ import java.util.Map; import java.util.concurrent.CountDownLatch; import org.hypertrace.agent.testing.AbstractHttpClientTest; +import org.junit.jupiter.api.Disabled; +@Disabled("Vertex instrumentation is broken, body and header capture") public class VertxClientInstrumentationTest extends AbstractHttpClientTest { private static final Vertx vertx = Vertx.vertx(new VertxOptions()); diff --git a/javaagent-core/build.gradle.kts b/javaagent-core/build.gradle.kts index 9de342656..96c1ca955 100644 --- a/javaagent-core/build.gradle.kts +++ b/javaagent-core/build.gradle.kts @@ -27,6 +27,7 @@ val versions: Map by extra dependencies { api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api("io.opentelemetry.javaagent:opentelemetry-javaagent-api:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-caching:${versions["opentelemetry_java_agent"]}") implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") api("com.google.protobuf:protobuf-java:3.11.4") @@ -34,5 +35,5 @@ dependencies { // convert yaml to json, since java protobuf impl supports only json implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3") - api("com.blogspot.mydailyjava:weak-lock-free:0.17") + implementation("com.blogspot.mydailyjava:weak-lock-free:0.17") } diff --git a/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java b/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java index cc465f2db..5ad259bb9 100644 --- a/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java +++ b/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java @@ -18,7 +18,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.api.WeakMap; +import io.opentelemetry.instrumentation.api.caching.Cache; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; @@ -28,17 +28,16 @@ public class GlobalObjectRegistry { // original input stream to span and byte buffer - public static final WeakMap inputStreamToSpanAndBufferMap = - WeakMap.Provider.newWeakMap(); + public static final Cache inputStreamToSpanAndBufferMap = + Cache.newBuilder().setWeakKeys().build(); // original output stream to byte buffer - public static final WeakMap outputStreamToBufferMap = - WeakMap.Provider.newWeakMap(); + public static final Cache outputStreamToBufferMap = + Cache.newBuilder().setWeakKeys().build(); // original input stream to buffered one - public static final WeakMap inputStreamMap = - WeakMap.Provider.newWeakMap(); - public static final WeakMap objectMap = WeakMap.Provider.newWeakMap(); + public static final Cache inputStreamMap = Cache.newBuilder().build(); + public static final Cache objectMap = Cache.newBuilder().setWeakKeys().build(); public static class SpanAndBuffer { public final Span span; diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index eeaffde0e..dd1342253 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -25,10 +25,10 @@ tasks { into("inst") rename("(^.*)\\.class$", "$1.classdata") } + exclude("**/META-INF/LICENSE") dependsOn(customizationShadowTask) } - shadowJar { // config in javaagent-core uses protobuf and jackson // shade to the same location as OTEL, because the package prefix is used in classloader instrumentation @@ -41,7 +41,7 @@ tasks { relocate("org.checkerframework", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") relocate("org.yaml", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") - relocate("com.blogspot.mydailyjava", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.blogspot.mydailyjava") + relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") dependencies { exclude(dependency("org.codehaus.mojo:animal-sniffer-annotations")) diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index 5680cd561..c33295ac5 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${versions["opentelemetry"]}-alpha") implementation("io.opentelemetry:opentelemetry-semconv:${versions["opentelemetry"]}-alpha") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry_java_agent"]}") implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") implementation("com.google.auto.service:auto-service:1.0-rc7") diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java index 5b97bd157..3d0b51cb1 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java @@ -17,6 +17,7 @@ package org.hypertrace.agent.otel.extensions; import com.google.auto.service.AutoService; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.spi.ComponentInstaller; import org.hypertrace.agent.filter.FilterRegistry; @@ -24,11 +25,11 @@ public class FilterComponentInstaller implements ComponentInstaller { @Override - public void beforeByteBuddyAgent() { + public void beforeByteBuddyAgent(Config config) { // resolves filter via service loader resolution FilterRegistry.getFilter(); } @Override - public void afterByteBuddyAgent() {} + public void afterByteBuddyAgent(Config config) {} } diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java index 3d70f1a30..cf596f967 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java @@ -68,10 +68,6 @@ public Map getProperties() { // metrics are not reported configProperties.put(OTEL_METRICS_EXPORTER, "none"); - // disable undertow because it is finishing span before payloads are captured in our filter - // TODO remove once fixed - // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/2499 - configProperties.put("otel.instrumentation.undertow.enabled", "false"); return configProperties; } diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java index 9731504a7..fe07d9383 100644 --- a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java +++ b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java @@ -20,6 +20,7 @@ import ch.qos.logback.classic.Logger; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.spi.ComponentInstaller; import io.opentelemetry.javaagent.tooling.AgentInstaller; import java.io.IOException; @@ -86,6 +87,9 @@ public abstract class AbstractInstrumenterTest { @BeforeAll public static void beforeAll() { if (classFileTransformer == null) { + // TODO remove once + // https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/2821 is merged + COMPONENT_INSTALLER.beforeByteBuddyAgent(Config.get()); classFileTransformer = AgentInstaller.installBytebuddyAgent( INSTRUMENTATION, Collections.singleton(COMPONENT_INSTALLER)); diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java b/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java index 34d1d5a2e..6dd06df83 100644 --- a/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java +++ b/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java @@ -18,6 +18,7 @@ import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; @@ -32,7 +33,7 @@ public TestOpenTelemetryInstaller(SpanProcessor spanProcessor) { } @Override - public void beforeByteBuddyAgent() { + public void beforeByteBuddyAgent(Config config) { OpenTelemetrySdk.builder() .setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build()) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) @@ -40,5 +41,5 @@ public void beforeByteBuddyAgent() { } @Override - public void afterByteBuddyAgent() {} + public void afterByteBuddyAgent(Config config) {} }