Skip to content

Commit 49a5627

Browse files
authored
fix: null pointer in plugins (#104)
1 parent 0348a89 commit 49a5627

File tree

12 files changed

+92
-29
lines changed

12 files changed

+92
-29
lines changed

agent-core/pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,19 +177,20 @@
177177
<plugin>
178178
<groupId>org.apache.maven.plugins</groupId>
179179
<artifactId>maven-antrun-plugin</artifactId>
180+
<version>1.8</version>
180181
<executions>
181182
<execution>
182183
<phase>prepare-package</phase>
183184
<goals>
184185
<goal>run</goal>
185186
</goals>
186187
<configuration>
187-
<tasks>
188+
<target>
188189
<delete dir="${project.basedir}/packages"/>
189190
<mkdir dir="${agent.package.dest.dir}"/>
190191
<copy file="${project.build.directory}/classes/java-agent.properties"
191192
tofile="${agent.package.dest.dir}/java-agent.properties" overwrite="true"/>
192-
</tasks>
193+
</target>
193194
</configuration>
194195
</execution>
195196
</executions>

agent-main/pom.xml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
<shade.net.bytebuddy.target>${shade.package}.${shade.net.bytebuddy.source}</shade.net.bytebuddy.target>
2222
<shade.io.opentelemetry.source>io.opentelemetry</shade.io.opentelemetry.source>
2323
<shade.io.opentelemetry.target>${shade.package}.${shade.io.opentelemetry.source}</shade.io.opentelemetry.target>
24+
<shade.org.apache.skywalking.apm.agent.core.source>org.apache.skywalking.apm.agent.core</shade.org.apache.skywalking.apm.agent.core.source>
25+
<shade.org.apache.skywalking.apm.agent.core.target>${shade.package}.${shade.org.apache.skywalking.apm.agent.core.source}</shade.org.apache.skywalking.apm.agent.core.target>
2426
<agent.package.dest.dir>${project.basedir}/../dist/erda-java-agent</agent.package.dest.dir>
2527
</properties>
2628

@@ -80,6 +82,10 @@
8082
<pattern>${shade.io.opentelemetry.source}</pattern>
8183
<shadedPattern>${shade.io.opentelemetry.target}</shadedPattern>
8284
</relocation>
85+
<relocation>
86+
<pattern>${shade.org.apache.skywalking.apm.agent.core.source}</pattern>
87+
<shadedPattern>${shade.org.apache.skywalking.apm.agent.core.target}</shadedPattern>
88+
</relocation>
8389
</relocations>
8490
</configuration>
8591
</execution>
@@ -88,14 +94,15 @@
8894
<plugin>
8995
<groupId>org.apache.maven.plugins</groupId>
9096
<artifactId>maven-antrun-plugin</artifactId>
97+
<version>1.8</version>
9198
<executions>
9299
<execution>
93100
<phase>package</phase>
94101
<goals>
95102
<goal>run</goal>
96103
</goals>
97104
<configuration>
98-
<tasks>
105+
<target>
99106
<delete dir="${agent.package.dest.dir}/plugins" />
100107
<delete dir="${agent.package.dest.dir}/integrations" />
101108
<mkdir dir="${agent.package.dest.dir}" />
@@ -105,7 +112,7 @@
105112
<copy file="${project.basedir}/../LICENSE-apache-skywalking.txt" tofile="${agent.package.dest.dir}/licenses/LICENSE-apache-skywalking.txt" overwrite="true" />
106113
<copy file="${project.basedir}/../NOTICE-apache-skywalking.txt" tofile="${agent.package.dest.dir}/licenses/NOTICE-apache-skywalking.txt" overwrite="true" />
107114
<copy file="${project.build.directory}/erda-agent.jar" tofile="${agent.package.dest.dir}/erda-agent.jar" overwrite="true" />
108-
</tasks>
115+
</target>
109116
</configuration>
110117
</execution>
111118
</executions>

agent-pack/pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,18 @@
3838
<plugin>
3939
<groupId>org.apache.maven.plugins</groupId>
4040
<artifactId>maven-antrun-plugin</artifactId>
41+
<version>1.8</version>
4142
<executions>
4243
<execution>
4344
<phase>package</phase>
4445
<goals>
4546
<goal>run</goal>
4647
</goals>
4748
<configuration>
48-
<tasks>
49+
<target>
4950
<copy file="${project.build.directory}/erda-java-agent.tar.gz" tofile="${project.basedir}/../dist/erda-java-agent.tar.gz" overwrite="true" />
5051
<copy file="${project.build.directory}/erda-java-agent.zip" tofile="${project.basedir}/../dist/erda-java-agent.zip" overwrite="true" />
51-
</tasks>
52+
</target>
5253
</configuration>
5354
</execution>
5455
</executions>

agent-plugins/agent-jdbc-plugins/agent-jdbc-commons/src/main/java/cloud/erda/agent/plugin/jdbc/ExecuteMethodsInterceptor.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,20 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
5151
ConnectionInfo connectInfo = cacheObject.getConnectionInfo();
5252

5353
if (connectInfo != null) {
54-
String statement = cacheObject.getSql().replace("\n", "");
54+
// 获取SQL,如果StatementEnhanceInfos中的SQL为空,则从方法参数中获取
55+
String statement = cacheObject.getSql();
56+
if (statement == null || statement.isEmpty()) {
57+
// 对于Statement.executeQuery(String sql)等方法,SQL作为第一个参数传入
58+
if (context.getArguments() != null && context.getArguments().length > 0 && context.getArguments()[0] instanceof String) {
59+
statement = (String) context.getArguments()[0];
60+
} else {
61+
statement = "";
62+
}
63+
}
64+
65+
if (statement != null) {
66+
statement = statement.replace("\n", "");
67+
}
5568

5669
Tracer tracer = TracerManager.currentTracer();
5770
SpanContext spanContext = tracer.active() != null ? tracer.active().span().getContext() : null;
@@ -95,8 +108,12 @@ public Object afterMethod(IMethodInterceptContext context, Object ret) throws Th
95108
}
96109

97110
StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) ((DynamicFieldEnhancedInstance) context.getInstance()).getDynamicField();
98-
if (cacheObject.getConnectionInfo() != null) {
99-
TracerManager.currentTracer().active().close();
111+
if (cacheObject != null && cacheObject.getConnectionInfo() != null) {
112+
// 添加null检查,防止active()返回null导致空指针异常
113+
Tracer tracer = TracerManager.currentTracer();
114+
if (tracer != null && tracer.active() != null) {
115+
tracer.active().close();
116+
}
100117
}
101118
return ret;
102119
}
@@ -106,9 +123,14 @@ public void handleMethodException(IMethodInterceptContext context, Throwable t)
106123
if (context.getInstance() == null) return;
107124

