Comments (3)
@JiaYao9701 照着你的说明,我也理了一遍前后的流程:
pandora.ModuleClassLoader
load classespandora.ModuleClassLoader
need classpandora.JarURLConnection$1
- load class
pandora.JarURLConnection$1
(first) 🏋️♀️ - tigger
TTL Transformer
when loading classpandora.JarURLConnection$1
TTL Transformer
need load class files by class loader(pandora.ModuleClassLoader
)pandora.ModuleClassLoader
need classpandora.JarURLConnection$1
- but class
pandora.JarURLConnection$1
is loading/not completed - so load it (again「叕」) 🏋️♀️
- ==> cause
LinkageError: attempted duplicate class definition
💥
因为类加载会触发(TTL) Transformer
,这个应该不能控制以跳过transform
(由Java Agent
机制决定)。
所以对于TTL
库,应该需要支持配置TTL Transformer
可以跳过哪些类的transform
。 @JiaYao9701
TTL Transformer
已经有一些跳过transform
的判断:
功能 🍀:TTL Transformer
支持配置以跳过指定类或包的transform
。
这个功能我先思考然后实现一下。
想问有没有什么好的解决方案
@JiaYao9701 对于这个你具体的问题,快速安全的解决方案 是 新加跳过判断,比如:
final String className = toClassName(classFile);
if (isClassUnderPackage(className, "com.alibaba.ttl")) return NO_TRANSFORM;
if (isClassUnderPackage(className, "java.lang")) return NO_TRANSFORM;
+ if (isClassUnderPackage(className, "com.taobao.pandora.loader")) return NO_TRANSFORM;
+ if (isClassUnderPackage(className, "com.taobao.pandora.service.loader")) return NO_TRANSFORM;
修改后你可以自己打个TTL
包,先快速安全地解决问题 💕 @JiaYao9701
注意:推荐使用最新稳定v2.x
版本的Tag
做 hot patch。
from transmittable-thread-local.
按照这个方式:
final String className = toClassName(classFile);
if (isClassUnderPackage(className, "com.alibaba.ttl")) return NO_TRANSFORM;
if (isClassUnderPackage(className, "java.lang")) return NO_TRANSFORM;
+ if (isClassUnderPackage(className, "com.taobao.pandora.loader")) return NO_TRANSFORM;
+ if (isClassUnderPackage(className, "com.taobao.pandora.service.loader")) return NO_TRANSFORM;
我将TTL 2.14.2
重新打包并且验证了一下,出现了新的问题:
2023-06-15 15:46:29.713 SEVERE [main] TtlTransformer: Fail to transform class com/taobao/spas/sdk/common/cache/ConcurrentLRUCache$1, cause: com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:474)
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:440)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.doTryFinallyForMethod(Utils.java:89)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.doTryFinallyForMethod(Utils.java:61)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlTimerTaskTransformlet.updateTimerTaskClass(TtlTimerTaskTransformlet.java:75)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlTimerTaskTransformlet.doTransform(TtlTimerTaskTransformlet.java:54)
at com.alibaba.ttl.threadpool.agent.TtlTransformer.transform(TtlTransformer.java:64)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1133)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClassInternal(URLClassLoader.java:665)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:593)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:477)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:464)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClassInternal(URLClassLoader.java:463)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:455)
at com.taobao.pandora.service.loader.ModuleClassLoader.resolveClassPath(ModuleClassLoader.java:289)
at com.taobao.pandora.service.loader.ModuleClassLoader.loadClassInternal(ModuleClassLoader.java:126)
at com.taobao.pandora.service.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:75)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:558)
at com.taobao.pandora.service.sharedclass.ClassExporter.scanFromExportIndex(ClassExporter.java:151)
at com.taobao.pandora.service.sharedclass.ClassExporter.exportClasses(ClassExporter.java:76)
at com.taobao.pandora.stage.ExportClass2Cache.stepIn(ExportClass2Cache.java:30)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:86)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.Pipeline.execute(Pipeline.java:78)
at com.taobao.pandora.PandoraContainer.start(PandoraContainer.java:142)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.taobao.pandora.boot.loader.SarLoaderUtils.invokeStart(SarLoaderUtils.java:258)
at com.taobao.pandora.boot.loader.SarLoaderUtils.getClassCache(SarLoaderUtils.java:216)
at com.taobao.pandora.boot.loader.SarLauncher.loadSar(SarLauncher.java:92)
at com.taobao.pandora.boot.loader.SarLauncher.createClassLoader(SarLauncher.java:64)
at com.taobao.pandora.boot.loader.Launcher.createClassLoader(Launcher.java:64)
at com.taobao.pandora.boot.loader.Launcher.launch(Launcher.java:49)
at com.taobao.pandora.boot.loader.SarLauncher.main(SarLauncher.java:171)
Caused by: compile error: no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.MemberResolver.searchImports(MemberResolver.java:479)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:422)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:329)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:711)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.CallExpr.accept(CallExpr.java:49)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:266)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atDeclarator(CodeGen.java:819)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.Declarator.accept(Declarator.java:103)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atStmnt(CodeGen.java:381)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atStmnt(CodeGen.java:381)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atMethodBody(CodeGen.java:321)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.Javac.compileBody(Javac.java:228)
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:466)
... 44 more
2023-06-15 15:46:29.812 SEVERE [main] TtlTransformer: Fail to transform class com/taobao/vipserver/client/backups/FailoverReactor$DiskFileWriter, cause: com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:474)
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:440)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.doTryFinallyForMethod(Utils.java:89)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.doTryFinallyForMethod(Utils.java:61)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlTimerTaskTransformlet.updateTimerTaskClass(TtlTimerTaskTransformlet.java:75)
at com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlTimerTaskTransformlet.doTransform(TtlTimerTaskTransformlet.java:54)
at com.alibaba.ttl.threadpool.agent.TtlTransformer.transform(TtlTransformer.java:64)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1133)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClassInternal(URLClassLoader.java:665)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:593)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:477)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:464)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClassInternal(URLClassLoader.java:463)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:455)
at com.taobao.pandora.service.loader.ModuleClassLoader.resolveClassPath(ModuleClassLoader.java:289)
at com.taobao.pandora.service.loader.ModuleClassLoader.loadClassInternal(ModuleClassLoader.java:126)
at com.taobao.pandora.service.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:75)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:558)
at com.taobao.pandora.service.sharedclass.ClassExporter.scanFromExportIndex(ClassExporter.java:151)
at com.taobao.pandora.service.sharedclass.ClassExporter.exportClasses(ClassExporter.java:76)
at com.taobao.pandora.stage.ExportClass2Cache.stepIn(ExportClass2Cache.java:30)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:86)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.StageNode.stepIn(StageNode.java:90)
at com.taobao.pandora.service.pipeline.Pipeline.execute(Pipeline.java:78)
at com.taobao.pandora.PandoraContainer.start(PandoraContainer.java:142)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.taobao.pandora.boot.loader.SarLoaderUtils.invokeStart(SarLoaderUtils.java:258)
at com.taobao.pandora.boot.loader.SarLoaderUtils.getClassCache(SarLoaderUtils.java:216)
at com.taobao.pandora.boot.loader.SarLauncher.loadSar(SarLauncher.java:92)
at com.taobao.pandora.boot.loader.SarLauncher.createClassLoader(SarLauncher.java:64)
at com.taobao.pandora.boot.loader.Launcher.createClassLoader(Launcher.java:64)
at com.taobao.pandora.boot.loader.Launcher.launch(Launcher.java:49)
at com.taobao.pandora.boot.loader.SarLauncher.main(SarLauncher.java:171)
Caused by: compile error: no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.MemberResolver.searchImports(MemberResolver.java:479)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:422)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:329)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:711)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.CallExpr.accept(CallExpr.java:49)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:266)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atDeclarator(CodeGen.java:819)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.Declarator.accept(Declarator.java:103)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atStmnt(CodeGen.java:381)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atStmnt(CodeGen.java:381)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.CodeGen.atMethodBody(CodeGen.java:321)
at com.alibaba.ttl.threadpool.agent.internal.javassist.compiler.Javac.compileBody(Javac.java:228)
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:466)
... 44 more
2023-06-15 15:46:29.879 SEVERE [main] TtlTransformer: Fail to transform class com/taobao/diamond/identify/CredentialWatcher$1, cause: com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:474)
at com.alibaba.ttl.threadpool.agent.internal.javassist.CtBehavior.setBody(CtBehavior.java:440)
目前还不知道原因,正在排查-_-
from transmittable-thread-local.
no such class
,看起来是Classloader
及其代理关系的设置问题,应该与TTL
没有关系。 这个 issue 先 close 了。 @JiaYao9701
2023-06-15 15:46:29.879 SEVERE [main] TtlTransformer: Fail to transform class com/taobao/diamond/identify/CredentialWatcher$1, cause: com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
com.alibaba.ttl.threadpool.agent.internal.javassist.CannotCompileException: [source error] no such class: com.alibaba.ttl.TransmittableThreadLocal.Transmitter
如果确定问题原因涉及TTL
,可以继续讨论。 💕
from transmittable-thread-local.
Related Issues (20)
- -javaagent:D:\jar\transmittable-thread-local-2.14.0.jar 必须使用带版本号的名称,去除版本号会报错 HOT 1
- k8s环境下CPU调整>2数量后线程上下文传递失效 HOT 1
- 官方maven仓库的版本没有同步? HOT 2
- ListenableFuture添加了监听回调,回调线程获取不到正确的值? HOT 3
- 配合线程池使用时,remove了之后,下一个任务还是能拿到上一个任务设置的值 HOT 1
- 线上运行开始父子线程可以传递threadlocal变量,运行一段时间失效 HOT 1
- 使用jrebel -javaagent方式启动,在stream().parallel()无法正确获取内容
- jdk并发流parallelStream支持这种改造吗 HOT 1
- 在Java21的虚拟线程中不使用`TTL`会有问题吗? HOT 1
- TtlRunnable是否可以支持PriorityQueue和DelayQueue HOT 2
- 从哪里可以看到每个版本迭代哪些内容,或者修复了哪些bug HOT 1
- `Stream#parallel()#forEach()`或者`List#parallelStream()#forEach()`时,如何使用不丢失`TTL`值 HOT 1
- TTL是否支持调用中包含多种协议场景情况下的上下文传递 HOT 1
- TTL Agent instrument the class exception HOT 2
- graalvm TraversingBlockingQueue ArrayStoreException HOT 1
- 父线程调用remove清除缓存后,是否需要子线程显式romove HOT 1
- 请问下,在spring boot 场景下,filter 中进入时set ,但是业务中异步线程还未执行完,filter 请求已经finally remove了,这时获取到的值为null, 这种情况如何保证正确性 HOT 3
- TTL 的 java agent 模式与dragonwell 的 eagerappcds有冲突 HOT 5
- TTL 在ThreadPoolExecutor传递错误(openJ9 agent使用方式) HOT 5
- 在transmittable-thread-local-2.12.4.jar agent 模式下与 nacos spring cloud loadbalance 偶发并发问题 HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from transmittable-thread-local.