Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿啄debugIT
transmittable-thread-local
提交
911e0cdc
T
transmittable-thread-local
项目概览
阿啄debugIT
/
transmittable-thread-local
与 Fork 源项目一致
从无法访问的项目Fork
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
transmittable-thread-local
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
911e0cdc
编写于
10月 31, 2018
作者:
oldratlee
🔥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add TtlEnhanced tag interface for agent transformed classes
上级
3ee46079
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
20 addition
and
10 deletion
+20
-10
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlExecutorTransformlet.java
...t/internal/transformlet/impl/TtlExecutorTransformlet.java
+2
-2
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlForkJoinTransformlet.java
...t/internal/transformlet/impl/TtlForkJoinTransformlet.java
+4
-4
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlTimerTaskTransformlet.java
.../internal/transformlet/impl/TtlTimerTaskTransformlet.java
+4
-3
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/Utils.java
...tl/threadpool/agent/internal/transformlet/impl/Utils.java
+10
-1
未找到文件。
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlExecutorTransformlet.java
浏览文件 @
911e0cdc
...
...
@@ -14,8 +14,7 @@ import java.util.HashSet;
import
java.util.Map
;
import
java.util.Set
;
import
static
com
.
alibaba
.
ttl
.
threadpool
.
agent
.
internal
.
transformlet
.
impl
.
Utils
.
getCtClass
;
import
static
com
.
alibaba
.
ttl
.
threadpool
.
agent
.
internal
.
transformlet
.
impl
.
Utils
.
signatureOfMethod
;
import
static
com
.
alibaba
.
ttl
.
threadpool
.
agent
.
internal
.
transformlet
.
impl
.
Utils
.*;
/**
* TTL {@link JavassistTransformlet} for {@link java.util.concurrent.Executor}.
...
...
@@ -47,6 +46,7 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
public
byte
[]
doTransform
(
String
className
,
byte
[]
classFileBuffer
,
ClassLoader
loader
)
throws
IOException
,
NotFoundException
,
CannotCompileException
{
if
(
EXECUTOR_CLASS_NAMES
.
contains
(
className
))
{
final
CtClass
clazz
=
getCtClass
(
classFileBuffer
,
loader
);
for
(
CtMethod
method
:
clazz
.
getDeclaredMethods
())
{
updateMethodOfExecutorClass
(
clazz
,
method
);
}
...
...
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlForkJoinTransformlet.java
浏览文件 @
911e0cdc
package
com.alibaba.ttl.threadpool.agent.internal.transformlet.impl
;
import
com.alibaba.ttl.TtlEnhanced
;
import
com.alibaba.ttl.threadpool.agent.internal.logging.Logger
;
import
com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet
;
import
javassist.*
;
...
...
@@ -21,13 +22,12 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
private
static
final
Logger
logger
=
Logger
.
getLogger
(
TtlForkJoinTransformlet
.
class
);
private
static
final
String
FORK_JOIN_TASK_CLASS_NAME
=
"java.util.concurrent.ForkJoinTask"
;
private
static
final
String
TTL_RECURSIVE_ACTION_CLASS_NAME
=
"com.alibaba.ttl.TtlRecursiveAction"
;
private
static
final
String
TTL_RECURSIVE_TASK_CLASS_NAME
=
"com.alibaba.ttl.TtlRecursiveTask"
;
@Override
public
byte
[]
doTransform
(
String
className
,
byte
[]
classFileBuffer
,
ClassLoader
loader
)
throws
IOException
,
NotFoundException
,
CannotCompileException
{
if
(
FORK_JOIN_TASK_CLASS_NAME
.
equals
(
className
))
{
final
CtClass
clazz
=
getCtClass
(
classFileBuffer
,
loader
);
updateForkJoinTaskClass
(
clazz
);
return
clazz
.
toBytecode
();
}
...
...
@@ -40,13 +40,13 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
final
String
capturedFieldName
=
"captured$field$added$by$ttl"
;
final
CtField
capturedField
=
CtField
.
make
(
"private final Object "
+
capturedFieldName
+
";"
,
clazz
);
clazz
.
addField
(
capturedField
,
"com.alibaba.ttl.
TransmittableThreadLocal.Transmitter.capture(
);"
);
clazz
.
addField
(
capturedField
,
"com.alibaba.ttl.
threadpool.agent.internal.transformlet.impl.Utils.doCaptureWhenNotTtlEnhanced(this
);"
);
logger
.
info
(
"add new field "
+
capturedFieldName
+
" to class "
+
className
);
final
CtMethod
doExecMethod
=
clazz
.
getDeclaredMethod
(
"doExec"
,
new
CtClass
[
0
]);
final
String
doExec_renamed_method_rename
=
renamedMethodNameByTtl
(
doExecMethod
);
final
String
beforeCode
=
"if (this instanceof "
+
T
TL_RECURSIVE_ACTION_CLASS_NAME
+
" || this instanceof "
+
TTL_RECURSIVE_TASK_CLASS_NAME
+
") {\n"
+
final
String
beforeCode
=
"if (this instanceof "
+
T
tlEnhanced
.
class
.
getName
()
+
") {\n"
+
" return "
+
doExec_renamed_method_rename
+
"($$);\n"
+
// do nothing/directly return, if is TTL ForkJoinTask instance
"}\n"
+
"Object backup = com.alibaba.ttl.TransmittableThreadLocal.Transmitter.replay("
+
capturedFieldName
+
");"
;
...
...
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlTimerTaskTransformlet.java
浏览文件 @
911e0cdc
package
com.alibaba.ttl.threadpool.agent.internal.transformlet.impl
;
import
com.alibaba.ttl.TtlEnhanced
;
import
com.alibaba.ttl.threadpool.agent.internal.logging.Logger
;
import
com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet
;
import
javassist.*
;
import
java.io.IOException
;
import
static
com
.
alibaba
.
ttl
.
threadpool
.
agent
.
internal
.
transformlet
.
impl
.
Utils
.
doTryFinallyForMethod
;
import
static
com
.
alibaba
.
ttl
.
threadpool
.
agent
.
internal
.
transformlet
.
impl
.
Utils
.
getCtClass
;
import
static
com
.
alibaba
.
ttl
.
threadpool
.
agent
.
internal
.
transformlet
.
impl
.
Utils
.*;
/**
* TTL {@link JavassistTransformlet} for {@link java.util.TimerTask}.
...
...
@@ -43,6 +43,7 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
if
(!
clazz
.
subclassOf
(
clazz
.
getClassPool
().
get
(
TIMER_TASK_CLASS_NAME
)))
return
null
;
logger
.
info
(
"Transforming class "
+
className
);
updateTimerTaskClass
(
clazz
);
return
clazz
.
toBytecode
();
}
...
...
@@ -53,7 +54,7 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
final
String
capturedFieldName
=
"captured$field$added$by$ttl"
;
final
CtField
capturedField
=
CtField
.
make
(
"private final Object "
+
capturedFieldName
+
";"
,
clazz
);
clazz
.
addField
(
capturedField
,
"com.alibaba.ttl.
TransmittableThreadLocal.Transmitter.capture(
);"
);
clazz
.
addField
(
capturedField
,
"com.alibaba.ttl.
threadpool.agent.internal.transformlet.impl.Utils.doCaptureWhenNotTtlEnhanced(this
);"
);
logger
.
info
(
"add new field "
+
capturedFieldName
+
" to class "
+
className
);
final
CtMethod
runMethod
=
clazz
.
getDeclaredMethod
(
RUN_METHOD_NAME
,
new
CtClass
[
0
]);
...
...
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/Utils.java
浏览文件 @
911e0cdc
package
com.alibaba.ttl.threadpool.agent.internal.transformlet.impl
;
import
com.alibaba.ttl.TransmittableThreadLocal
;
import
com.alibaba.ttl.TtlEnhanced
;
import
com.alibaba.ttl.threadpool.agent.internal.logging.Logger
;
import
javassist.*
;
...
...
@@ -11,7 +13,7 @@ import java.lang.reflect.Modifier;
* @author Jerry Lee (oldratlee at gmail dot com)
* @since 2.6.0
*/
class
Utils
{
public
class
Utils
{
private
static
final
Logger
logger
=
Logger
.
getLogger
(
Utils
.
class
);
/**
...
...
@@ -86,4 +88,11 @@ class Utils {
clazz
.
addMethod
(
new_method
);
logger
.
info
(
"insert code around method "
+
signatureOfMethod
(
method
)
+
" of class "
+
clazz
.
getName
()
+
": "
+
code
);
}
@SuppressWarnings
(
"unused"
)
public
static
Object
doCaptureWhenNotTtlEnhanced
(
Object
obj
)
{
if
(
obj
instanceof
TtlEnhanced
)
return
null
;
else
return
TransmittableThreadLocal
.
Transmitter
.
capture
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录