You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by GitBox <gi...@apache.org> on 2021/05/14 16:34:52 UTC

[GitHub] [skywalking] muse-dev[bot] commented on a change in pull request #6937: Introduce method interceptor v2

muse-dev[bot] commented on a change in pull request #6937:
URL: https://github.com/apache/skywalking/pull/6937#discussion_r632653701



##########
File path: apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/v2/StaticMethodsInterV2.java
##########
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2;
+
+import java.lang.reflect.Method;
+import java.util.concurrent.Callable;
+import net.bytebuddy.implementation.bind.annotation.AllArguments;
+import net.bytebuddy.implementation.bind.annotation.Origin;
+import net.bytebuddy.implementation.bind.annotation.RuntimeType;
+import net.bytebuddy.implementation.bind.annotation.SuperCall;
+import org.apache.skywalking.apm.agent.core.logging.api.ILog;
+import org.apache.skywalking.apm.agent.core.logging.api.LogManager;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader;
+
+/**
+ * The actual byte-buddy's interceptor to intercept class instance methods. In this class, it provide a bridge between
+ * byte-buddy and sky-walking plugin.
+ */
+public class StaticMethodsInterV2 {
+    private static final ILog LOGGER = LogManager.getLogger(StaticMethodsInterV2.class);
+
+    /**
+     * A class full name, and instanceof {@link StaticMethodsAroundInterceptorV2} This name should only stay in {@link
+     * String}, the real {@link Class} type will trigger classloader failure. If you want to know more, please check on
+     * books about Classloader or Classloader appointment mechanism.
+     */
+    private String staticMethodsAroundInterceptorClassName;
+
+    /**
+     * Set the name of {@link StaticMethodsInterV2#staticMethodsAroundInterceptorClassName}
+     *
+     * @param staticMethodsAroundInterceptorClassName class full name.
+     */
+    public StaticMethodsInterV2(String staticMethodsAroundInterceptorClassName) {
+        this.staticMethodsAroundInterceptorClassName = staticMethodsAroundInterceptorClassName;
+    }
+
+    /**
+     * Intercept the target static method.
+     *
+     * @param clazz        target class
+     * @param allArguments all method arguments
+     * @param method       method description.
+     * @param zuper        the origin call ref.
+     * @return the return value of target static method.
+     * @throws Exception only throw exception because of zuper.call() or unexpected exception in sky-walking ( This is a
+     *                   bug, if anything triggers this condition ).
+     */
+    @RuntimeType
+    public Object intercept(@Origin Class<?> clazz, @AllArguments Object[] allArguments, @Origin Method method,
+        @SuperCall Callable<?> zuper) throws Throwable {
+        StaticMethodsAroundInterceptorV2 interceptor = InterceptorInstanceLoader.load(staticMethodsAroundInterceptorClassName,
+                                                                                      clazz.getClassLoader());
+
+        MethodInvocationContext context = new MethodInvocationContext();
+        MethodInterceptResult result = new MethodInterceptResult();
+        try {
+            interceptor.beforeMethod(clazz, method, allArguments, method.getParameterTypes(), result, context);

Review comment:
       *NULL_DEREFERENCE:*  object `interceptor` last assigned on line 69 could be null and is dereferenced at line 75.
   (at-me [in a reply](https://docs.muse.dev/docs/talk-to-muse/) with `help` or `ignore`)

##########
File path: apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/v2/StaticMethodsInterV2WithOverrideArgs.java
##########
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2;
+
+import java.lang.reflect.Method;
+import net.bytebuddy.implementation.bind.annotation.AllArguments;
+import net.bytebuddy.implementation.bind.annotation.Morph;
+import net.bytebuddy.implementation.bind.annotation.Origin;
+import net.bytebuddy.implementation.bind.annotation.RuntimeType;
+import org.apache.skywalking.apm.agent.core.logging.api.ILog;
+import org.apache.skywalking.apm.agent.core.logging.api.LogManager;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.OverrideCallable;
+import org.apache.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader;
+
+/**
+ * The actual byte-buddy's interceptor to intercept class instance methods. In this class, it provide a bridge between
+ * byte-buddy and sky-walking plugin.
+ */
+public class StaticMethodsInterV2WithOverrideArgs {
+    private static final ILog LOGGER = LogManager.getLogger(StaticMethodsInterV2WithOverrideArgs.class);
+
+    /**
+     * A class full name, and instanceof {@link StaticMethodsAroundInterceptorV2} This name should only stay in {@link
+     * String}, the real {@link Class} type will trigger classloader failure. If you want to know more, please check on
+     * books about Classloader or Classloader appointment mechanism.
+     */
+    private String staticMethodsAroundInterceptorClassName;
+
+    /**
+     * Set the name of {@link StaticMethodsInterV2WithOverrideArgs#staticMethodsAroundInterceptorClassName}
+     *
+     * @param staticMethodsAroundInterceptorClassName class full name.
+     */
+    public StaticMethodsInterV2WithOverrideArgs(String staticMethodsAroundInterceptorClassName) {
+        this.staticMethodsAroundInterceptorClassName = staticMethodsAroundInterceptorClassName;
+    }
+
+    /**
+     * Intercept the target static method.
+     *
+     * @param clazz        target class
+     * @param allArguments all method arguments
+     * @param method       method description.
+     * @param zuper        the origin call ref.
+     * @return the return value of target static method.
+     * @throws Exception only throw exception because of zuper.call() or unexpected exception in sky-walking ( This is a
+     *                   bug, if anything triggers this condition ).
+     */
+    @RuntimeType
+    public Object intercept(@Origin Class<?> clazz, @AllArguments Object[] allArguments, @Origin Method method,
+        @Morph OverrideCallable zuper) throws Throwable {
+        StaticMethodsAroundInterceptorV2 interceptor = InterceptorInstanceLoader.load(staticMethodsAroundInterceptorClassName,
+                                                                                      clazz.getClassLoader());
+
+        MethodInvocationContext context = new MethodInvocationContext();
+        MethodInterceptResult result = new MethodInterceptResult();
+        try {
+            interceptor.beforeMethod(clazz, method, allArguments, method.getParameterTypes(), result, context);

Review comment:
       *NULL_DEREFERENCE:*  object `interceptor` last assigned on line 69 could be null and is dereferenced at line 75.
   (at-me [in a reply](https://docs.muse.dev/docs/talk-to-muse/) with `help` or `ignore`)




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org