You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/01/05 04:19:12 UTC
[shardingsphere] branch master updated: repair agent bug (#8888)
This is an automated email from the ASF dual-hosted git repository.
zhangyonglun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 3e37440 repair agent bug (#8888)
3e37440 is described below
commit 3e374401d344037d620c30647a911f4a3dfbed3f
Author: xiaoyu <54...@qq.com>
AuthorDate: Tue Jan 5 12:18:35 2021 +0800
repair agent bug (#8888)
---
.../transformer/ShardingSphereTransformer.java | 27 ++++++++++++----------
.../agent/core/plugin/loader/PluginLoader.java | 2 +-
.../zipkin/advice/CommandExecutorTaskAdvice.java | 5 +++-
3 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
index f4c0811..94c7266 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
@@ -51,58 +51,61 @@ public final class ShardingSphereTransformer implements Transformer {
@Override
public Builder<?> transform(final Builder<?> builder, final TypeDescription typeDescription, final ClassLoader classLoader, final JavaModule module) {
if (pluginLoader.containsType(typeDescription)) {
- Builder<?> newBuilder = builder;
- newBuilder = newBuilder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
+ Builder<?> result = builder;
+ result = result.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
.implement(TargetObject.class)
.intercept(FieldAccessor.ofField(EXTRA_DATA));
PluginInterceptorPoint pluginInterceptorPoint = pluginLoader.loadPluginInterceptorPoint(typeDescription);
- newBuilder = interceptorConstructorPoint(pluginInterceptorPoint, newBuilder);
- newBuilder = interceptorClassStaticMethodPoint(pluginInterceptorPoint, newBuilder);
- newBuilder = interceptorInstanceMethodPoint(pluginInterceptorPoint, newBuilder);
- return newBuilder;
+ result = interceptorConstructorPoint(pluginInterceptorPoint, result);
+ result = interceptorClassStaticMethodPoint(pluginInterceptorPoint, result);
+ result = interceptorInstanceMethodPoint(pluginInterceptorPoint, result);
+ return result;
}
return builder;
}
private Builder<?> interceptorConstructorPoint(final PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+ Builder<?> result = builder;
for (ConstructorPoint each : pluginInterceptorPoint.getConstructorPoints()) {
try {
ConstructorMethodInterceptor interceptor = new ConstructorMethodInterceptor(pluginLoader.getOrCreateInstance(each.getAdvice()));
- return builder.constructor(each.getMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
+ result = result.constructor(each.getMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
log.error("Failed to load advice class: {}", each.getAdvice(), ex);
}
}
- return builder;
+ return result;
}
private Builder<?> interceptorClassStaticMethodPoint(final PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+ Builder<?> result = builder;
for (ClassStaticMethodPoint each : pluginInterceptorPoint.getClassStaticMethodPoints()) {
try {
StaticMethodAroundInterceptor interceptor = new StaticMethodAroundInterceptor(pluginLoader.getOrCreateInstance(each.getAdvice()));
- return builder.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
+ result = result.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
log.error("Failed to load advice class: {}", each.getAdvice(), ex);
}
}
- return builder;
+ return result;
}
private Builder<?> interceptorInstanceMethodPoint(final PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+ Builder<?> result = builder;
for (InstanceMethodPoint each : pluginInterceptorPoint.getInstanceMethodPoints()) {
try {
MethodAroundInterceptor interceptor = new MethodAroundInterceptor(pluginLoader.getOrCreateInstance(each.getAdvice()));
- return builder.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
+ result = result.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
log.error("Failed to load advice class: {}", each.getAdvice(), ex);
}
}
- return builder;
+ return result;
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/PluginLoader.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/PluginLoader.java
index 5df306c..8f39fe7 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/PluginLoader.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/PluginLoader.java
@@ -112,9 +112,9 @@ public final class PluginLoader extends ClassLoader implements Closeable {
JarFile jar = new JarFile(each, true);
jars.add(new PluginJar(jar, each));
log.info("Loaded jar {}.", each.getName());
- loadPluginDefinitionServices(ignoredPluginNames, pointMap);
}
}
+ loadPluginDefinitionServices(ignoredPluginNames, pointMap);
interceptorPointMap = ImmutableMap.<String, PluginInterceptorPoint>builder().putAll(pointMap).build();
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
index 4b417f2..3a9ae4d 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
import brave.Span;
import brave.Tracing;
+import java.lang.reflect.Field;
import lombok.SneakyThrows;
import org.apache.shardingsphere.agent.api.advice.MethodAroundAdvice;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
@@ -48,7 +49,9 @@ public final class CommandExecutorTaskAdvice implements MethodAroundAdvice {
@SneakyThrows
@Override
public void afterMethod(final TargetObject target, final Method method, final Object[] args, final MethodInvocationResult result) {
- BackendConnection connection = (BackendConnection) CommandExecutorTask.class.getDeclaredField("backendConnection").get(target);
+ Field field = CommandExecutorTask.class.getDeclaredField("backendConnection");
+ field.setAccessible(true);
+ BackendConnection connection = (BackendConnection) field.get(target);
Span span = (Span) ExecutorDataMap.getValue().remove(ZipkinConstants.ROOT_SPAN);
span.tag(ZipkinConstants.Tags.CONNECTION_COUNT, String.valueOf(connection.getConnectionSize()));
span.flush();