108125
StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) ((DynamicFieldEnhancedInstance) context.getInstance()).getDynamicField();
109-
if (cacheObject.getConnectionInfo() != null) {
126+
if (cacheObject != null && cacheObject.getConnectionInfo() != null) {
110127
TransactionMetricUtils.handleException(context);
111128
TracerUtils.handleException(t);
129+
// 添加null检查,防止active()返回null导致空指针异常
130+
Tracer tracer = TracerManager.currentTracer();
131+
if (tracer != null && tracer.active() != null) {
132+
tracer.active().close();
133+
}
112134
}
113135
}
114136

agent-plugins/agent-jedis-2.x-plugin/src/main/java/cloud/erda/agent/plugin/jedis/v2/JedisMethodInterceptor.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,15 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
4646
String peer = String.valueOf(((DynamicFieldEnhancedInstance)objInst).getDynamicField());
4747

4848
String key = "";
49-
if (allArguments[0] instanceof String) {
50-
key = (String) allArguments[0];
51-
} else if (allArguments[0] instanceof byte[]) {
52-
key = new String((byte[]) allArguments[0]);
53-
} else if (allArguments[0] instanceof Integer) {
54-
key = String.valueOf(allArguments[0]);
49+
// 添加参数检查,防止空指针异常
50+
if (allArguments != null && allArguments.length > 0 && allArguments[0] != null) {
51+
if (allArguments[0] instanceof String) {
52+
key = (String) allArguments[0];
53+
} else if (allArguments[0] instanceof byte[]) {
54+
key = new String((byte[]) allArguments[0]);
55+
} else if (allArguments[0] instanceof Integer) {
56+
key = String.valueOf(allArguments[0]);
57+
}
5558
}
5659
String statement = (method.getName() + " " + key).replace("\n", "");
5760

@@ -88,7 +91,11 @@ public Object afterMethod(IMethodInterceptContext context, Object ret) throws Th
8891
if (transactionMetricBuilder != null) {
8992
MetricReporter.report(transactionMetricBuilder);
9093
}
91-
TracerManager.currentTracer().active().close();
94+
// 添加null检查,防止active()返回null导致空指针异常
95+
Tracer tracer = TracerManager.currentTracer();
96+
if (tracer != null && tracer.active() != null) {
97+
tracer.active().close();
98+
}
9299
return ret;
93100
}
94101

