Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

My functions executed by ExecutorService not in Call Tree #10358

Closed
harveychong opened this issue Sep 20, 2023 · 10 comments · Fixed by #10396
Closed

My functions executed by ExecutorService not in Call Tree #10358

harveychong opened this issue Sep 20, 2023 · 10 comments · Fixed by #10396
Assignees
Milestone

Comments

@harveychong
Copy link

harveychong commented Sep 20, 2023

Hi all,

I am new to pinpoint. I have deployed pinpoint 2.5.2 in my local machine and it seems all components were successfully started. For the JVM agent, I made the following changes:

user defined classes

profiler.include=com.datapump.v2.cog.*
profiler.entrypoint=com.datapump.v2.cog.schedule.CogRepeatableScheduler.runOneIteration

Thread plugin

profiler.thread.enable=true
profiler.thread.match.package=com.datapump.v2
profiler.thread.support-class=Runnable,Callable,Supplier 

After restarting, I could not find my functions executed by ExecutionService in Call Tree but when I remove ExecutionService(single thread), I can see all of them (not for java.net.http.HttpClient)

My jdk is:

Java(TM) SE Runtime Environment (build 17.0.4.1+1-LTS-2)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.4.1+1-LTS-2, mixed mode, sharing)

Extra information:
I received exceptions (described below). When I went through the source, I can see the class name is hard coded

Exception:

java.lang.NullPointerException: fqcn
        at java.util.Objects.requireNonNull(Objects.java:233) ~[?:?]
        at com.navercorp.pinpoint.common.util.ClassUtils.getPackageName(ClassUtils.java:52) ~[?:2.5.2]
        at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.getPackageName(ClassFileTransformerModuleHandler.java:105) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
        at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.addModulePermission(ClassFileTransformerModuleHandler.java:92) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
        at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.transform(ClassFileTransformerModuleHandler.java:64) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
        at com.navercorp.pinpoint.profiler.instrument.lambda.DefaultLambdaBytecodeHandler.handleLambdaBytecode(DefaultLambdaBytecodeHandler.java:49) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
        at com.navercorp.pinpoint.bootstrap.java16.lambda.MethodHandlesLookupDelegatorJava16.defineHiddenClass(MethodHandlesLookupDelegatorJava16.java:44) ~[?:2.5.2]

Source:

@Override
  public byte[] handleLambdaBytecode(Class<?> hostClass, byte[] data, Object[] cpPatches) {
      if (hostClass != null && data != null) {
          try {
              final ClassLoader classLoader = hostClass.getClassLoader();
              final Object module = javaModuleFactory.getModule(hostClass);
              final ProtectionDomain protectionDomain = hostClass.getProtectionDomain();
              final byte[] transform = classFileTransformer.transform(module, classLoader, **null, null**, protectionDomain, data);
              if (transform != null) {
                  return transform;
              }
          } catch (Exception e) {
              LogManager.getLogger(this.getClass()).warn("lambda transform fail Caused by:" + e.getMessage(), e);
          }
      }
      return data;
  }

Many thanks in advance.

@emeroad
Copy link
Member

emeroad commented Sep 20, 2023

Could you post the full track?
The cause of the problem was not understood with this stack trace.

@harveychong
Copy link
Author

harveychong commented Sep 20, 2023

Not sure this is what you want. Note that I have renamed our package names

09-20 04:46:34.034 [  api-invoker-0] WARN  c.n.p.p.i.l.DefaultLambdaBytecodeHandler -- lambda transform fail Caused by:fqcn
java.lang.NullPointerException: fqcn
	at java.util.Objects.requireNonNull(Objects.java:233) ~[?:?]
	at com.navercorp.pinpoint.common.util.ClassUtils.getPackageName(ClassUtils.java:52) ~[?:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.getPackageName(ClassFileTransformerModuleHandler.java:105) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.addModulePermission(ClassFileTransformerModuleHandler.java:92) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.transform(ClassFileTransformerModuleHandler.java:64) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.instrument.lambda.DefaultLambdaBytecodeHandler.handleLambdaBytecode(DefaultLambdaBytecodeHandler.java:49) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.bootstrap.java16.lambda.MethodHandlesLookupDelegatorJava16.defineHiddenClass(MethodHandlesLookupDelegatorJava16.java:44) ~[?:2.5.2]
	at java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:407) ~[?:?]
	at java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:315) ~[?:?]
	at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:228) ~[?:?]
	at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:341) ~[?:?]
	at java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:134) ~[?:?]
	at java.lang.invoke.CallSite.makeSite(CallSite.java:315) ~[?:?]
	at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:281) ~[?:?]
	at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:271) ~[?:?]
	at com.datapump.v2.cog.webhook.HttpMessageWebhookHandler.accept(HttpMessageWebhookHandler.java:141) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at com.datapump.v2.cog.api.ApiHttpMethodInvoker.lambda$execute$0(ApiHttpMethodInvoker.java:294) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]
