Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Jan 4, 2023
1 parent 1c44228 commit 0d25486
Show file tree
Hide file tree
Showing 16 changed files with 174 additions and 63 deletions.
Expand Up @@ -18,6 +18,7 @@

import com.navercorp.pinpoint.bootstrap.context.AsyncContext;
import com.navercorp.pinpoint.bootstrap.context.AsyncState;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;

/**
Expand All @@ -31,4 +32,5 @@ public interface AsyncContextFactory {

AsyncContext newAsyncContext(TraceRoot traceRoot, AsyncId asyncId, boolean canSampled, AsyncState asyncState);

AsyncContext newDisableAsyncContext(LocalTraceRoot traceRoot);
}
Expand Up @@ -19,6 +19,7 @@
import com.navercorp.pinpoint.bootstrap.context.Trace;
import com.navercorp.pinpoint.bootstrap.context.TraceId;
import com.navercorp.pinpoint.common.annotations.InterfaceAudience;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;

/**
Expand All @@ -34,7 +35,9 @@ public interface BaseTraceFactory {
@InterfaceAudience.LimitedPrivate("vert.x")
Trace continueAsyncTraceObject(TraceId traceId);

Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean canSampled);
Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId);

Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot);

Trace newTraceObject();

Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.navercorp.pinpoint.bootstrap.context.AsyncState;
import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor;
import com.navercorp.pinpoint.profiler.context.id.AsyncIdGenerator;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
import com.navercorp.pinpoint.profiler.context.method.PredefinedMethodDescriptorRegistry;

Expand Down Expand Up @@ -71,5 +72,9 @@ public AsyncContext newAsyncContext(TraceRoot traceRoot, AsyncId asyncId, boolea
return new StatefulAsyncContext(asyncTraceContext, traceRoot, asyncId, asyncMethodApiId, asyncState, canSampled);
}

@Override
public AsyncContext newDisableAsyncContext(LocalTraceRoot traceRoot) {
return new DisableAsyncContext(traceRoot, asyncTraceContext);
}

}
Expand Up @@ -18,11 +18,13 @@

import com.google.inject.Provider;
import com.navercorp.pinpoint.bootstrap.context.Trace;
import java.util.Objects;
import com.navercorp.pinpoint.exception.PinpointException;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Objects;


/**
Expand Down Expand Up @@ -54,8 +56,21 @@ public Reference<Trace> continueAsyncContextTraceObject(TraceRoot traceRoot, Loc

@Override
public Trace newAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean canSampled) {
if (canSampled) {
return continueAsyncContextTraceObject(traceRoot, localAsyncId);
} else {
return continueDisableAsyncContextTraceObject(traceRoot);
}
}

public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId) {
final BaseTraceFactory baseTraceFactory = baseTraceFactoryProvider.get();
return baseTraceFactory.continueAsyncContextTraceObject(traceRoot, localAsyncId);
}

public Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot) {
final BaseTraceFactory baseTraceFactory = baseTraceFactoryProvider.get();
return baseTraceFactory.continueAsyncContextTraceObject(traceRoot, localAsyncId, canSampled);
return baseTraceFactory.continueDisableAsyncContextTraceObject(traceRoot);
}


Expand Down
Expand Up @@ -17,6 +17,7 @@
package com.navercorp.pinpoint.profiler.context;

import com.navercorp.pinpoint.bootstrap.context.AsyncState;
import com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder;
import com.navercorp.pinpoint.bootstrap.context.SpanRecorder;
import com.navercorp.pinpoint.bootstrap.context.Trace;
import com.navercorp.pinpoint.bootstrap.context.TraceId;
Expand Down Expand Up @@ -148,21 +149,26 @@ Trace newTraceObject(TraceSampler.State state) {

// internal async trace.
@Override
public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean sampling) {
if (sampling) {
final SpanChunkFactory spanChunkFactory = new AsyncSpanChunkFactory(traceRoot, localAsyncId);
final Storage storage = storageFactory.createStorage(spanChunkFactory);
public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId) {
final boolean sampling = true;
final SpanChunkFactory spanChunkFactory = new AsyncSpanChunkFactory(traceRoot, localAsyncId);
final Storage storage = storageFactory.createStorage(spanChunkFactory);

final CallStack<SpanEvent> callStack = callStackFactory.newCallStack();
final CallStack<SpanEvent> callStack = callStackFactory.newCallStack();

final SpanRecorder spanRecorder = recorderFactory.newTraceRootSpanRecorder(traceRoot, sampling);
final SpanRecorder spanRecorder = recorderFactory.newTraceRootSpanRecorder(traceRoot, sampling);

final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory.newWrappedSpanEventRecorder(traceRoot);
final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory.newWrappedSpanEventRecorder(traceRoot);

return new AsyncChildTrace(traceRoot, callStack, storage, sampling, spanRecorder, wrappedSpanEventRecorder, localAsyncId);
} else {
return new DisableAsyncChildTrace(traceRoot, localAsyncId);
}
return new AsyncChildTrace(traceRoot, callStack, storage, sampling, spanRecorder, wrappedSpanEventRecorder, localAsyncId);
}

@Override
public Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot) {
final AsyncState asyncState = new DisableAsyncState();
SpanRecorder spanRecorder = recorderFactory.newDisableSpanRecorder(traceRoot);
SpanEventRecorder spanEventRecorder = recorderFactory.newDisableSpanEventRecorder(traceRoot, asyncState);
return new DisableAsyncChildTrace(traceRoot, spanRecorder, spanEventRecorder);
}


Expand All @@ -181,7 +187,7 @@ public Trace continueAsyncTraceObject(final TraceId traceId) {
final CallStack<SpanEvent> callStack = callStackFactory.newCallStack();

final ActiveTraceHandle handle = registerActiveTrace(traceRoot);
final SpanAsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory);
final ListenableAsyncState.AsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory);
final AsyncState asyncState = new ListenableAsyncState(traceRoot, asyncStateListener, handle, uriStatStorage);

final SpanRecorder spanRecorder = recorderFactory.newSpanRecorder(span, traceId.isRoot(), sampling);
Expand Down Expand Up @@ -220,7 +226,7 @@ Trace newAsyncTraceObject(TraceSampler.State state) {
final CallStack<SpanEvent> callStack = callStackFactory.newCallStack();

final ActiveTraceHandle handle = registerActiveTrace(traceRoot);
final SpanAsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory);
final ListenableAsyncState.AsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory);
final AsyncState asyncState = new ListenableAsyncState(traceRoot, asyncStateListener, handle, uriStatStorage);


Expand All @@ -247,9 +253,10 @@ public Trace disableSampling() {
private Trace newLocalTrace(long nextDisabledId) {
final LocalTraceRoot traceRoot = traceRootFactory.newDisableTraceRoot(nextDisabledId);
final SpanRecorder spanRecorder = recorderFactory.newDisableSpanRecorder(traceRoot);
final SpanEventRecorder spanEventRecorder = recorderFactory.newDisableSpanEventRecorder(traceRoot, new DisableAsyncState());
final long traceStartTime = traceRoot.getTraceStartTime();
final long threadId = Thread.currentThread().getId();
final ActiveTraceHandle activeTraceHandle = registerActiveTrace(nextDisabledId, traceStartTime, threadId);
return new DisableTrace(traceRoot, spanRecorder, activeTraceHandle, uriStatStorage);
return new DisableTrace(traceRoot, spanRecorder, spanEventRecorder, activeTraceHandle, uriStatStorage);
}
}
Expand Up @@ -22,7 +22,6 @@
import com.navercorp.pinpoint.bootstrap.context.TraceId;
import com.navercorp.pinpoint.bootstrap.context.scope.TraceScope;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;
import com.navercorp.pinpoint.profiler.context.recorder.DisableSpanEventRecorder;
import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool;

import java.util.Objects;
Expand All @@ -35,14 +34,15 @@ public class DisableAsyncChildTrace implements Trace {
private DefaultTraceScopePool scopePool;

private final LocalTraceRoot traceRoot;
private final LocalAsyncId localAsyncId;
private int depth;

private DisableSpanEventRecorder spanEventRecorder;
private final SpanRecorder spanRecorder;
private final SpanEventRecorder spanEventRecorder;

public DisableAsyncChildTrace(final LocalTraceRoot traceRoot, final LocalAsyncId localAsyncId) {
public DisableAsyncChildTrace(final LocalTraceRoot traceRoot, SpanRecorder spanRecorder, SpanEventRecorder spanEventRecorder) {
this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot");
this.localAsyncId = Objects.requireNonNull(localAsyncId, "localAsyncId");
this.spanRecorder = Objects.requireNonNull(spanRecorder, "spanRecorder");
this.spanEventRecorder = Objects.requireNonNull(spanEventRecorder, "spanEventRecorder");
}

@Override
Expand All @@ -68,9 +68,6 @@ public void traceBlockEnd(int stackId) {
}

private SpanEventRecorder getSpanEventRecorder() {
if (spanEventRecorder == null) {
spanEventRecorder = new DisableSpanEventRecorder(traceRoot);
}
return spanEventRecorder;
}

Expand All @@ -84,7 +81,7 @@ private void pop() {

@Override
public boolean isRootStack() {
throw new UnsupportedOperationException(UNSUPPORTED_OPERATION);
return depth == 0;
}

@Override
Expand Down Expand Up @@ -118,7 +115,7 @@ public boolean canSampled() {

@Override
public boolean isRoot() {
return this.getTraceId().isRoot();
return false;
}

@Override
Expand All @@ -128,12 +125,12 @@ public boolean isAsync() {

@Override
public SpanRecorder getSpanRecorder() {
return null;
return spanRecorder;
}

@Override
public SpanEventRecorder currentSpanEventRecorder() {
return null;
return spanEventRecorder;
}

@Override
Expand Down Expand Up @@ -170,7 +167,6 @@ public TraceScope addScope(String name) {
public String toString() {
return "DisableAsyncChildTrace{" +
"traceRoot=" + traceRoot +
", localAsyncId=" + localAsyncId +
'}';
}
}
@@ -0,0 +1,36 @@
package com.navercorp.pinpoint.profiler.context;

import com.navercorp.pinpoint.bootstrap.context.AsyncContext;
import com.navercorp.pinpoint.bootstrap.context.Trace;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;

import java.util.Objects;

/**
* @author Woonduk Kang(emeroad)
*/
public class DisableAsyncContext implements AsyncContext {
private final LocalTraceRoot traceRoot;
private final AsyncTraceContext asyncTraceContext;

public DisableAsyncContext(LocalTraceRoot traceRoot, AsyncTraceContext asyncTraceContext) {
this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot");
this.asyncTraceContext = Objects.requireNonNull(asyncTraceContext, "asyncTraceContext");
}

@Override
public Trace continueAsyncTraceObject() {

return null;
}

@Override
public Trace currentAsyncTraceObject() {
return null;
}

@Override
public void close() {
asyncTraceContext.removeTraceObject();
}
}
@@ -0,0 +1,23 @@
package com.navercorp.pinpoint.profiler.context;

