You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/07/23 14:57:46 UTC
[skywalking] 02/02: Setup the new core.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch bootstrap-cl
in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 96f17f16b7bf6361e5740358496f94facbbe118f
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Tue Jul 23 22:57:32 2019 +0800
Setup the new core.
---
apm-sniffer/apm-agent-core/pom.xml | 8 +-
.../plugin/bootstrap/BootstrapInstrumentBoost.java | 4 +-
.../plugin/bootstrap/BootstrapPluginLogBridge.java | 91 ++++++++++++++++++++++
.../agent/core/plugin/bootstrap/IBootstrapLog.java | 54 +++++++++++++
...BootstrapInstanceMethodInterceptorTemplate.java | 15 ++--
.../interceptor/enhance/BootstrapInterAssist.java | 15 ++--
.../enhance/ClassEnhancePluginDefine.java | 4 +-
apm-sniffer/apm-agent/pom.xml | 1 +
.../HttpUrlConnectionInstrumentation.java | 4 +
9 files changed, 173 insertions(+), 23 deletions(-)
diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml
index 4ef45f4..f6201e7 100644
--- a/apm-sniffer/apm-agent-core/pom.xml
+++ b/apm-sniffer/apm-agent-core/pom.xml
@@ -55,8 +55,8 @@
<shade.io.netty.target>${shade.package}.${shade.io.netty.source}</shade.io.netty.target>
<shade.io.opencensus.source>io.opencensus</shade.io.opencensus.source>
<shade.io.opencensus.target>${shade.package}.${shade.io.opencensus.source}</shade.io.opencensus.target>
- <shade.net.javaassist.source>javassist</shade.net.javaassist.source>
- <shade.net.javaassist.target>${shade.package}.${shade.net.javaassist.source}</shade.net.javaassist.target>
+ <shade.javaassist.source>javassist</shade.javaassist.source>
+ <shade.javaassist.target>${shade.package}.${shade.javaassist.source}</shade.javaassist.target>
<ststem-rules.version>1.18.0</ststem-rules.version>
</properties>
@@ -190,8 +190,8 @@
</artifactSet>
<relocations>
<relocation>
- <pattern>${shade.net.javaassist.source}</pattern>
- <shadedPattern>${shade.net.javaassist.target}</shadedPattern>
+ <pattern>${shade.javaassist.source}</pattern>
+ <shadedPattern>${shade.javaassist.target}</shadedPattern>
</relocation>
<relocation>
<pattern>${shade.com.lmax.disruptor.source}</pattern>
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapInstrumentBoost.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapInstrumentBoost.java
index abacfbf..8d38901 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapInstrumentBoost.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapInstrumentBoost.java
@@ -53,7 +53,7 @@ public class BootstrapInstrumentBoost {
"org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.BootstrapInterAssist",
"org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor",
"org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult",
- "org.apache.skywalking.apm.agent.core.logging.api.ILog"
+ "org.apache.skywalking.apm.agent.core.plugin.bootstrap.IBootstrapLog"
};
private static String INSTANCE_DELEGATE_TEMPLATE = "org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.BootstrapInstanceMethodInterceptorTemplate";
@@ -120,7 +120,7 @@ public class BootstrapInstrumentBoost {
Map<String, byte[]> classesTypeMap) throws PluginException {
ClassPool classPool = ClassPool.getDefault();
boolean isHasJREInstrumentation = false;
- for (AbstractClassEnhancePluginDefine define : pluginFinder.getBootstrapClassMatchDefine()) {
+ for (AbstractClassEnhancePluginDefine define : pluginFinder.getBootstrapClassMatchDefine()) {
for (InstanceMethodsInterceptPoint point : define.getInstanceMethodsInterceptPoints()) {
String methodsInterceptor = point.getMethodsInterceptor();
String internalInterceptorName = internalDelegate(methodsInterceptor);
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapPluginLogBridge.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapPluginLogBridge.java
new file mode 100644
index 0000000..6a70229
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/BootstrapPluginLogBridge.java
@@ -0,0 +1,91 @@
+/*
+ * 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.bootstrap;
+
+import org.apache.skywalking.apm.agent.core.logging.api.ILog;
+import org.apache.skywalking.apm.agent.core.logging.api.LogManager;
+
+/**
+ * The log bridge makes the ILog accessible inside bootstrap classloader, especially for internal interceptor.
+ *
+ * @author wusheng
+ */
+public class BootstrapPluginLogBridge implements IBootstrapLog {
+ public static IBootstrapLog getLogger(String clazz) {
+ return new BootstrapPluginLogBridge(clazz);
+ }
+
+ private final ILog logger;
+
+ private BootstrapPluginLogBridge(String clazz) {
+ logger = LogManager.getLogger(clazz);
+ }
+
+ @Override public void info(String format) {
+
+ }
+
+ @Override public void info(String format, Object... arguments) {
+
+ }
+
+ @Override public void warn(String format, Object... arguments) {
+
+ }
+
+ @Override public void warn(Throwable e, String format, Object... arguments) {
+
+ }
+
+ @Override public void error(String format, Throwable e) {
+
+ }
+
+ @Override public void error(Throwable e, String format, Object... arguments) {
+
+ }
+
+ @Override public boolean isDebugEnable() {
+ return false;
+ }
+
+ @Override public boolean isInfoEnable() {
+ return false;
+ }
+
+ @Override public boolean isWarnEnable() {
+ return false;
+ }
+
+ @Override public boolean isErrorEnable() {
+ return false;
+ }
+
+ @Override public void debug(String format) {
+
+ }
+
+ @Override public void debug(String format, Object... arguments) {
+
+ }
+
+ @Override public void error(String format) {
+
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/IBootstrapLog.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/IBootstrapLog.java
new file mode 100644
index 0000000..4278c84
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/bootstrap/IBootstrapLog.java
@@ -0,0 +1,54 @@
+/*
+ * 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.bootstrap;
+
+/**
+ * The log interface used in bootstrap internal interceptors.
+ *
+ * Never used in any plugin or tracing core.
+ *
+ * @author wusheng
+ */
+public interface IBootstrapLog {
+ void info(String format);
+
+ void info(String format, Object... arguments);
+
+ void warn(String format, Object... arguments);
+
+ void warn(Throwable e, String format, Object... arguments);
+
+ void error(String format, Throwable e);
+
+ void error(Throwable e, String format, Object... arguments);
+
+ boolean isDebugEnable();
+
+ boolean isInfoEnable();
+
+ boolean isWarnEnable();
+
+ boolean isErrorEnable();
+
+ void debug(String format);
+
+ void debug(String format, Object... arguments);
+
+ void error(String format);
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInstanceMethodInterceptorTemplate.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInstanceMethodInterceptorTemplate.java
index b54859b..86138e6 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInstanceMethodInterceptorTemplate.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInstanceMethodInterceptorTemplate.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance;
+import java.io.PrintStream;
import java.lang.reflect.Method;
import java.util.concurrent.Callable;
import net.bytebuddy.implementation.bind.annotation.AllArguments;
@@ -25,7 +26,7 @@ import net.bytebuddy.implementation.bind.annotation.Origin;
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import net.bytebuddy.implementation.bind.annotation.SuperCall;
import net.bytebuddy.implementation.bind.annotation.This;
-import org.apache.skywalking.apm.agent.core.logging.api.ILog;
+import org.apache.skywalking.apm.agent.core.plugin.bootstrap.IBootstrapLog;
/**
* This class wouldn't be loaded in real env. This is a class template for dynamic class generation.
@@ -33,10 +34,14 @@ import org.apache.skywalking.apm.agent.core.logging.api.ILog;
* @author wusheng
*/
public class BootstrapInstanceMethodInterceptorTemplate {
+ private static final PrintStream OUT = System.out;
+ /**
+ * This field is never set, but has value in the runtime.
+ */
private static String TARGET_INTERCEPTOR;
- private static ILog LOGGER;
private static InstanceMethodsAroundInterceptor INTERCEPTOR;
+ private static IBootstrapLog LOGGER;
/**
* Intercept the target instance method.
@@ -97,15 +102,15 @@ public class BootstrapInstanceMethodInterceptorTemplate {
}
}
- return result;
+ return ret;
}
private static void prepare() {
- if (LOGGER == null) {
+ if (INTERCEPTOR == null) {
ClassLoader loader = BootstrapInterAssist.getAgentClassLoader();
if (loader != null) {
- ILog logger = BootstrapInterAssist.getLogger(loader, TARGET_INTERCEPTOR);
+ IBootstrapLog logger = BootstrapInterAssist.getLogger(loader, TARGET_INTERCEPTOR);
if (logger != null) {
LOGGER = logger;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInterAssist.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInterAssist.java
index 43c6049..361c97a 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInterAssist.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/BootstrapInterAssist.java
@@ -21,7 +21,7 @@ package org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance;
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
-import org.apache.skywalking.apm.agent.core.logging.api.ILog;
+import org.apache.skywalking.apm.agent.core.plugin.bootstrap.IBootstrapLog;
/**
* This assist help all bootstrap class core interceptor.
@@ -31,8 +31,7 @@ import org.apache.skywalking.apm.agent.core.logging.api.ILog;
public class BootstrapInterAssist {
private static final String AGENT_CLASSLOADER_DEFAULT = "org.apache.skywalking.apm.agent.core.plugin.loader.AgentClassLoader";
private static final String DEFAULT_AGENT_CLASSLOADER_INSTANCE = "DEFAULT_LOADER";
- private static final String LOG_MANAGER_CLASS = "org.apache.skywalking.apm.agent.core.logging.api.LogManager";
- private static final String LOG_MANAGER_INSTANCE = "RESOLVER";
+ private static final String LOG_MANAGER_CLASS = "org.apache.skywalking.apm.agent.core.plugin.bootstrap.BootstrapPluginLogBridge";
private static final String LOG_MANAGER_GET_LOGGER_METHOD = "getLogger";
private static final PrintStream OUT = System.out;
@@ -54,15 +53,11 @@ public class BootstrapInterAssist {
}
}
- public static ILog getLogger(ClassLoader defaultAgentClassLoader, String interceptor) {
+ public static IBootstrapLog getLogger(ClassLoader defaultAgentClassLoader, String interceptor) {
try {
Class<?> logManagerClass = Class.forName(LOG_MANAGER_CLASS, true, defaultAgentClassLoader);
- Field resolver = logManagerClass.getDeclaredField(LOG_MANAGER_INSTANCE);
- resolver.setAccessible(true);
- Object logManagerInstance = resolver.get(null);
-
Method getLogger = logManagerClass.getMethod(LOG_MANAGER_GET_LOGGER_METHOD, String.class);
- return (ILog)getLogger.invoke(logManagerInstance, interceptor + "_internal");
+ return (IBootstrapLog)getLogger.invoke(null, interceptor + "_internal");
} catch (Exception e) {
e.printStackTrace(OUT);
return null;
@@ -70,7 +65,7 @@ public class BootstrapInterAssist {
}
public static InstanceMethodsAroundInterceptor createInterceptor(ClassLoader defaultAgentClassLoader,
- String className, ILog log) {
+ String className, IBootstrapLog log) {
try {
Class<?> interceptor = Class.forName(className, true, defaultAgentClassLoader);
InstanceMethodsAroundInterceptor interceptorInstance = (InstanceMethodsAroundInterceptor)interceptor.newInstance();
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
index d468f85..3fa3737 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
@@ -184,14 +184,14 @@ public abstract class ClassEnhancePluginDefine extends AbstractClassEnhancePlugi
newClassBuilder.method(junction)
.intercept(
MethodDelegation.withDefaultConfiguration()
- .to(new InstMethodsInter(interceptor, classLoader))
+ .to(BootstrapInstrumentBoost.forInternalDelegateClass(interceptor))
);
} else {
newClassBuilder =
newClassBuilder.method(junction)
.intercept(
MethodDelegation.withDefaultConfiguration()
- .to(BootstrapInstrumentBoost.forInternalDelegateClass(interceptor))
+ .to(new InstMethodsInter(interceptor, classLoader))
);
}
}
diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml
index 64d51bd..6f95267 100644
--- a/apm-sniffer/apm-agent/pom.xml
+++ b/apm-sniffer/apm-agent/pom.xml
@@ -81,6 +81,7 @@
<exclude>io.opencensus:*</exclude>
<exclude>com.google.*:*</exclude>
<exclude>com.google.guava:guava</exclude>
+ <exclude>org.javassist:*</exclude>
</excludes>
</artifactSet>
<relocations>
diff --git a/apm-sniffer/apm-sdk-plugin/jre-HttpURLConnection/src/main/java/org/apache/skywalking/apm/plugin/jre/httpurlconnection/HttpUrlConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/jre-HttpURLConnection/src/main/java/org/apache/skywalking/apm/plugin/jre/httpurlconnection/HttpUrlConnectionInstrumentation.java
index 3d094f0..f400cb9 100644
--- a/apm-sniffer/apm-sdk-plugin/jre-HttpURLConnection/src/main/java/org/apache/skywalking/apm/plugin/jre/httpurlconnection/HttpUrlConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/jre-HttpURLConnection/src/main/java/org/apache/skywalking/apm/plugin/jre/httpurlconnection/HttpUrlConnectionInstrumentation.java
@@ -64,4 +64,8 @@ public class HttpUrlConnectionInstrumentation extends ClassEnhancePluginDefine {
@Override public StaticMethodsInterceptPoint[] getStaticMethodsInterceptPoints() {
return new StaticMethodsInterceptPoint[0];
}
+
+ @Override public boolean isBootstrapInstrumentation() {
+ return true;
+ }
}