09-20 04:46:34.034 [  api-invoker-0] WARN  c.n.p.p.i.l.DefaultLambdaBytecodeHandler -- lambda transform fail Caused by:fqcn
java.lang.NullPointerException: fqcn
	at java.util.Objects.requireNonNull(Objects.java:233) ~[?:?]
	at com.navercorp.pinpoint.common.util.ClassUtils.getPackageName(ClassUtils.java:52) ~[?:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.getPackageName(ClassFileTransformerModuleHandler.java:105) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.addModulePermission(ClassFileTransformerModuleHandler.java:92) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.transform(ClassFileTransformerModuleHandler.java:64) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.instrument.lambda.DefaultLambdaBytecodeHandler.handleLambdaBytecode(DefaultLambdaBytecodeHandler.java:49) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.bootstrap.java16.lambda.MethodHandlesLookupDelegatorJava16.defineHiddenClass(MethodHandlesLookupDelegatorJava16.java:44) ~[?:2.5.2]
	at java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:407) ~[?:?]
	at java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:315) ~[?:?]
	at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:228) ~[?:?]
	at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:341) ~[?:?]
	at java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:134) ~[?:?]
	at java.lang.invoke.CallSite.makeSite(CallSite.java:315) ~[?:?]
	at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:281) ~[?:?]
	at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:271) ~[?:?]
	at com.datapump.v2.cog.webhook.HttpMessageWebhookHandler.accept(HttpMessageWebhookHandler.java:142) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at com.datapump.v2.cog.api.ApiHttpMethodInvoker.lambda$execute$0(ApiHttpMethodInvoker.java:294) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]
09-20 04:46:34.034 [  api-invoker-0] WARN  c.n.p.p.i.l.DefaultLambdaBytecodeHandler -- lambda transform fail Caused by:fqcn
java.lang.NullPointerException: fqcn
	at java.util.Objects.requireNonNull(Objects.java:233) ~[?:?]
	at com.navercorp.pinpoint.common.util.ClassUtils.getPackageName(ClassUtils.java:52) ~[?:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.getPackageName(ClassFileTransformerModuleHandler.java:105) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.addModulePermission(ClassFileTransformerModuleHandler.java:92) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.context.javamodule.ClassFileTransformerModuleHandler.transform(ClassFileTransformerModuleHandler.java:64) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.profiler.instrument.lambda.DefaultLambdaBytecodeHandler.handleLambdaBytecode(DefaultLambdaBytecodeHandler.java:49) ~[pinpoint-profiler-2.5.2.jar:2.5.2]
	at com.navercorp.pinpoint.bootstrap.java16.lambda.MethodHandlesLookupDelegatorJava16.defineHiddenClass(MethodHandlesLookupDelegatorJava16.java:44) ~[?:2.5.2]
	at java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:407) ~[?:?]
	at java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:315) ~[?:?]
	at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:228) ~[?:?]
	at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:341) ~[?:?]
	at java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:134) ~[?:?]
	at java.lang.invoke.CallSite.makeSite(CallSite.java:315) ~[?:?]
	at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:281) ~[?:?]
	at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:271) ~[?:?]
	at com.datapump.v2.cog.webhook.HttpMessageWebhookHandler.parserTask(HttpMessageWebhookHandler.java:160) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at com.datapump.v2.cog.webhook.HttpMessageWebhookHandler.lambda$accept$0(HttpMessageWebhookHandler.java:141) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[?:?]
	at com.datapump.v2.cog.webhook.HttpMessageWebhookHandler.accept(HttpMessageWebhookHandler.java:143) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at com.datapump.v2.cog.api.ApiHttpMethodInvoker.lambda$execute$0(ApiHttpMethodInvoker.java:294) ~[fgp-datapump-23.5.0-features-FGM-4073-033.4c25e7e.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

@emeroad
Copy link
Member

emeroad commented Sep 20, 2023

What is the JDK version?

@harveychong
Copy link
Author

17

Java(TM) SE Runtime Environment (build 17.0.4.1+1-LTS-2)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.4.1+1-LTS-2, mixed mode, sharing)

@emeroad
Copy link
Member

emeroad commented Sep 20, 2023

profiler.thread.support-class=Runnable,Callable,Supplier

It seems to be a bug.
Maybe it causes problems if the runnable implementation is lambda.

@harveychong
Copy link
Author

harveychong commented Sep 20, 2023

I modified my code:

It was:

        final List<? extends ListenableFuture<?>> futures = chunks.map(entry -> parserTask(metaData, entry))
                        .map(executor::submit)
                        .collect(toList());

Now it is

        Function<BlobChunk, Runnable> mapper = new Function<BlobChunk, Runnable>() {

            @Override
            public Runnable apply(BlobChunk t) {
                return parserTask(metaData, t);
            }
        };
        final List<? extends ListenableFuture<?>> futures = chunks.map(mapper)
                        //                            .map(executor::submit)
                        .map(new Function<Runnable, ListenableFuture<?>>() {

                            @Override
                            public ListenableFuture<?> apply(Runnable t) {
                                return executor.submit(t);
                            }
                        })
                        .collect(toList());

I can see more functions. Great! However I could not see functions from java.net.http.HttpClient (jdk 17) to connect my Rest API. Any advice?

@emeroad emeroad added this to the 2.6.0 milestone Sep 20, 2023
@emeroad emeroad added the bug label Sep 20, 2023
@emeroad
Copy link
Member

emeroad commented Sep 20, 2023

Unfortunately, Pinpoint does not support JDK17 HttpClient yet.

@harveychong
Copy link
Author

harveychong commented Sep 20, 2023

I can see http client functions in Call Tree by using

profiler.include=jdk.internal.net.http.HttpClientImpl

But there is no icon for my rest api server in servermap

@harveychong
Copy link
Author

After you fix the bug, I am happy to test it against our applications if you like

@smilu97
Copy link
Contributor

smilu97 commented Oct 13, 2023

@harveychong

Hi, we hope this exception no longer occurs. Please try again and let us know how it goes!

Thank you

gipyeong-lee pushed a commit to gipyeong-lee/pinpoint that referenced this issue Nov 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants