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();