优化traces

This commit is contained in:
redkale
2023-07-05 21:52:20 +08:00
parent 1ef6d51497
commit 78b1285b37
6 changed files with 28 additions and 41 deletions

View File

@@ -90,7 +90,7 @@ public class HttpMessageClientProcessor implements MessageClientProcessor {
private void execute(final MessageRecord message, final Runnable callback) { private void execute(final MessageRecord message, final Runnable callback) {
HttpMessageRequest request = null; HttpMessageRequest request = null;
try { try {
Traces.currentTraceid(message.getTraceid()); Traces.computeIfAbsent(message.getTraceid());
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
long cha = now - message.createTime; long cha = now - message.createTime;
long e = now - startTime; long e = now - startTime;

View File

@@ -69,7 +69,7 @@ public class SncpMessageClientProcessor implements MessageClientProcessor {
private void execute(final MessageRecord message, final Runnable callback) { private void execute(final MessageRecord message, final Runnable callback) {
SncpMessageResponse response = null; SncpMessageResponse response = null;
try { try {
Traces.currentTraceid(message.getTraceid()); Traces.computeIfAbsent(message.getTraceid());
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
long cha = now - message.createTime; long cha = now - message.createTime;
long e = now - starttime; long e = now - starttime;

View File

@@ -103,7 +103,8 @@ public class Context {
this.bsonFactory = BsonFactory.root(); this.bsonFactory = BsonFactory.root();
} }
protected void executeDispatch(Request request, Response response) { protected final void executeDispatch(Request request, Response response) {
request.traceid = Traces.computeIfAbsent(request.getTraceid());
dispatcher.dispatch(request, response); dispatcher.dispatch(request, response);
} }
@@ -112,7 +113,7 @@ public class Context {
response.updateNonBlocking(false); response.updateNonBlocking(false);
workExecutor.execute(() -> { workExecutor.execute(() -> {
try { try {
Traces.computeCurrTraceid(request.getTraceid()); request.traceid = Traces.computeIfAbsent(request.getTraceid());
servlet.execute(request, response); servlet.execute(request, response);
} catch (Throwable t) { } catch (Throwable t) {
response.context.logger.log(Level.WARNING, "Execute servlet occur exception. request = " + request, t); response.context.logger.log(Level.WARNING, "Execute servlet occur exception. request = " + request, t);
@@ -121,7 +122,7 @@ public class Context {
}); });
} else { } else {
try { try {
Traces.computeCurrTraceid(request.getTraceid()); request.traceid = Traces.computeIfAbsent(request.getTraceid());
servlet.execute(request, response); servlet.execute(request, response);
} catch (Throwable t) { } catch (Throwable t) {
response.context.logger.log(Level.WARNING, "Execute servlet occur exception. request = " + request, t); response.context.logger.log(Level.WARNING, "Execute servlet occur exception. request = " + request, t);

View File

@@ -13,7 +13,7 @@ import java.util.function.*;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.redkale.boot.Application; import org.redkale.boot.Application;
import org.redkale.util.*; import org.redkale.util.AnyValue;
/** /**
* 根Servlet 一个Server只能存在一个根Servlet * 根Servlet 一个Server只能存在一个根Servlet
@@ -291,7 +291,6 @@ public abstract class DispatcherServlet<K extends Serializable, C extends Contex
public final void dispatch(final R request, final P response) { public final void dispatch(final R request, final P response) {
try { try {
Traces.computeCurrTraceid(request.getTraceid());
request.prepare(); request.prepare();
response.filter = this.headFilter; response.filter = this.headFilter;
response.servlet = this; response.servlet = this;

View File

@@ -125,17 +125,17 @@ public abstract class ClientCodec<R extends ClientRequest, P> implements Complet
if (exc != null) { if (exc != null) {
if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE
if (workThread.inIO()) { if (workThread.inIO()) {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.completeExceptionally(exc); respFuture.completeExceptionally(exc);
} else { } else {
workThread.execute(() -> { workThread.execute(() -> {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.completeExceptionally(exc); respFuture.completeExceptionally(exc);
}); });
} }
} else { } else {
workThread.runWork(() -> { workThread.runWork(() -> {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.completeExceptionally(exc); respFuture.completeExceptionally(exc);
}); });
} }
@@ -143,17 +143,17 @@ public abstract class ClientCodec<R extends ClientRequest, P> implements Complet
final P rs = request.respTransfer == null ? message : (P) request.respTransfer.apply(message); final P rs = request.respTransfer == null ? message : (P) request.respTransfer.apply(message);
if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE
if (workThread.inIO()) { if (workThread.inIO()) {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.complete(rs); respFuture.complete(rs);
} else { } else {
workThread.execute(() -> { workThread.execute(() -> {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.complete(rs); respFuture.complete(rs);
}); });
} }
} else { } else {
workThread.runWork(() -> { workThread.runWork(() -> {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.complete(rs); respFuture.complete(rs);
}); });
} }
@@ -161,17 +161,17 @@ public abstract class ClientCodec<R extends ClientRequest, P> implements Complet
} catch (Throwable t) { } catch (Throwable t) {
if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE
if (workThread.inIO()) { if (workThread.inIO()) {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.completeExceptionally(t); respFuture.completeExceptionally(t);
} else { } else {
workThread.execute(() -> { workThread.execute(() -> {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.completeExceptionally(t); respFuture.completeExceptionally(t);
}); });
} }
} else { } else {
workThread.runWork(() -> { workThread.runWork(() -> {
Traces.currentTraceid(request.traceid); Traces.computeIfAbsent(request.traceid);
respFuture.completeExceptionally(t); respFuture.completeExceptionally(t);
}); });
} }

View File

@@ -30,33 +30,20 @@ public class Traces {
return enable ? tidSupplier.get() : null; return enable ? tidSupplier.get() : null;
} }
public static void computeCurrTraceid(String requestTraceid) {
if (enable) {
if (requestTraceid == null) {
localTrace.set(tidSupplier.get());
} else {
localTrace.set(requestTraceid);
}
}
}
// public static String loadTraceid() {
// if (!enable) return null;
// String traceid = localTrace.get();
// if (traceid == null) {
// traceid = tidSupplier.get();
// localTrace.set(traceid);
// }
// return traceid;
// }
public static void currentTraceid(String traceid) {
if (enable) {
localTrace.set(traceid);
}
}
public static String currentTraceid() { public static String currentTraceid() {
return enable ? localTrace.get() : null; return enable ? localTrace.get() : null;
} }
public static String computeIfAbsent(String requestTraceid) {
if (enable) {
String rs = requestTraceid;
if (rs == null || rs.isEmpty()) {
rs = tidSupplier.get();
}
localTrace.set(rs);
return rs;
}
return requestTraceid;
}
} }