Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
javalover123888
SkyWalking
提交
c88cf2af
S
SkyWalking
项目概览
javalover123888
/
SkyWalking
与 Fork 源项目一致
Fork自
山不在高_有仙则灵 / SkyWalking
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c88cf2af
编写于
6月 15, 2017
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Provide ignore mechanism for TracerContext.
上级
1d3f7ba6
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
122 addition
and
32 deletion
+122
-32
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextManager.java
...org/skywalking/apm/agent/core/context/ContextManager.java
+2
-2
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/IgnoreTracerContextListener.java
...g/apm/agent/core/context/IgnoreTracerContextListener.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/IgnoredTracerContext.java
...ywalking/apm/agent/core/context/IgnoredTracerContext.java
+16
-15
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracerContext.java
.../org/skywalking/apm/agent/core/context/TracerContext.java
+8
-0
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/NoopSpan.java
...org/skywalking/apm/agent/core/context/trace/NoopSpan.java
+63
-0
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java
...ava/org/skywalking/apm/agent/core/context/trace/Span.java
+1
-14
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTestCase.java
...alking/apm/agent/core/context/ContextManagerTestCase.java
+31
-0
未找到文件。
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextManager.java
浏览文件 @
c88cf2af
...
...
@@ -86,7 +86,7 @@ public class ContextManager implements TracerContextListener, BootService, Ignor
@Override
public
void
bootUp
()
{
TracerContext
.
ListenerManager
.
add
(
this
);
IgnoreTracerContext
.
ListenerManager
.
add
(
this
);
Ignore
d
TracerContext
.
ListenerManager
.
add
(
this
);
}
@Override
...
...
@@ -95,7 +95,7 @@ public class ContextManager implements TracerContextListener, BootService, Ignor
}
@Override
public
void
afterFinished
(
IgnoreTracerContext
traceSegment
)
{
public
void
afterFinished
(
Ignore
d
TracerContext
traceSegment
)
{
CONTEXT
.
remove
();
}
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/IgnoreTracerContextListener.java
浏览文件 @
c88cf2af
...
...
@@ -5,5 +5,5 @@ package org.skywalking.apm.agent.core.context;
* @author wusheng
*/
public
interface
IgnoreTracerContextListener
{
void
afterFinished
(
IgnoreTracerContext
traceSegment
);
void
afterFinished
(
Ignore
d
TracerContext
traceSegment
);
}
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/IgnoreTracerContext.java
→
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/Ignore
d
TracerContext.java
浏览文件 @
c88cf2af
...
...
@@ -3,20 +3,21 @@ package org.skywalking.apm.agent.core.context;
import
java.util.LinkedList
;
import
java.util.List
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.NoopSpan
;
/**
* The <code>IgnoreTracerContext</code> represent a context should be ignored.
* The <code>Ignore
d
TracerContext</code> represent a context should be ignored.
* So it just maintains the stack with integer depth.
* All operations through this <code>IgnoreTracerContext</code> will be ignored, with low gc cost.
*
* TODO: Can't return null span
* All operations through this <code>IgnoredTracerContext</code> will be ignored, with low gc cost.
*
* @author wusheng
*/
public
class
IgnoreTracerContext
implements
AbstractTracerContext
{
public
class
IgnoredTracerContext
implements
AbstractTracerContext
{
private
static
final
NoopSpan
NOOP_SPAN
=
new
NoopSpan
();
private
int
stackDepth
;
public
IgnoreTracerContext
(
int
initStackDepth
)
{
public
Ignore
d
TracerContext
(
int
initStackDepth
)
{
this
.
stackDepth
=
initStackDepth
;
}
...
...
@@ -38,7 +39,7 @@ public class IgnoreTracerContext implements AbstractTracerContext {
@Override
public
AbstractSpan
createSpan
(
String
operationName
,
boolean
isLeaf
)
{
stackDepth
++;
return
null
;
return
NOOP_SPAN
;
}
@Override
...
...
@@ -48,14 +49,14 @@ public class IgnoreTracerContext implements AbstractTracerContext {
@Override
public
AbstractSpan
activeSpan
()
{
return
null
;
return
NOOP_SPAN
;
}
@Override
public
void
stopSpan
(
AbstractSpan
span
)
{
stackDepth
--;
if
(
stackDepth
==
0
)
{
ListenerManager
.
notifyFinish
(
this
);
}
}
...
...
@@ -82,15 +83,15 @@ public class IgnoreTracerContext implements AbstractTracerContext {
}
/**
* Notify the {@link Ignore
TracerContext.ListenerManager} about the given {@link Ignore
TracerContext} have
* finished. And trigger {@link IgnoreTracerContext.ListenerManager} to notify all {@link #LISTENERS} 's {@link
* IgnoreTracerContextListener#afterFinished(IgnoreTracerContext)}
* Notify the {@link Ignore
dTracerContext.ListenerManager} about the given {@link Ignored
TracerContext} have
* finished. And trigger {@link Ignore
d
TracerContext.ListenerManager} to notify all {@link #LISTENERS} 's {@link
* IgnoreTracerContextListener#afterFinished(Ignore
d
TracerContext)}
*
* @param ignoreTracerContext
* @param ignore
d
TracerContext
*/
static
void
notifyFinish
(
Ignore
TracerContext
ignore
TracerContext
)
{
static
void
notifyFinish
(
Ignore
dTracerContext
ignored
TracerContext
)
{
for
(
IgnoreTracerContextListener
listener
:
LISTENERS
)
{
listener
.
afterFinished
(
ignoreTracerContext
);
listener
.
afterFinished
(
ignore
d
TracerContext
);
}
}
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracerContext.java
浏览文件 @
c88cf2af
...
...
@@ -59,6 +59,14 @@ public final class TracerContext implements AbstractTracerContext {
Span
parentSpan
=
peek
();
Span
span
;
if
(
parentSpan
==
null
)
{
if
(
operationName
!=
null
)
{
int
suffixIdx
=
operationName
.
lastIndexOf
(
"."
);
if
(
suffixIdx
>
-
1
&&
Config
.
Agent
.
IGNORE_SUFFIX
.
contains
(
operationName
.
substring
(
suffixIdx
)))
{
ContextManager
.
ContextSwitcher
.
INSTANCE
.
toNew
(
new
IgnoredTracerContext
(
1
));
return
ContextManager
.
activeSpan
();
}
}
if
(
isLeaf
)
{
span
=
new
LeafSpan
(
spanIdGenerator
++,
operationName
,
startTime
);
}
else
{
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/NoopSpan.java
0 → 100644
浏览文件 @
c88cf2af
package
org.skywalking.apm.agent.core.context.trace
;
import
java.util.Map
;
import
org.skywalking.apm.agent.core.context.IgnoredTracerContext
;
/**
* The <code>NoopSpan</code> represents a span implementation without any actual operation.
* This span implementation is for {@link IgnoredTracerContext}.
*
* @author wusheng
*/
public
class
NoopSpan
implements
AbstractSpan
{
@Override
public
AbstractSpan
setOperationName
(
String
operationName
)
{
return
this
;
}
@Override
public
void
setPeerHost
(
String
peerHost
)
{
}
@Override
public
void
setPort
(
int
port
)
{
}
@Override
public
void
setPeers
(
String
peers
)
{
}
@Override
public
AbstractSpan
setTag
(
String
key
,
String
value
)
{
return
this
;
}
@Override
public
AbstractSpan
setTag
(
String
key
,
boolean
value
)
{
return
this
;
}
@Override
public
AbstractSpan
setTag
(
String
key
,
Integer
value
)
{
return
this
;
}
@Override
public
AbstractSpan
log
(
Map
<
String
,
String
>
fields
)
{
return
this
;
}
@Override
public
AbstractSpan
log
(
Throwable
t
)
{
return
this
;
}
@Override
public
AbstractSpan
log
(
String
event
)
{
return
this
;
}
}
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java
浏览文件 @
c88cf2af
...
...
@@ -13,9 +13,6 @@ import java.util.HashMap;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
org.skywalking.apm.agent.core.conf.Config
;
import
org.skywalking.apm.agent.core.context.ContextManager
;
import
org.skywalking.apm.agent.core.context.IgnoreTracerContext
;
import
org.skywalking.apm.agent.core.context.tag.BooleanTagItem
;
import
org.skywalking.apm.agent.core.context.tag.IntTagItem
;
import
org.skywalking.apm.agent.core.context.tag.StringTagItem
;
...
...
@@ -191,22 +188,12 @@ public class Span implements AbstractSpan {
}
/**
* Sets the string name for the logical operation this span represents.
* These is one scenario, which trigger context switch.
* 1) the operations ends with the defined suffix, see {@link Config.Agent#IGNORE_SUFFIX}
* Set the string name for the logical operation this span represents.
*
* @return this Span instance, for chaining
*/
public
AbstractSpan
setOperationName
(
String
operationName
)
{
this
.
operationName
=
operationName
;
if
(
this
.
spanId
==
0
)
{
if
(
operationName
!=
null
)
{
int
suffixIdx
=
operationName
.
lastIndexOf
(
"."
);
if
(
suffixIdx
>
-
1
&&
Config
.
Agent
.
IGNORE_SUFFIX
.
contains
(
operationName
.
substring
(
suffixIdx
)))
{
ContextManager
.
ContextSwitcher
.
INSTANCE
.
toNew
(
new
IgnoreTracerContext
(
1
));
}
}
}
return
this
;
}
...
...
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTestCase.java
浏览文件 @
c88cf2af
package
org.skywalking.apm.agent.core.context
;
import
java.lang.reflect.Field
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.BeforeClass
;
...
...
@@ -7,6 +8,7 @@ import org.junit.Test;
import
org.skywalking.apm.agent.core.boot.ServiceManager
;
import
org.skywalking.apm.agent.core.context.tag.Tags
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.NoopSpan
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
/**
...
...
@@ -33,6 +35,35 @@ public class ContextManagerTestCase {
Assert
.
assertEquals
(
span
,
segment
.
getSpans
().
get
(
0
));
}
@Test
public
void
testSwitchToIgnoredTracerContext
()
throws
NoSuchFieldException
,
IllegalAccessException
{
AbstractSpan
span
=
ContextManager
.
createSpan
(
"/webresource/jquery.js"
);
Tags
.
COMPONENT
.
set
(
span
,
"test"
);
Assert
.
assertTrue
(
span
instanceof
NoopSpan
);
Assert
.
assertTrue
(
ContextManager
.
activeSpan
()
instanceof
NoopSpan
);
Field
context
=
ContextManager
.
class
.
getDeclaredField
(
"CONTEXT"
);
context
.
setAccessible
(
true
);
AbstractTracerContext
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertTrue
(
tracerContext
instanceof
IgnoredTracerContext
);
ContextManager
.
stopSpan
();
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertNull
(
tracerContext
);
// check normal trace again
span
=
ContextManager
.
createSpan
(
"serviceA"
);
Tags
.
COMPONENT
.
set
(
span
,
"test"
);
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertTrue
(
tracerContext
instanceof
TracerContext
);
ContextManager
.
stopSpan
();
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertNull
(
tracerContext
);
}
@After
public
void
reset
()
{
TracerContext
.
ListenerManager
.
remove
(
TestTracerContextListener
.
INSTANCE
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录