pinpoint-apm / pinpoint

APM, (Application Performance Management) tool for large-scale distributed systems.
https://pinpoint-apm.gitbook.io/
Apache License 2.0
13.35k stars 3.75k forks source link

[BUG] [/transactionInfo.pinpoint] due to exception [class java.lang.String cannot be cast to class com.navercorp.pinpoint.common.util.StringStringValue #11237

Open car1000 opened 1 month ago

car1000 commented 1 month ago

We are using version 4.5.2 of pinpoint

The 500 error is displayed when you view the invoking link interface.

/transactionInfo interface for BusinessTransactionController

2024-07-10 20:36:30.592 [http-nio-8080-exec-12] ERROR o.s.b.w.s.s.ErrorPageFilter Forwarding to error page from request [/transactionInfo.pinpoint] due to exception [class java.lang.String cannot be cast to class com.navercorp.pinpoint.common.util.StringStringValue (java.lang.String is in module java.base of loader 'bootstrap'; com.navercorp.pinpoint.common.util.StringStringValue is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @7998df7a)] java.lang.ClassCastException: class java.lang.String cannot be cast to class com.navercorp.pinpoint.common.util.StringStringValue (java.lang.String is in module java.base of loader 'bootstrap'; com.navercorp.pinpoint.common.util.StringStringValue is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @7998df7a) at com.navercorp.pinpoint.web.service.SpanServiceImpl$2.replacement(SpanServiceImpl.java:288) ~[classes/:?] at com.navercorp.pinpoint.web.service.SpanServiceImpl.transitionAnnotation(SpanServiceImpl.java:194) ~[classes/:?] at com.navercorp.pinpoint.web.service.SpanServiceImpl.transitionMongoJson(SpanServiceImpl.java:272) ~[classes/:?] at com.navercorp.pinpoint.web.service.SpanServiceImpl.selectSpan(SpanServiceImpl.java:137) ~[classes/:?] at com.navercorp.pinpoint.web.controller.BusinessTransactionController.transactionInfo(BusinessTransactionController.java:104) ~[classes/:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.34.jar:5.3.34] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.34.jar:5.3.34] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:903) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:809) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.34.jar:5.3.34] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.34.jar:5.3.34] at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[servlet-api.jar:?] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.34.jar:5.3.34] at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[servlet-api.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-websocket.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at com.huawei.gaia.monitor.web.servlet.AuthFilter.doFilter(AuthFilter.java:68) ~[classes/:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at com.navercorp.pinpoint.web.servlet.RewriteForV2Filter.doFilter(RewriteForV2Filter.java:96) ~[classes/:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:106) ~[spring-web-5.3.34.jar:5.3.34] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.34.jar:5.3.34] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.34.jar:5.3.34] at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) ~[spring-boot-2.7.18.jar:2.7.18] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.34.jar:5.3.34] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.34.jar:5.3.34] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.61] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.61] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[catalina.jar:8.5.61] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:8.5.61] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:544) ~[catalina.jar:8.5.61] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:8.5.61] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) ~[catalina.jar:8.5.61] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) ~[catalina.jar:8.5.61] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:8.5.61] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:8.5.61] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:616) ~[tomcat-coyote.jar:8.5.61] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:8.5.61] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831) ~[tomcat-coyote.jar:8.5.61] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1634) ~[tomcat-coyote.jar:8.5.61] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:8.5.61] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:8.5.61] at java.lang.Thread.run(Thread.java:829) ~[?:?]

minwoo-jung commented 1 month ago

Hi @car1000 The highest version pinpoint offers is 3.0.0. Where did you download the 4.5.2 version you claim to be using? This is an unknown version.

The official version has never thrown a ClassCastException.

car1000 commented 1 month ago

Hi @car1000 The highest version pinpoint offers is 3.0.0. Where did you download the 4.5.2 version you claim to be using? This is an unknown version.

The official version has never thrown a ClassCastException.

@minwoo-jung thanks,Let me take a look.

car1000 commented 1 month ago

This is an occasional problem.This problem occurs only when the MongoDB is used. However, the call chain information of the API is 500. I don't know why. It's the official 2.5.2 version. Sorry if I wrote it wrong before. @minwoo-jung

minwoo-jung commented 1 month ago

The main error message is this.

java.lang.ClassCastException: class java.lang.String cannot be cast to class com.navercorp.pinpoint.common.util.StringStringValue 

To accurately analyze what is happening, you need to look at the agent log to see if there are no error messages, and in particular if there are no errors related to the mongodb plugin.
If there are no errors, then you need to look at how the mongodb-plugin generates the transaction data. Specifically debugging how the MongoConstants.MONGO_JSON_DATA data is stored. https://github.com/pinpoint-apm/pinpoint/blob/b24519307a382fe67fab1855b4f7e893737396a1/plugins/mongodb/src/main/java/com/navercorp/pinpoint/plugin/mongo/MongoUtil.java#L66

There are other things you might want to look at before digging this deep.

  1. if you develop and use your own plugin for mongodb, look for any oddities in the code involved.
  2. if the version of agent plugin you use is lower than pinpoint-web, it is recommended to use the same version. plugin provides version compatibility, but if there is a bug in the plugin, it is recommended to use the same version as pinpoint-web.
car1000 commented 1 month ago

@minwoo-jung Thanks for the reply. I'll take a look in your direction, and if I hear anything I'll follow up.

emeroad commented 1 month ago

You must use the same version when installing pinpoint-agent on pinpoint-web. If you do not use the same version, you may encounter various class problem.

car1000 commented 1 month ago

We are using the same version. It's strange how this problem arises. @emeroad