agent-plugins/agent-lettuce-plugins/agent-lettuce-5.x-plugin/src/main/java/cloud/erda/agent/plugin/lettuce/v5/AsyncCommandMethodInterceptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,11 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
5757

5858
@Override
5959
public Object afterMethod(IMethodInterceptContext context, Object ret) throws Throwable {
60-
TracerManager.currentTracer().active().close();
60+
// 添加null检查,防止active()返回null导致空指针异常
61+
Tracer tracer = TracerManager.currentTracer();
62+
if (tracer != null && tracer.active() != null) {
63+
tracer.active().close();
64+
}
6165
return ret;
6266
}
6367

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
6666

6767
@Override
6868
public Object afterMethod(IMethodInterceptContext context, Object ret) throws Throwable {
69-
TracerManager.currentTracer().active().close(false);
69+
// 添加null检查,防止active()返回null导致空指针异常
70+
Tracer tracer = TracerManager.currentTracer();
71+
if (tracer != null && tracer.active() != null) {
72+
tracer.active().close(false);
73+
}
7074
return ret;
7175
}
7276

agent-plugins/agent-rocketmq-4.x-plugin/src/main/java/cloud/erda/agent/plugin/rocketmq/v4/OnExceptionInterceptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ public Object afterMethod(IMethodInterceptContext context, Object ret) throws Th
7171
MetricReporter.report(builder);
7272
}
7373

74-
TracerManager.currentTracer().active().close();
74+
// 添加null检查,防止active()返回null导致空指针异常
75+
cloud.erda.agent.core.tracing.Tracer tracer = TracerManager.currentTracer();
76+
if (tracer != null && tracer.active() != null) {
77+
tracer.active().close();
78+
}
7579
return ret;
7680
}
7781

agent-plugins/agent-rocketmq-4.x-plugin/src/main/java/cloud/erda/agent/plugin/rocketmq/v4/OnSuccessInterceptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ public Object afterMethod(IMethodInterceptContext context, Object ret) throws Th
7171
if (builder != null) {
7272
MetricReporter.report(builder);
7373
}
74-
TracerManager.currentTracer().active().close();
74+
// 添加null检查,防止active()返回null导致空指针异常
75+
cloud.erda.agent.core.tracing.Tracer tracer = TracerManager.currentTracer();
76+
if (tracer != null && tracer.active() != null) {
77+
tracer.active().close();
78+
}
7579
return ret;
7680
}
7781

agent-plugins/agent-sdk-plugin/src/main/java/cloud/erda/agent/plugin/sdk/interceptors/UserDefineInstanceMethodPointsInterceptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ public void beforeMethod(IMethodInterceptContext context, MethodInterceptResult
5050

5151
@Override
5252
public Object afterMethod(IMethodInterceptContext context, Object ret) throws Throwable {
53-
TracerManager.currentTracer().active().close();
53+
// 添加null检查,防止active()返回null导致空指针异常
54+
Tracer tracer = TracerManager.currentTracer();
55+
if (tracer != null && tracer.active() != null) {
56+
tracer.active().close();
57+
}
5458
return ret;
5559
}
5660

0 commit comments

Comments
 (0)