Skip to content

Commit 363b50a

Browse files
authored
feat: Failing with the stacktrace when instrumentation post-processing fails. (#9639)
Before we had only that ``` org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dd-java-agent:instrumentation:caffeine:instrumentJava'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130) ... Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing InstrumentAction at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:287) ... Caused by: java.lang.IllegalStateException: Failed to transform at least one type: [class datadog.trace.instrumentation.caffeine.BoundedLocalCacheInstrumentation:[java.lang.RuntimeException: java.lang.reflect.InvocationTargetException]] at ... at InstrumentingPlugin$1.onError(InstrumentingPlugin.groovy:58) at net.bytebuddy.build.Plugin$Engine$ErrorHandler$Compound.onError(Plugin.java:1455) at net.bytebuddy.build.Plugin$Engine$Listener$ForErrorHandler.onError(Plugin.java:2035) at net.bytebuddy.build.Plugin$Engine$Listener$Compound.onError(Plugin.java:2168) ``` Now we have the underlying failure as suppressed ``` Suppressed: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at datadog.trace.agent.tooling.muzzle.MuzzleGenerator.wrap(MuzzleGenerator.java:69) at net.bytebuddy.asm.AsmVisitorWrapper$Compound.wrap(AsmVisitorWrapper.java:746) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor.visit(TypeWriter.java:5027) at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:570) at net.bytebuddy.utility.AsmClassReader$ForAsm.accept(AsmClassReader.java:225) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:4034) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2246) at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter.make(DynamicType.java:4092) at net.bytebuddy.build.Plugin$Engine$Default$Preprocessor$Resolved.call(Plugin.java:5331) at net.bytebuddy.build.Plugin$Engine$Default$Preprocessor$Resolved.call(Plugin.java:5279) at net.bytebuddy.build.Plugin$Engine$Dispatcher$ForSerialTransformation.accept(Plugin.java:4204) at net.bytebuddy.build.Plugin$Engine$Default.apply(Plugin.java:5048) at net.bytebuddy.build.Plugin$Engine$apply$3.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:157) at InstrumentingPlugin.instrumentClasses(InstrumentingPlugin.groovy:53) at InstrumentingPlugin$instrumentClasses.call(Unknown Source) ... Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at datadog.trace.agent.tooling.muzzle.MuzzleGenerator.wrap(MuzzleGenerator.java:67) ... 55 more Caused by: java.lang.IllegalStateException: ConfigInversionMetricCollectorService has not been registered. at datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider.get(ConfigInversionMetricCollectorProvider.java:10) at datadog.trace.config.inversion.ConfigHelper.getEnvironmentVariable(ConfigHelper.java:126) at datadog.trace.bootstrap.config.provider.EnvironmentConfigSource.get(EnvironmentConfigSource.java:12) at datadog.trace.bootstrap.config.provider.ConfigProvider$Source.get(ConfigProvider.java:711) at datadog.trace.bootstrap.config.provider.ConfigProvider.get(ConfigProvider.java:257) at datadog.trace.bootstrap.config.provider.ConfigProvider.getBoolean(ConfigProvider.java:205) at datadog.trace.api.InstrumenterConfig.isIntegrationEnabled(InstrumenterConfig.java:341) at datadog.trace.agent.tooling.InstrumenterModule.<init>(InstrumenterModule.java:72) at datadog.trace.agent.tooling.InstrumenterModule$Tracing.<init>(InstrumenterModule.java:207) at datadog.trace.instrumentation.caffeine.BoundedLocalCacheInstrumentation.<init>(BoundedLocalCacheInstrumentation.java:19) ... 60 more ```
1 parent 450f7b5 commit 363b50a

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

buildSrc/src/main/groovy/InstrumentingPlugin.groovy

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,19 @@ class InstrumentingPlugin {
4949
.withErrorHandlers(
5050
Plugin.Engine.ErrorHandler.Enforcing.ALL_TYPES_RESOLVED,
5151
Plugin.Engine.ErrorHandler.Enforcing.NO_LIVE_INITIALIZERS,
52-
Plugin.Engine.ErrorHandler.Failing.FAIL_LAST)
52+
new Plugin.Engine.ErrorHandler() {
53+
@Delegate
54+
Plugin.Engine.ErrorHandler delegate = Plugin.Engine.ErrorHandler.Failing.FAIL_LAST
55+
56+
void onError(Map<TypeDescription, List<Throwable>> throwables) {
57+
throw new IllegalStateException("Failed to transform at least one type: " + throwables).tap { ise ->
58+
throwables.values().flatten().each {
59+
ise.addSuppressed(it)
60+
}
61+
};
62+
}
63+
}
64+
)
5365
.with(Plugin.Engine.Dispatcher.ForSerialTransformation.Factory.INSTANCE)
5466
.apply(source, target, factories)
5567

0 commit comments

Comments
 (0)