Skip to content

Commit 5488413

Browse files
2565984265赵迪
andauthored
Feature/develop/zd/upgreate jdk 17 (#105)
* upgrate:升级jdk17 * fix(agent-okhttp): 修复 wrapResponseAppMetric 可能返回 null 的问题 * fix(agent-okhttp): 重构请求头注入逻辑 - 修改 AsyncCallInterceptor 和 RealCallInterceptor 中的请求头注入方式 - 优化 CallInterceptorUtils 中的 injectRequestHeader 方法,返回新的 Request 对象 - 确保在拦截器中使用更新后的 Request 对象 - 优化代码结构,提高可读性和可维护性 --------- Co-authored-by: 赵迪 <[email protected]>
1 parent 49a5627 commit 5488413

File tree

24 files changed

+135
-115
lines changed

24 files changed

+135
-115
lines changed

agent-core/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1818
<jetty.version>9.4.2.v20170220</jetty.version>
1919
<grpc.version>1.10.0</grpc.version>
20-
<bytebuddy.version>1.10.7</bytebuddy.version>
20+
<bytebuddy.version>1.14.11</bytebuddy.version>
2121
<shade.package>cloud.erda.agent.dependencies</shade.package>
2222
<shade.com.lmax.disruptor.source>com.lmax.disruptor</shade.com.lmax.disruptor.source>
2323
<shade.com.lmax.disruptor.target>${shade.package}.${shade.com.lmax.disruptor.source}
@@ -56,7 +56,6 @@
5656
<groupId>net.bytebuddy</groupId>
5757
<artifactId>byte-buddy-agent</artifactId>
5858
<version>${bytebuddy.version}</version>
59-
<scope>test</scope>
6059
</dependency>
6160
<dependency>
6261
<groupId>com.lmax</groupId>

agent-main/src/main/java/cloud/erda/agent/JavaAgent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ private static class Transformer implements AgentBuilder.Transformer {
111111
}
112112

113113
@Override
114-
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule module) {
114+
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription,
115+
ClassLoader classLoader, JavaModule module, ProtectionDomain protectionDomain) {
115116
List<AbstractClassEnhancePluginDefine> pluginDefines = pluginFinder.find(typeDescription, classLoader);
116117
if (pluginDefines.size() > 0) {
117118
DynamicType.Builder<?> newBuilder = builder;

agent-plugins/agent-log-plugins/agent-log-commons/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
<dependencies>
1515
<dependency>
16-
<groupId>javax.servlet</groupId>
17-
<artifactId>javax.servlet-api</artifactId>
18-
<version>3.0.1</version>
16+
<groupId>jakarta.servlet</groupId>
17+
<artifactId>jakarta.servlet-api</artifactId>
18+
<version>6.0.0</version>
1919
<scope>provided</scope>
2020
</dependency>
2121
</dependencies>

agent-plugins/agent-log-plugins/agent-log-commons/src/main/java/cloud/erda/agent/plugin/log/error/ErrorEventBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
import cloud.erda.agent.core.utils.Constants;
2626
import cloud.erda.agent.core.utils.DateTime;
2727
import cloud.erda.agent.core.utils.UUIDGenerator;
28+
import jakarta.servlet.http.Cookie;
29+
import jakarta.servlet.http.HttpServletRequest;
2830

29-
import javax.servlet.http.Cookie;
30-
import javax.servlet.http.HttpServletRequest;
3131
import java.io.BufferedReader;
3232
import java.io.IOException;
3333
import java.util.*;

agent-plugins/agent-okhttp-plugins/agent-okhttp-common/src/main/java/cloud/erda/agent/plugin/okhttp/common/AsyncCallInterceptor.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,27 @@ public void onConstruct(Object objInst, Object[] allArguments) {
5959
@Override
6060
public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult result) throws Throwable {
6161
EnhanceRequiredInfo enhanceRequiredInfo = (EnhanceRequiredInfo) ((DynamicFieldEnhancedInstance) context.getInstance()).getDynamicField();
62-
Request request = (Request) ((DynamicFieldEnhancedInstance) enhanceRequiredInfo.getRealCallEnhance()).getDynamicField();
62+
DynamicFieldEnhancedInstance realCallInstance = (DynamicFieldEnhancedInstance) enhanceRequiredInfo.getRealCallEnhance();
63+
Request request = (Request) realCallInstance.getDynamicField();
6364

6465
Tracer tracer = TracerManager.currentTracer();
6566
TracerSnapshot snapshot = enhanceRequiredInfo.getTracerSnapshot();
6667
Span span = tracer.attach(snapshot).span();
6768

6869
CallInterceptorUtils.wrapRequestSpan(span, request);
69-
CallInterceptorUtils.injectRequestHeader(request, span);
7070

71-
TransactionMetricBuilder transactionMetricBuilder = CallInterceptorUtils.createRequestAppMetric(request);
71+
// 构造新 request 注入 header
72+
Request newRequest = CallInterceptorUtils.injectRequestHeader(request, span);
73+
realCallInstance.setDynamicField(newRequest); // 重新设置到 dynamicField
74+
75+
// 创建 MetricBuilder 并挂载上下文
76+
TransactionMetricBuilder transactionMetricBuilder = CallInterceptorUtils.createRequestAppMetric(newRequest);
7277
if (transactionMetricBuilder != null) {
7378
tracer.context().setAttachment(Constants.Keys.METRIC_BUILDER, transactionMetricBuilder);
7479
}
7580
}
7681

82+
7783
@Override
7884
public Object afterMethod(IMethodInterceptContext context, Object ret) throws Throwable {
7985
TransactionMetricBuilder builder = TracerManager.currentTracer().context().getAttachment(Constants.Keys.METRIC_BUILDER);

agent-plugins/agent-okhttp-plugins/agent-okhttp-common/src/main/java/cloud/erda/agent/plugin/okhttp/common/CallInterceptorUtils.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ static TransactionMetricBuilder createRequestAppMetric(Request request) {
6868
}
6969

7070
static TransactionMetricBuilder wrapResponseAppMetric(TransactionMetricBuilder transactionMetricBuilder, Response response) {
71+
if (transactionMetricBuilder == null) {
72+
return null;
73+
}
74+
7175
if (response == null) {
7276
return transactionMetricBuilder;
7377
}
@@ -111,30 +115,25 @@ static void wrapResponseSpan(Span span, Response response) {
111115
span.tag(Constants.Tags.HTTP_STATUS, String.valueOf(statusCode));
112116
}
113117

114-
static void injectRequestHeader(Request request, Span span) throws Throwable {
118+
static Request injectRequestHeader(Request request, Span span) throws Throwable {
115119
Tracer tracer = TracerManager.currentTracer();
116120
span.getContext().getBaggage().putAll(TransactionMetricContext.instance);
117-
Map<String, String> map = new HashMap<String, String>(16);
121+
Map<String, String> map = new HashMap<>(16);
118122
TextMapCarrier carrier = new TextMapCarrier(map);
119123
tracer.inject(span.getContext(), carrier);
120124

121-
Field headersField = Request.class.getDeclaredField("headers");
122-
Field modifiersField = Field.class.getDeclaredField("modifiers");
123-
modifiersField.setAccessible(true);
124-
modifiersField.setInt(headersField, headersField.getModifiers() & ~Modifier.FINAL);
125-
126-
headersField.setAccessible(true);
127125
Headers.Builder headerBuilder = request.headers().newBuilder();
128126
for (Map.Entry<String, String> entry : map.entrySet()) {
129-
if (Strings.isEmpty(entry.getKey())) {
130-
continue;
131-
}
127+
if (Strings.isEmpty(entry.getKey())) continue;
132128
if (Strings.isEmpty(entry.getValue())) {
133129
headerBuilder.removeAll(entry.getKey());
134-
continue;
130+
} else {
131+
headerBuilder.add(entry.getKey(), entry.getValue());
135132
}
136-
headerBuilder.add(entry.getKey(), entry.getValue());
137133
}
138-
headersField.set(request, headerBuilder.build());
134+
135+
return request.newBuilder().headers(headerBuilder.build()).build();
139136
}
137+
138+
140139
}

agent-plugins/agent-okhttp-plugins/agent-okhttp-common/src/main/java/cloud/erda/agent/plugin/okhttp/common/RealCallInterceptor.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,26 @@ public void onConstruct(Object objInst, Object[] allArguments) {
5757
*/
5858
@Override
5959
public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult result) throws Throwable {
60-
Request request = (Request) ((DynamicFieldEnhancedInstance)context.getInstance()).getDynamicField();
60+
Request request = (Request) ((DynamicFieldEnhancedInstance) context.getInstance()).getDynamicField();
6161

6262
Tracer tracer = TracerManager.currentTracer();
6363
SpanContext spanContext = tracer.active() != null ? tracer.active().span().getContext() : null;
6464
Span span = tracer.buildSpan("HTTP " + request.method()).childOf(spanContext).startActive().span();
6565

6666
CallInterceptorUtils.wrapRequestSpan(span, request);
67-
CallInterceptorUtils.injectRequestHeader(request, span);
6867

69-
TransactionMetricBuilder transactionMetricBuilder = CallInterceptorUtils.createRequestAppMetric(request);
68+
// 修改:获取新的带 header 的 request
69+
Request newRequest = CallInterceptorUtils.injectRequestHeader(request, span);
70+
71+
// 替换原始 request(必须设置回 context 实例的 dynamic field,否则后续仍旧使用旧 request)
72+
((DynamicFieldEnhancedInstance) context.getInstance()).setDynamicField(newRequest);
73+
74+
// Metric 构建
75+
TransactionMetricBuilder transactionMetricBuilder = CallInterceptorUtils.createRequestAppMetric(newRequest);
7076
context.setAttachment(Constants.Keys.METRIC_BUILDER, transactionMetricBuilder);
7177
}
7278

79+
7380
/**
7481
* Get the status code from {@link Response}, when status code greater than 400, it means there was some errors in
7582
* the server. Finish the {@link Span}.
@@ -82,9 +89,10 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
8289
@Override
8390
public Object afterMethod(IMethodInterceptContext context, Object ret) throws Throwable {
8491
Response response = (Response) ret;
92+
8593
TransactionMetricBuilder transactionMetricBuilder = context.getAttachment(Constants.Keys.METRIC_BUILDER);
86-
transactionMetricBuilder = CallInterceptorUtils.wrapResponseAppMetric(transactionMetricBuilder, response);
8794
if (transactionMetricBuilder != null) {
95+
transactionMetricBuilder = CallInterceptorUtils.wrapResponseAppMetric(transactionMetricBuilder, response);
8896
MetricReporter.report(transactionMetricBuilder);
8997
}
9098

agent-plugins/agent-redisson-3.x-plugin/src/main/java/cloud/erda/agent/plugin/redisson/v3/CreateClientInterceptor.java

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -43,47 +43,54 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
4343

4444
@Override
4545
public Object afterMethod(IMethodInterceptContext context, Object ret) throws Throwable {
46-
ConnectionManager connectionManager = (ConnectionManager) context.getInstance();
47-
Config config = connectionManager.getCfg();
48-
49-
Object singleServerConfig = ReflectUtils.getObjectField(config, "singleServerConfig");
50-
Object sentinelServersConfig = ReflectUtils.getObjectField(config, "sentinelServersConfig");
51-
Object masterSlaveServersConfig = ReflectUtils.getObjectField(config, "masterSlaveServersConfig");
52-
Object clusterServersConfig = ReflectUtils.getObjectField(config, "clusterServersConfig");
53-
Object replicatedServersConfig = ReflectUtils.getObjectField(config, "replicatedServersConfig");
54-
55-
StringBuilder peer = new StringBuilder();
56-
DynamicFieldEnhancedInstance retInst = (DynamicFieldEnhancedInstance) ret;
57-
58-
if (singleServerConfig != null) {
59-
Object singleAddress = ReflectUtils.getObjectField(singleServerConfig, "address");
60-
peer.append(getPeer(singleAddress));
61-
retInst.setDynamicField(peer.toString());
62-
return ret;
63-
}
64-
if (sentinelServersConfig != null) {
65-
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(sentinelServersConfig, "sentinelAddresses"));
66-
retInst.setDynamicField(peer.toString());
67-
return ret;
68-
}
69-
if (masterSlaveServersConfig != null) {
70-
Object masterAddress = ReflectUtils.getObjectField(masterSlaveServersConfig, "masterAddress");
71-
peer.append(getPeer(masterAddress));
72-
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(masterSlaveServersConfig, "slaveAddresses"));
73-
retInst.setDynamicField(peer.toString());
74-
return ret;
75-
}
76-
if (clusterServersConfig != null) {
77-
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(clusterServersConfig, "nodeAddresses"));
78-
retInst.setDynamicField(peer.toString());
79-
return ret;
80-
}
81-
if (replicatedServersConfig != null) {
82-
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(replicatedServersConfig, "nodeAddresses"));
83-
retInst.setDynamicField(peer.toString());
46+
try {
47+
ConnectionManager connectionManager = (ConnectionManager) context.getInstance();
48+
Config config = (Config) ReflectUtils.getObjectField(connectionManager, "config");
49+
if (config == null) {
50+
return ret;
51+
}
52+
53+
Object singleServerConfig = ReflectUtils.getObjectField(config, "singleServerConfig");
54+
Object sentinelServersConfig = ReflectUtils.getObjectField(config, "sentinelServersConfig");
55+
Object masterSlaveServersConfig = ReflectUtils.getObjectField(config, "masterSlaveServersConfig");
56+
Object clusterServersConfig = ReflectUtils.getObjectField(config, "clusterServersConfig");
57+
Object replicatedServersConfig = ReflectUtils.getObjectField(config, "replicatedServersConfig");
58+
59+
StringBuilder peer = new StringBuilder();
60+
DynamicFieldEnhancedInstance retInst = (DynamicFieldEnhancedInstance) ret;
61+
62+
if (singleServerConfig != null) {
63+
Object singleAddress = ReflectUtils.getObjectField(singleServerConfig, "address");
64+
peer.append(getPeer(singleAddress));
65+
retInst.setDynamicField(peer.toString());
66+
return ret;
67+
}
68+
if (sentinelServersConfig != null) {
69+
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(sentinelServersConfig, "sentinelAddresses"));
70+
retInst.setDynamicField(peer.toString());
71+
return ret;
72+
}
73+
if (masterSlaveServersConfig != null) {
74+
Object masterAddress = ReflectUtils.getObjectField(masterSlaveServersConfig, "masterAddress");
75+
peer.append(getPeer(masterAddress));
76+
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(masterSlaveServersConfig, "slaveAddresses"));
77+
retInst.setDynamicField(peer.toString());
78+
return ret;
79+
}
80+
if (clusterServersConfig != null) {
81+
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(clusterServersConfig, "nodeAddresses"));
82+
retInst.setDynamicField(peer.toString());
83+
return ret;
84+
}
85+
if (replicatedServersConfig != null) {
86+
appendAddresses(peer, (Collection) ReflectUtils.getObjectField(replicatedServersConfig, "nodeAddresses"));
87+
retInst.setDynamicField(peer.toString());
88+
return ret;
89+
}
90+
} catch (Exception e) {
91+
// 如果获取配置失败,记录错误并返回原始对象
8492
return ret;
8593
}
86-
8794
return ret;
8895
}
8996

agent-plugins/agent-servlet-plugins/agent-jetty-servlet-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<name>agent-jetty-servlet-plugin</name>
1515

1616
<properties>
17-
<jetty.version>9.3.20.v20170531</jetty.version>
17+
<jetty.version>11.0.25</jetty.version>
1818
</properties>
1919

2020
<dependencies>

agent-plugins/agent-servlet-plugins/agent-jetty-servlet-plugin/src/main/java/cloud/erda/agent/plugin/servlet/jetty/ServletDoHandlerInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
package cloud.erda.agent.plugin.servlet.jetty;
1818

1919
import cloud.erda.agent.core.utils.Constants;
20+
import jakarta.servlet.http.HttpServletRequest;
21+
import jakarta.servlet.http.HttpServletResponse;
2022
import org.apache.skywalking.apm.agent.core.plugin.interceptor.context.IMethodInterceptContext;
2123
import cloud.erda.agent.plugin.servlet.BaseServletInvokeInterceptor;
2224

23-
import javax.servlet.http.HttpServletRequest;
24-
import javax.servlet.http.HttpServletResponse;
2525

2626
/**
2727
* @author randomnil

0 commit comments

Comments
 (0)