Skip to content

Commit

Permalink
[#9575] Refactor DefaultTrace.close()
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Jan 9, 2023
1 parent 5392242 commit 44466a8
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public AsyncDefaultTrace(Span span,
SpanRecorder spanRecorder,
WrappedSpanEventRecorder wrappedSpanEventRecorder,
AsyncState asyncState) {
super(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, null, null);
super(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, CloseListener.EMPTY);
this.asyncState = Objects.requireNonNull(asyncState, "asyncState");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.navercorp.pinpoint.profiler.context;

public interface CloseListener {
void close(Span span);

CloseListener EMPTY = new CloseListener() {
@Override
public void close(Span span) {
}
};

}
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,8 @@ public Trace continueTraceObject(final TraceId traceId) {
final SpanRecorder spanRecorder = recorderFactory.newSpanRecorder(span);
final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory.newWrappedSpanEventRecorder(traceRoot);
final ActiveTraceHandle handle = registerActiveTrace(traceRoot);

return new DefaultTrace(span, callStack, storage, spanRecorder,
wrappedSpanEventRecorder, handle, uriStatStorage);
final CloseListener closeListener = new DefaultCloseListener(handle, uriStatStorage);
return new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, closeListener);
} else {
return newLocalTrace(state.nextId());
}
Expand Down Expand Up @@ -135,9 +134,8 @@ Trace newTraceObject(TraceSampler.State state) {
final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory.newWrappedSpanEventRecorder(traceRoot);

final ActiveTraceHandle handle = registerActiveTrace(traceRoot);

return new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder,
handle, uriStatStorage);
final CloseListener closeListener = new DefaultCloseListener(handle, uriStatStorage);
return new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, closeListener);
} else {
return newLocalTrace(state.nextId());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.navercorp.pinpoint.profiler.context;

import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle;
import com.navercorp.pinpoint.profiler.context.id.Shared;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage;

import javax.annotation.Nullable;

public class DefaultCloseListener implements CloseListener {

@Nullable
private final ActiveTraceHandle activeTraceHandle;
@Nullable
private final UriStatStorage uriStatStorage;

public DefaultCloseListener(ActiveTraceHandle activeTraceHandle, UriStatStorage uriStatStorage) {
this.activeTraceHandle = activeTraceHandle;
this.uriStatStorage = uriStatStorage;
}

@Override
public void close(Span span) {
final long end = span.getStartTime() + span.getElapsedTime();
recordUriTemplate(span, end);
purgeActiveTrace(end);
}


private void recordUriTemplate(Span span, long afterTime) {
if (uriStatStorage == null) {
return;
}

TraceRoot traceRoot = span.getTraceRoot();
Shared shared = traceRoot.getShared();
String uriTemplate = shared.getUriTemplate();
long traceStartTime = traceRoot.getTraceStartTime();

boolean status = getStatus(shared.getErrorCode());
uriStatStorage.store(uriTemplate, status, traceStartTime, afterTime);
}

private boolean getStatus(int errorCode) {
if (errorCode == 0) {
return true;
}
return false;
}

private void purgeActiveTrace(long currentTime) {
final ActiveTraceHandle copy = this.activeTraceHandle;
if (copy != null) {
copy.purge(currentTime);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,13 @@
import com.navercorp.pinpoint.bootstrap.context.scope.TraceScope;
import com.navercorp.pinpoint.common.annotations.VisibleForTesting;
import com.navercorp.pinpoint.exception.PinpointException;
import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle;
import com.navercorp.pinpoint.profiler.context.id.Shared;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
import com.navercorp.pinpoint.profiler.context.recorder.WrappedSpanEventRecorder;
import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool;
import com.navercorp.pinpoint.profiler.context.storage.Storage;
import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.annotation.Nullable;
import java.util.Objects;

/**
Expand All @@ -58,20 +54,17 @@ public class DefaultTrace implements Trace {
private DefaultTraceScopePool scopePool;

private final Span span;
@Nullable
private final ActiveTraceHandle activeTraceHandle;
@Nullable
private final UriStatStorage uriStatStorage;

private final CloseListener closeListener;
public DefaultTrace(Span span, CallStack<SpanEvent> callStack, Storage storage,
SpanRecorder spanRecorder, WrappedSpanEventRecorder wrappedSpanEventRecorder) {
this(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, null, null);
this(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, CloseListener.EMPTY);
}

public DefaultTrace(Span span, CallStack<SpanEvent> callStack, Storage storage,
SpanRecorder spanRecorder, WrappedSpanEventRecorder wrappedSpanEventRecorder,
ActiveTraceHandle activeTraceHandle,
UriStatStorage uriStatStorage) {
SpanRecorder spanRecorder,
WrappedSpanEventRecorder wrappedSpanEventRecorder,
CloseListener closeListener) {

this.span = Objects.requireNonNull(span, "span");
this.callStack = Objects.requireNonNull(callStack, "callStack");
Expand All @@ -80,8 +73,7 @@ public DefaultTrace(Span span, CallStack<SpanEvent> callStack, Storage storage,
this.spanRecorder = Objects.requireNonNull(spanRecorder, "spanRecorder");
this.wrappedSpanEventRecorder = Objects.requireNonNull(wrappedSpanEventRecorder, "wrappedSpanEventRecorder");

this.activeTraceHandle = activeTraceHandle;
this.uriStatStorage = uriStatStorage;
this.closeListener = closeListener;

setCurrentThread();
}
Expand Down Expand Up @@ -202,39 +194,10 @@ public void close() {
logSpan(span);
}


this.storage.close();
purgeActiveTrace(afterTime);
recordUriTemplate(afterTime);
}

private void recordUriTemplate(long afterTime) {
if (uriStatStorage == null) {
return;
}

TraceRoot traceRoot = this.getTraceRoot();
Shared shared = traceRoot.getShared();
String uriTemplate = shared.getUriTemplate();
long traceStartTime = traceRoot.getTraceStartTime();

boolean status = getStatus(shared.getErrorCode());
uriStatStorage.store(uriTemplate, status, traceStartTime, afterTime);
this.closeListener.close(span);
}

private boolean getStatus(int errorCode) {
if (errorCode == 0) {
return true;
}
return false;
}

private void purgeActiveTrace(long currentTime) {
final ActiveTraceHandle copy = this.activeTraceHandle;
if (copy != null) {
copy.purge(currentTime);
}
}

void flush() {
this.storage.flush();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,13 @@
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.profiler.context.active.ActiveTraceHandle;
import com.navercorp.pinpoint.profiler.context.errorhandler.BypassErrorHandler;
import com.navercorp.pinpoint.profiler.context.errorhandler.IgnoreErrorHandler;
import com.navercorp.pinpoint.profiler.context.id.Shared;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
import com.navercorp.pinpoint.profiler.context.recorder.DefaultSpanRecorder;
import com.navercorp.pinpoint.profiler.context.recorder.WrappedSpanEventRecorder;
import com.navercorp.pinpoint.profiler.context.storage.Storage;
import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage;
import com.navercorp.pinpoint.profiler.logging.Log4j2LoggerBinderInitializer;
import com.navercorp.pinpoint.profiler.metadata.SqlMetaDataService;
import com.navercorp.pinpoint.profiler.metadata.StringMetaDataService;
Expand Down Expand Up @@ -156,12 +154,11 @@ private Trace newTrace(final int maxCallStackDepth) {
SpanFactory spanFactory = new DefaultSpanFactory();

Storage storage = mock(Storage.class);
UriStatStorage uriStatStorage = mock(UriStatStorage.class);

final Span span = spanFactory.newSpan(traceRoot);
final SpanRecorder spanRecorder = new DefaultSpanRecorder(span, stringMetaDataService, sqlMetaDataService, errorHandler);
final WrappedSpanEventRecorder wrappedSpanEventRecorder = new WrappedSpanEventRecorder(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaDataService, errorHandler);

return new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, ActiveTraceHandle.EMPTY_HANDLE, uriStatStorage);
return new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, CloseListener.EMPTY);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,13 @@
import com.navercorp.pinpoint.bootstrap.context.SpanRecorder;
import com.navercorp.pinpoint.bootstrap.context.Trace;
import com.navercorp.pinpoint.bootstrap.context.TraceId;
import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle;
import com.navercorp.pinpoint.profiler.context.errorhandler.BypassErrorHandler;
import com.navercorp.pinpoint.profiler.context.errorhandler.IgnoreErrorHandler;
import com.navercorp.pinpoint.profiler.context.id.DefaultTraceId;
import com.navercorp.pinpoint.profiler.context.id.TraceRoot;
import com.navercorp.pinpoint.profiler.context.recorder.DefaultSpanRecorder;
import com.navercorp.pinpoint.profiler.context.recorder.WrappedSpanEventRecorder;
import com.navercorp.pinpoint.profiler.context.storage.Storage;
import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage;
import com.navercorp.pinpoint.profiler.metadata.SqlMetaDataService;
import com.navercorp.pinpoint.profiler.metadata.StringMetaDataService;
import org.apache.logging.log4j.LogManager;
Expand Down Expand Up @@ -76,12 +74,9 @@ public void trace() {
SpanRecorder spanRecorder = new DefaultSpanRecorder(span, stringMetaDataService, sqlMetaDataService, errorHandler);
WrappedSpanEventRecorder wrappedSpanEventRecorder = new WrappedSpanEventRecorder(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaDataService, errorHandler);

AsyncContextFactory asyncContextFactory = mock(AsyncContextFactory.class);

Storage storage = mock(Storage.class);
UriStatStorage uriStatStorage = mock(UriStatStorage.class);

Trace trace = new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, ActiveTraceHandle.EMPTY_HANDLE, uriStatStorage);
Trace trace = new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, CloseListener.EMPTY);
trace.traceBlockBegin();

// get data form db
Expand Down Expand Up @@ -110,13 +105,9 @@ public void popEventTest() {
WrappedSpanEventRecorder wrappedSpanEventRecorder = new WrappedSpanEventRecorder(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaDataService, errorHandler);


AsyncContextFactory asyncContextFactory = mock(AsyncContextFactory.class);

Storage storage = mock(Storage.class);
UriStatStorage uriStatStorage = mock(UriStatStorage.class);

Trace trace = new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder,
ActiveTraceHandle.EMPTY_HANDLE, uriStatStorage);
Trace trace = new DefaultTrace(span, callStack, storage, spanRecorder, wrappedSpanEventRecorder, CloseListener.EMPTY);

trace.close();

Expand Down

0 comments on commit 44466a8

Please sign in to comment.