Skip to content

indy incompatibility with SecurityManager for some internal instrumentation #16821

@SylvainJuge

Description

@SylvainJuge

Description

The Security Manager smoke test fails when invokedynamic instrumentation is enabled for some of the internal instrumentation modules.

OpenTelemetry Javaagent failed to start
java.lang.BootstrapMethodError: call site initialization exception
      at java.lang.invoke.CallSite.makeSite(CallSite.java:341)
      at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307)
      at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297)
      at java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:251)
      at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:194)
      at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:304)
      at java.lang.invoke.CallSite.makeSite(CallSite.java:302)
      at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307)
      at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297)
      at io.opentelemetry.javaagent.tooling.AgentInstaller.addSqlCommenterCustomizers(AgentInstaller.java:326)
      at io.opentelemetry.javaagent.tooling.AgentInstaller.installBytebuddyAgent(AgentInstaller.java:209)
      at io.opentelemetry.javaagent.tooling.AgentInstaller.installBytebuddyAgent(AgentInstaller.java:101)
      at io.opentelemetry.javaagent.tooling.AgentStarterImpl.start(AgentStarterImpl.java:103)
      at io.opentelemetry.javaagent.bootstrap.AgentInitializer$2.run(AgentInitializer.java:68)
      at io.opentelemetry.javaagent.bootstrap.AgentInitializer$2.run(AgentInitializer.java:61)
      at java.security.AccessController.doPrivileged(Native Method)
      at io.opentelemetry.javaagent.bootstrap.AgentInitializer.doPrivilegedExceptionAction(AgentInitializer.java:108)
      at io.opentelemetry.javaagent.bootstrap.AgentInitializer.execute(AgentInitializer.java:82)
      at io.opentelemetry.javaagent.bootstrap.AgentInitializer.initialize(AgentInitializer.java:60)
      at io.opentelemetry.javaagent.OpenTelemetryAgent.startAgent(OpenTelemetryAgent.java:59)
      at io.opentelemetry.javaagent.OpenTelemetryAgent.premain(OpenTelemetryAgent.java:46)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
      at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.opentelemetry.javaagent.bootstrap.ExceptionLogger
      at io.opentelemetry.javaagent.bootstrap.IndyBootstrapDispatcher.bootstrap(IndyBootstrapDispatcher.java:48)
      at java.lang.invoke.CallSite.makeSite(CallSite.java:306)
      ... 26 more

This probably indicates that some of those instrumentation modules require to use AdviceUtil#applyInlineAdvice (or similar) to force inline instrumentation.

Forcing isIndyModule() == false in internal-lambda and internal-reflection modules allow to make the error go away, which means we should probably force inline instrumentation in those modules, or identify what make the general indy implementation fail in this particular case.

How to reproduce

in io.opentelemetry.smoketest.SecurityManagerSmokeTest, add OTEL_JAVAAGENT_EXPERIMENTAL_INDY = true environment variable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions