17
17
package com .navercorp .pinpoint .profiler .context ;
18
18
19
19
import com .navercorp .pinpoint .bootstrap .context .AsyncState ;
20
+ import com .navercorp .pinpoint .bootstrap .context .SpanEventRecorder ;
20
21
import com .navercorp .pinpoint .bootstrap .context .SpanRecorder ;
21
22
import com .navercorp .pinpoint .bootstrap .context .Trace ;
22
23
import com .navercorp .pinpoint .bootstrap .context .TraceId ;
@@ -116,24 +117,26 @@ public Trace newTraceObject(String urlPath) {
116
117
}
117
118
}
118
119
120
+
119
121
// internal async trace.
120
122
@ Override
121
123
public Trace continueAsyncContextTraceObject (TraceRoot traceRoot , LocalAsyncId localAsyncId ) {
122
124
final SpanChunkFactory spanChunkFactory = new AsyncSpanChunkFactory (traceRoot , localAsyncId );
123
125
final Storage storage = storageFactory .createStorage (spanChunkFactory );
124
-
125
126
final CallStack <SpanEvent > callStack = callStackFactory .newCallStack ();
126
127
127
128
final SpanRecorder spanRecorder = recorderFactory .newTraceRootSpanRecorder (traceRoot );
128
-
129
129
final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory .newWrappedSpanEventRecorder (traceRoot );
130
130
131
131
return new AsyncChildTrace (traceRoot , callStack , storage , spanRecorder , wrappedSpanEventRecorder , localAsyncId );
132
132
}
133
133
134
134
@ Override
135
135
public Trace continueDisableAsyncContextTraceObject (LocalTraceRoot traceRoot ) {
136
- return new DisableAsyncChildTrace (traceRoot );
136
+ final AsyncState asyncState = new DisableAsyncState ();
137
+ SpanRecorder spanRecorder = recorderFactory .newDisableSpanRecorder (traceRoot );
138
+ SpanEventRecorder spanEventRecorder = recorderFactory .newDisableSpanEventRecorder (traceRoot , asyncState );
139
+ return new DisableAsyncChildTrace (traceRoot , spanRecorder , spanEventRecorder );
137
140
}
138
141
139
142
// entry point async trace.
@@ -145,7 +148,7 @@ public Trace continueAsyncTraceObject(final TraceId traceId) {
145
148
final TraceRoot traceRoot = traceRootFactory .continueTraceRoot (traceId , state .nextId ());
146
149
return newAsyncDefaultTrace (traceRoot );
147
150
} else {
148
- return newLocalTrace (state .nextId ());
151
+ return newAsyncLocalTrace (state .nextId ());
149
152
}
150
153
}
151
154
@@ -154,21 +157,22 @@ public Trace continueAsyncTraceObject(final TraceId traceId) {
154
157
@ Override
155
158
public Trace newAsyncTraceObject () {
156
159
final TraceSampler .State state = traceSampler .isNewSampled ();
157
- return newAsyncTraceObject (state );
160
+ if (state .isSampled ()) {
161
+ final TraceRoot traceRoot = traceRootFactory .newTraceRoot (state .nextId ());
162
+ return newAsyncDefaultTrace (traceRoot );
163
+ } else {
164
+ return newAsyncLocalTrace (state .nextId ());
165
+ }
158
166
}
159
167
160
168
@ Override
161
169
public Trace newAsyncTraceObject (String urlPath ) {
162
170
final TraceSampler .State state = traceSampler .isNewSampled (urlPath );
163
- return newAsyncTraceObject (state );
164
- }
165
-
166
- Trace newAsyncTraceObject (TraceSampler .State state ) {
167
171
if (state .isSampled ()) {
168
172
final TraceRoot traceRoot = traceRootFactory .newTraceRoot (state .nextId ());
169
173
return newAsyncDefaultTrace (traceRoot );
170
174
} else {
171
- return newLocalTrace (state .nextId ());
175
+ return newAsyncLocalTrace (state .nextId ());
172
176
}
173
177
}
174
178
@@ -185,12 +189,11 @@ private DefaultTrace newDefaultTrace(TraceRoot traceRoot) {
185
189
final Storage storage = storageFactory .createStorage (spanChunkFactory );
186
190
final CallStack <SpanEvent > callStack = callStackFactory .newCallStack ();
187
191
188
- final ActiveTraceHandle handle = registerActiveTrace (traceRoot );
189
- final CloseListener closeListener = new DefaultCloseListener (handle , uriStatStorage );
190
-
191
192
final SpanRecorder spanRecorder = recorderFactory .newSpanRecorder (span );
192
193
final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory .newWrappedSpanEventRecorder (traceRoot );
193
194
195
+ final ActiveTraceHandle handle = registerActiveTrace (traceRoot );
196
+ final CloseListener closeListener = new DefaultCloseListener (traceRoot , handle , uriStatStorage );
194
197
return new DefaultTrace (span , callStack , storage , spanRecorder , wrappedSpanEventRecorder , closeListener );
195
198
}
196
199
@@ -210,11 +213,29 @@ private AsyncDefaultTrace newAsyncDefaultTrace(TraceRoot traceRoot) {
210
213
return new AsyncDefaultTrace (span , callStack , storage , spanRecorder , wrappedSpanEventRecorder , asyncState );
211
214
}
212
215
216
+
213
217
private Trace newLocalTrace (long nextDisabledId ) {
214
218
final LocalTraceRoot traceRoot = traceRootFactory .newDisableTraceRoot (nextDisabledId );
215
219
final SpanRecorder spanRecorder = recorderFactory .newDisableSpanRecorder (traceRoot );
216
- final ActiveTraceHandle activeTraceHandle = registerActiveTrace (traceRoot );
217
- return new DisableTrace (traceRoot , spanRecorder , activeTraceHandle , uriStatStorage );
220
+
221
+ final ActiveTraceHandle handle = registerActiveTrace (traceRoot );
222
+ final CloseListener closeListener = new DefaultCloseListener (traceRoot , handle , uriStatStorage );
223
+
224
+ final SpanEventRecorder spanEventRecorder = recorderFactory .newDisableSpanEventRecorder (traceRoot );
225
+ return new DisableTrace (traceRoot , spanRecorder , spanEventRecorder , closeListener );
226
+ }
227
+
228
+ private Trace newAsyncLocalTrace (long nextDisabledId ) {
229
+ final LocalTraceRoot traceRoot = traceRootFactory .newDisableTraceRoot (nextDisabledId );
230
+ final SpanRecorder spanRecorder = recorderFactory .newDisableSpanRecorder (traceRoot );
231
+
232
+ final ActiveTraceHandle handle = registerActiveTrace (traceRoot );
233
+ AsyncState asyncState = new ListenableAsyncState (traceRoot ,
234
+ ListenableAsyncState .AsyncStateListener .EMPTY ,
235
+ handle , uriStatStorage );
236
+
237
+ final SpanEventRecorder spanEventRecorder = recorderFactory .newDisableSpanEventRecorder (traceRoot , asyncState );
238
+ return new AsyncDisableTrace (traceRoot , spanRecorder , spanEventRecorder , asyncState );
218
239
}
219
240
220
241
private ActiveTraceHandle registerActiveTrace (TraceRoot traceRoot ) {
0 commit comments