import com.navercorp.pinpoint.bootstrap.context.AsyncState;

/**
* @author Woonduk Kang(emeroad)
*/
public class DisableAsyncState implements AsyncState {
@Override
public void setup() {

}

@Override
public boolean await() {
return false;
}

@Override
public void finish() {

}
}
Expand Up @@ -24,7 +24,6 @@
import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle;
import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot;
import com.navercorp.pinpoint.profiler.context.id.Shared;
import com.navercorp.pinpoint.profiler.context.recorder.DisableSpanEventRecorder;
import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool;
import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage;

Expand All @@ -48,13 +47,14 @@ public class DisableTrace implements Trace {

private int depth;

private DisableSpanEventRecorder spanEventRecorder;
private SpanEventRecorder spanEventRecorder;

private boolean closed = false;

public DisableTrace(LocalTraceRoot traceRoot, SpanRecorder spanRecorder, ActiveTraceHandle handle, UriStatStorage uriStatStorage) {
public DisableTrace(LocalTraceRoot traceRoot, SpanRecorder spanRecorder, SpanEventRecorder spanEventRecorder, ActiveTraceHandle handle, UriStatStorage uriStatStorage) {
this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot");
this.spanRecorder = Objects.requireNonNull(spanRecorder, "spanRecorder");
this.spanEventRecorder = Objects.requireNonNull(spanEventRecorder, "spanEventRecorder");

this.handle = Objects.requireNonNull(handle, "handle");
this.uriStatStorage = Objects.requireNonNull(uriStatStorage, "uriStatStorage");
Expand All @@ -79,7 +79,7 @@ public SpanEventRecorder traceBlockBegin() {
@Override
public SpanEventRecorder traceBlockBegin(int stackId) {
push();
return getSpanEventRecorder();
return this.spanEventRecorder;
}

@Override
Expand All @@ -92,13 +92,6 @@ public void traceBlockEnd(int stackId) {
pop();
}

private SpanEventRecorder getSpanEventRecorder() {
if (spanEventRecorder == null) {
spanEventRecorder = new DisableSpanEventRecorder(traceRoot);
}
return spanEventRecorder;
}

private int push() {
return this.depth++;
}
Expand Down Expand Up @@ -131,7 +124,7 @@ public boolean isAsync() {

@Override
public boolean isRootStack() {
throw new UnsupportedOperationException(UNSUPPORTED_OPERATION);
return depth == 0;
}


Expand Down Expand Up @@ -176,7 +169,7 @@ public SpanRecorder getSpanRecorder() {

@Override
public SpanEventRecorder currentSpanEventRecorder() {
return getSpanEventRecorder();
return spanEventRecorder;
}


Expand Down

0 comments on commit 0d25486

Please sign in to comment.