This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git
The following commit(s) were added to refs/heads/main by this push:
new 1aabdb626b Fix MongoDB 4.11+, add Feign 12.2+ PathVar, add MariaDB 3.x
plugin, remove PostgreSQL 9.4 from test (#802)
1aabdb626b is described below
commit 1aabdb626ba996e13b3a3ee6ecb169c8acc2b8a1
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Thu Apr 9 13:12:26 2026 +0800
Fix MongoDB 4.11+, add Feign 12.2+ PathVar, add MariaDB 3.x plugin, remove
PostgreSQL 9.4 from test (#802)
---
.github/workflows/plugins-test.3.yaml | 1 +
CHANGES.md | 3 +
.../http/v9/define/PathVarV2Instrumentation.java | 79 +++++++++++
.../src/main/resources/skywalking-plugin.def | 3 +-
.../apm-sdk-plugin/mariadb-3.x-plugin/pom.xml | 60 ++++++++
.../v3/CreateCallableStatementInterceptor.java | 49 +++++++
.../v3/CreatePreparedStatementInterceptor.java | 50 +++++++
.../mariadb/v3/CreateStatementInterceptor.java | 50 +++++++
...PreparedStatementExecuteMethodsInterceptor.java | 93 +++++++++++++
.../jdbc/mariadb/v3/SetCatalogInterceptor.java | 48 +++++++
.../v3/StatementExecuteMethodsInterceptor.java | 75 ++++++++++
.../v3/define/ConnectionInstrumentation.java | 144 +++++++++++++++++++
.../mariadb/v3/define/DriverInstrumentation.java | 36 +++++
...paredStatementIgnoredSetterInstrumentation.java | 33 +++++
.../define/PreparedStatementInstrumentation.java | 74 ++++++++++
...PreparedStatementNullSetterInstrumentation.java | 33 +++++
.../PreparedStatementSetterInstrumentation.java | 33 +++++
.../v3/define/StatementInstrumentation.java | 71 ++++++++++
.../src/main/resources/skywalking-plugin.def | 9 +-
.../v3/CreateCallableStatementInterceptorTest.java | 67 +++++++++
.../v3/CreatePreparedStatementInterceptorTest.java | 67 +++++++++
.../mariadb/v3/CreateStatementInterceptorTest.java | 67 +++++++++
...aredStatementExecuteMethodsInterceptorTest.java | 153 +++++++++++++++++++++
.../v3/StatementExecuteMethodsInterceptorTest.java | 118 ++++++++++++++++
.../mongodb/v4/support/MongoRemotePeerHelper.java | 2 +-
apm-sniffer/apm-sdk-plugin/pom.xml | 1 +
.../setup/service-agent/java-agent/Plugin-list.md | 1 +
.../service-agent/java-agent/Supported-list.md | 6 +-
.../scenarios/feign-scenario/support-version.list | 2 +
.../bin/startup.sh} | 14 +-
.../mariadb-3.x-scenario/config/expectedData.yaml | 114 +++++++++++++++
.../configuration.yml} | 25 ++--
test/plugin/scenarios/mariadb-3.x-scenario/pom.xml | 123 +++++++++++++++++
.../src/main/assembly/assembly.xml | 41 ++++++
.../apm/testcase/mariadb/Application.java | 33 ++---
.../apm/testcase/mariadb/MariadbConfig.java | 58 ++++++++
.../apm/testcase/mariadb/SQLExecutor.java | 70 ++++++++++
.../mariadb/controller/CaseController.java | 63 +++++++++
.../src/main/resources/application.yaml | 23 ++++
.../src/main/resources/jdbc.properties} | 13 +-
.../src/main/resources/log4j2.xml | 30 ++++
.../support-version.list | 11 +-
.../mongodb-4.x-scenario/support-version.list | 3 +-
.../support-version.list | 1 -
44 files changed, 1990 insertions(+), 60 deletions(-)
diff --git a/.github/workflows/plugins-test.3.yaml
b/.github/workflows/plugins-test.3.yaml
index 36ad8289a0..0c667a6d06 100644
--- a/.github/workflows/plugins-test.3.yaml
+++ b/.github/workflows/plugins-test.3.yaml
@@ -82,6 +82,7 @@ jobs:
- vertx-web-3.54minus-scenario
- vertx-web-3.6plus-scenario
- mariadb-scenario
+ - mariadb-3.x-scenario
- micronaut-http-scenario
- nats-2.14.x-2.16.5-scenario
- quasar-scenario
diff --git a/CHANGES.md b/CHANGES.md
index f55806ecda..bb89a9e688 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -12,11 +12,14 @@ Release Notes.
* Extend MySQL plugin to support MySQL Connector/J 8.4.0 and 9.x (9.0 -> 9.6).
* Extend MariaDB plugin to support MariaDB Connector/J 2.7.x.
* Extend MongoDB 4.x plugin to support MongoDB Java Driver 4.2 -> 4.10. Fix
db.bind_vars extraction for driver 4.9+ where
InsertOperation/DeleteOperation/UpdateOperation classes were removed.
+* Fix MongoDB 4.x plugin for driver 4.11+ where Cluster.getDescription() was
removed, use getCurrentDescription() instead.
* Extend Feign plugin to support OpenFeign 10.x, 11.x, 12.1.
+* Add Feign 12.2+ PathVar support (BuildTemplateByResolvingArgs moved to
RequestTemplateFactoryResolver).
* Extend Undertow plugin to support Undertow 2.1.x, 2.2.x, 2.3.x.
* Extend GraphQL plugin to support graphql-java 18 -> 24 (20+ requires JDK 17).
* Extend Spring Kafka plugin to support Spring Kafka 2.4 -> 2.9 and 3.0 -> 3.3.
* Enhance test/plugin/run.sh to support extra Maven properties per version in
support-version.list (format: version,key=value).
+* Add MariaDB 3.x plugin (all classes renamed in 3.x).
All issues and pull requests are
[here](https://github.com/apache/skywalking/milestone/249?closed=1)
diff --git
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/PathVarV2Instrumentation.java
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/PathVarV2Instrumentation.java
new file mode 100644
index 0000000000..434d3c2d55
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/PathVarV2Instrumentation.java
@@ -0,0 +1,79 @@
+/*
+ * 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.plugin.feign.http.v9.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class PathVarV2Instrumentation extends
ClassInstanceMethodsEnhancePluginDefine {
+
+ /**
+ * Enhance class.
+ */
+ private static final String ENHANCE_CLASS =
"feign.RequestTemplateFactoryResolver$BuildTemplateByResolvingArgs";
+
+ /**
+ * Intercept class.
+ */
+ private static final String INTERCEPT_CLASS =
"org.apache.skywalking.apm.plugin.feign.http.v9.PathVarInterceptor";
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+
+ @Override
+ protected String[] witnessClasses() {
+ return new String[] {"feign.RequestTemplateFactoryResolver"};
+ }
+
+ @Override
+ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override
+ public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints()
{
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription> getMethodsMatcher() {
+ return named("resolve");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return INTERCEPT_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
index eda47ffa99..778a03f68f 100644
---
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
+++
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
@@ -15,4 +15,5 @@
# limitations under the License.
feign-default-http-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.DefaultHttpClientInstrumentation
-feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarInstrumentation
\ No newline at end of file
+feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarInstrumentation
+feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarV2Instrumentation
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/pom.xml
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/pom.xml
new file mode 100644
index 0000000000..1011fdda12
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/pom.xml
@@ -0,0 +1,60 @@
+<!--
+ ~ 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.
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>apm-sdk-plugin</artifactId>
+ <groupId>org.apache.skywalking</groupId>
+ <version>9.7.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>apm-mariadb-3.x-plugin</artifactId>
+ <packaging>jar</packaging>
+
+ <name>mariadb-3.x-plugin</name>
+ <url>http://maven.apache.org</url>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <mariadb-java-client.version>3.5.1</mariadb-java-client.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.mariadb.jdbc</groupId>
+ <artifactId>mariadb-java-client</artifactId>
+ <version>${mariadb-java-client.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>apm-jdbc-commons</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptor.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptor.java
new file mode 100644
index 0000000000..e7642c9fbb
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class CreateCallableStatementInterceptor implements
InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[]
allArguments, Class<?>[] argumentsTypes,
+ MethodInterceptResult result) {
+
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments, Class<?>[] argumentsTypes,
+ Object ret) {
+ if (ret instanceof EnhancedInstance) {
+ ((EnhancedInstance) ret).setSkyWalkingDynamicField(new
StatementEnhanceInfos((ConnectionInfo) objInst.getSkyWalkingDynamicField(),
(String) allArguments[0], "CallableStatement"));
+ }
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Throwable t) {
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptor.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptor.java
new file mode 100644
index 0000000000..a17b112718
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class CreatePreparedStatementInterceptor implements
InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[]
allArguments, Class<?>[] argumentsTypes,
+ MethodInterceptResult result) {
+
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments, Class<?>[] argumentsTypes,
+ Object ret) {
+ if (ret instanceof EnhancedInstance) {
+ ((EnhancedInstance) ret).setSkyWalkingDynamicField(new
StatementEnhanceInfos((ConnectionInfo) objInst.getSkyWalkingDynamicField(),
(String) allArguments[0], "PreparedStatement"));
+ }
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Throwable t) {
+
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptor.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptor.java
new file mode 100644
index 0000000000..036fe00a39
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class CreateStatementInterceptor implements
InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[]
allArguments, Class<?>[] argumentsTypes,
+ MethodInterceptResult result) {
+
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments, Class<?>[] argumentsTypes,
+ Object ret) {
+ if (ret instanceof EnhancedInstance) {
+ ((EnhancedInstance) ret).setSkyWalkingDynamicField(new
StatementEnhanceInfos((ConnectionInfo) objInst.getSkyWalkingDynamicField(), "",
"Statement"));
+ }
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Throwable t) {
+
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptor.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptor.java
new file mode 100644
index 0000000000..8ec30304b7
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptor.java
@@ -0,0 +1,93 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.context.tag.Tags;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
+import org.apache.skywalking.apm.plugin.jdbc.PreparedStatementParameterBuilder;
+import org.apache.skywalking.apm.plugin.jdbc.SqlBodyUtil;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class PreparedStatementExecuteMethodsInterceptor implements
InstanceMethodsAroundInterceptor {
+
+ @Override
+ public final void beforeMethod(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes,
MethodInterceptResult result) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)
objInst.getSkyWalkingDynamicField();
+ ConnectionInfo connectInfo = cacheObject.getConnectionInfo();
+ if (connectInfo == null) {
+ return;
+ }
+ AbstractSpan span =
ContextManager.createExitSpan(buildOperationName(connectInfo, method.getName(),
cacheObject
+ .getStatementName()), connectInfo.getDatabasePeer());
+ Tags.DB_TYPE.set(span, connectInfo.getDBType());
+ Tags.DB_INSTANCE.set(span, connectInfo.getDatabaseName());
+ Tags.DB_STATEMENT.set(span,
SqlBodyUtil.limitSqlBodySize(cacheObject.getSql()));
+ span.setComponent(connectInfo.getComponent());
+
+ if (JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS) {
+ final Object[] parameters = cacheObject.getParameters();
+ if (parameters != null && parameters.length > 0) {
+ int maxIndex = cacheObject.getMaxIndex();
+ Tags.SQL_PARAMETERS.set(span, getParameterString(parameters,
maxIndex));
+ }
+ }
+
+ SpanLayer.asDB(span);
+ }
+
+ @Override
+ public final Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Object ret) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)
objInst.getSkyWalkingDynamicField();
+ if (cacheObject.getConnectionInfo() != null) {
+ ContextManager.stopSpan();
+ }
+ return ret;
+ }
+
+ @Override
+ public final void handleMethodException(EnhancedInstance objInst, Method
method, Object[] allArguments,
+ Class<?>[] argumentsTypes,
Throwable t) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)
objInst.getSkyWalkingDynamicField();
+ if (cacheObject.getConnectionInfo() != null) {
+ ContextManager.activeSpan().log(t);
+ }
+ }
+
+ private String buildOperationName(ConnectionInfo connectionInfo, String
methodName, String statementName) {
+ return connectionInfo.getDBType() + "/JDBC/" + statementName + "/" +
methodName;
+ }
+
+ private String getParameterString(Object[] parameters, int maxIndex) {
+ return new PreparedStatementParameterBuilder()
+ .setParameters(parameters)
+ .setMaxIndex(maxIndex)
+ .build();
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/SetCatalogInterceptor.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/SetCatalogInterceptor.java
new file mode 100644
index 0000000000..48b9b3e926
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/SetCatalogInterceptor.java
@@ -0,0 +1,48 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class SetCatalogInterceptor implements InstanceMethodsAroundInterceptor
{
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[]
allArguments, Class<?>[] argumentsTypes,
+ MethodInterceptResult result) {
+ Object dynamicField = objInst.getSkyWalkingDynamicField();
+ if (dynamicField instanceof ConnectionInfo) {
+ ((ConnectionInfo)
dynamicField).setDatabaseName(String.valueOf(allArguments[0]));
+ }
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments, Class<?>[] argumentsTypes,
+ Object ret) {
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Throwable t) {
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptor.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptor.java
new file mode 100644
index 0000000000..c88f921881
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptor.java
@@ -0,0 +1,75 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.context.tag.Tags;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.apache.skywalking.apm.plugin.jdbc.SqlBodyUtil;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class StatementExecuteMethodsInterceptor implements
InstanceMethodsAroundInterceptor {
+ @Override
+ public final void beforeMethod(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes,
MethodInterceptResult result) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)
objInst.getSkyWalkingDynamicField();
+ ConnectionInfo connectInfo = cacheObject.getConnectionInfo();
+ if (connectInfo != null) {
+ AbstractSpan span =
ContextManager.createExitSpan(buildOperationName(connectInfo, method.getName(),
cacheObject
+ .getStatementName()), connectInfo.getDatabasePeer());
+ Tags.DB_TYPE.set(span, connectInfo.getDBType());
+ Tags.DB_INSTANCE.set(span, connectInfo.getDatabaseName());
+ String sql = allArguments.length > 0 ? (String) allArguments[0] :
"";
+ sql = SqlBodyUtil.limitSqlBodySize(sql);
+ Tags.DB_STATEMENT.set(span, sql);
+ span.setComponent(connectInfo.getComponent());
+ SpanLayer.asDB(span);
+ }
+ }
+
+ @Override
+ public final Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Object ret) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)
objInst.getSkyWalkingDynamicField();
+ if (cacheObject.getConnectionInfo() != null) {
+ ContextManager.stopSpan();
+ }
+ return ret;
+ }
+
+ @Override
+ public final void handleMethodException(EnhancedInstance objInst, Method
method, Object[] allArguments,
+ Class<?>[] argumentsTypes,
Throwable t) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)
objInst.getSkyWalkingDynamicField();
+ if (cacheObject.getConnectionInfo() != null) {
+ ContextManager.activeSpan().log(t);
+ }
+ }
+
+ private String buildOperationName(ConnectionInfo connectionInfo, String
methodName, String statementName) {
+ return connectionInfo.getDBType() + "/JDBC/" + statementName + "/" +
methodName;
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/ConnectionInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/ConnectionInstrumentation.java
new file mode 100644
index 0000000000..2f7083eca4
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/ConnectionInstrumentation.java
@@ -0,0 +1,144 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.apache.skywalking.apm.plugin.jdbc.define.Constants;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class ConnectionInstrumentation extends
ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String ENHANCE_CLASS = "org.mariadb.jdbc.Connection";
+ private static final String CREATE_STATEMENT_INTERCEPTOR_CLASS =
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.CreateStatementInterceptor";
+ private static final String CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS =
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.CreatePreparedStatementInterceptor";
+ private static final String CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS =
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.CreateCallableStatementInterceptor";
+ private static final String SET_CATALOG_INTERCEPTOR_CLASS =
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.SetCatalogInterceptor";
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+
+ @Override
+ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override
+ public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints()
{
+ return new InstanceMethodsInterceptPoint[]{
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named(Constants.CREATE_STATEMENT_METHOD_NAME);
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return CREATE_STATEMENT_INTERCEPTOR_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named(Constants.PREPARE_STATEMENT_METHOD_NAME);
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named(Constants.PREPARE_CALL_METHOD_NAME);
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named(Constants.COMMIT_METHOD_NAME)
+ .or(named(Constants.ROLLBACK_METHOD_NAME))
+ .or(named(Constants.CLOSE_METHOD_NAME))
+
.or(named(Constants.RELEASE_SAVE_POINT_METHOD_NAME));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return Constants.SERVICE_METHOD_INTERCEPT_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named("setCatalog");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return SET_CATALOG_INTERCEPTOR_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+
+ }
+
+ @Override
+ protected String[] witnessClasses() {
+ return new String[]{"org.mariadb.jdbc.Connection"};
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/DriverInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/DriverInstrumentation.java
new file mode 100644
index 0000000000..b0a3dba6b0
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/DriverInstrumentation.java
@@ -0,0 +1,36 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import
org.apache.skywalking.apm.plugin.jdbc.define.AbstractDriverInstrumentation;
+
+import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link DriverInstrumentation} presents that skywalking intercepts {@link
org.mariadb.jdbc.Driver}.
+ */
+public class DriverInstrumentation extends AbstractDriverInstrumentation {
+ private static final String ENHANCE_CLASS = "org.mariadb.jdbc.Driver";
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementIgnoredSetterInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementIgnoredSetterInstrumentation.java
new file mode 100644
index 0000000000..7e036281fb
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementIgnoredSetterInstrumentation.java
@@ -0,0 +1,33 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.plugin.jdbc.PSSetterDefinitionOfJDBCInstrumentation;
+
+public class PreparedStatementIgnoredSetterInstrumentation extends
PreparedStatementInstrumentation {
+
+ @Override
+ public final InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[]{
+ new PSSetterDefinitionOfJDBCInstrumentation(true)
+ };
+ }
+
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementInstrumentation.java
new file mode 100644
index 0000000000..fced984b0b
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementInstrumentation.java
@@ -0,0 +1,74 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch.byMultiClassMatch;
+
+public class PreparedStatementInstrumentation extends
ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String CLIENT_PREPARED_STATEMENT_CLASS =
"org.mariadb.jdbc.ClientPreparedStatement";
+ private static final String SERVER_PREPARED_STATEMENT_CLASS =
"org.mariadb.jdbc.ServerPreparedStatement";
+ private static final String
PREPARED_STATEMENT_EXECUTE_METHODS_INTERCEPTOR_CLASS =
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.PreparedStatementExecuteMethodsInterceptor";
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byMultiClassMatch(
+ CLIENT_PREPARED_STATEMENT_CLASS,
+ SERVER_PREPARED_STATEMENT_CLASS
+ );
+ }
+
+ @Override
+ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override
+ public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints()
{
+ return new InstanceMethodsInterceptPoint[]{
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named("execute")
+ .or(named("executeQuery"))
+ .or(named("executeUpdate"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return
PREPARED_STATEMENT_EXECUTE_METHODS_INTERCEPTOR_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementNullSetterInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementNullSetterInstrumentation.java
new file mode 100644
index 0000000000..30a1865174
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementNullSetterInstrumentation.java
@@ -0,0 +1,33 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.plugin.jdbc.JDBCPreparedStatementNullSetterInstanceMethodsInterceptPoint;
+
+public class PreparedStatementNullSetterInstrumentation extends
PreparedStatementInstrumentation {
+
+ @Override
+ public final InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[]{
+ new
JDBCPreparedStatementNullSetterInstanceMethodsInterceptPoint()
+ };
+ }
+
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementSetterInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementSetterInstrumentation.java
new file mode 100644
index 0000000000..bc625974eb
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementSetterInstrumentation.java
@@ -0,0 +1,33 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.plugin.jdbc.PSSetterDefinitionOfJDBCInstrumentation;
+
+public class PreparedStatementSetterInstrumentation extends
PreparedStatementInstrumentation {
+
+ @Override
+ public final InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[]{
+ new PSSetterDefinitionOfJDBCInstrumentation(false)
+ };
+ }
+
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/StatementInstrumentation.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/StatementInstrumentation.java
new file mode 100644
index 0000000000..13a8c7e033
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/StatementInstrumentation.java
@@ -0,0 +1,71 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class StatementInstrumentation extends
ClassInstanceMethodsEnhancePluginDefine {
+ private static final String MARIADB_STATEMENT_CLASS_NAME =
"org.mariadb.jdbc.Statement";
+ private static final String STATEMENT_EXECUTE_METHODS_INTERCEPTOR =
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.StatementExecuteMethodsInterceptor";
+
+ @Override
+ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override
+ public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints()
{
+ return new InstanceMethodsInterceptPoint[]{
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription>
getMethodsMatcher() {
+ return named("execute")
+ .or(named("executeQuery"))
+ .or(named("executeUpdate"))
+ .or(named("executeLargeUpdate"))
+ .or(named("executeBatch"))
+ .or(named("executeLargeBatch"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return STATEMENT_EXECUTE_METHODS_INTERCEPTOR;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(MARIADB_STATEMENT_CLASS_NAME);
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/resources/skywalking-plugin.def
similarity index 52%
copy from
apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
copy to
apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/resources/skywalking-plugin.def
index eda47ffa99..d1bdb703d4 100644
---
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/resources/skywalking-plugin.def
@@ -14,5 +14,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-feign-default-http-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.DefaultHttpClientInstrumentation
-feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarInstrumentation
\ No newline at end of file
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.DriverInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.ConnectionInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.StatementInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementSetterInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementNullSetterInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementIgnoredSetterInstrumentation
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptorTest.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptorTest.java
new file mode 100644
index 0000000000..a034865659
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CreateCallableStatementInterceptorTest {
+
+ private static final String SQL = "Select * from test";
+
+ private CreateCallableStatementInterceptor interceptor;
+
+ @Mock
+ private EnhancedInstance ret;
+
+ @Mock
+ private EnhancedInstance objectInstance;
+
+ @Mock
+ private ConnectionInfo connectionInfo;
+
+ @Before
+ public void setUp() {
+ interceptor = new CreateCallableStatementInterceptor();
+
+
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(connectionInfo);
+ }
+
+ @Test
+ public void testResultIsEnhanceInstance() {
+ interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null,
ret);
+ verify(ret).setSkyWalkingDynamicField(any());
+ }
+
+ @Test
+ public void testResultIsNotEnhanceInstance() {
+ interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null,
new Object());
+ verify(ret, times(0)).setSkyWalkingDynamicField(any());
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptorTest.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptorTest.java
new file mode 100644
index 0000000000..0c2c51c9ad
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CreatePreparedStatementInterceptorTest {
+
+ private static final String SQL = "Select * from test";
+
+ private CreatePreparedStatementInterceptor interceptor;
+
+ @Mock
+ private EnhancedInstance ret;
+
+ @Mock
+ private EnhancedInstance objectInstance;
+
+ @Mock
+ private ConnectionInfo connectionInfo;
+
+ @Before
+ public void setUp() {
+ interceptor = new CreatePreparedStatementInterceptor();
+
+
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(connectionInfo);
+ }
+
+ @Test
+ public void testResultIsEnhanceInstance() {
+ interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null,
ret);
+ verify(ret).setSkyWalkingDynamicField(any());
+ }
+
+ @Test
+ public void testResultIsNotEnhanceInstance() {
+ interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null,
new Object());
+ verify(ret, times(0)).setSkyWalkingDynamicField(any());
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptorTest.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptorTest.java
new file mode 100644
index 0000000000..663ce62d32
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CreateStatementInterceptorTest {
+
+ private static final String SQL = "Select * from test";
+
+ private CreateStatementInterceptor interceptor;
+
+ @Mock
+ private EnhancedInstance ret;
+
+ @Mock
+ private EnhancedInstance objectInstance;
+
+ @Mock
+ private ConnectionInfo connectionInfo;
+
+ @Before
+ public void setUp() {
+ interceptor = new CreateStatementInterceptor();
+
+
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(connectionInfo);
+ }
+
+ @Test
+ public void testResultIsEnhanceInstance() {
+ interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null,
ret);
+ verify(ret).setSkyWalkingDynamicField(any());
+ }
+
+ @Test
+ public void testResultIsNotEnhanceInstance() {
+ interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null,
new Object());
+ verify(ret, times(0)).setSkyWalkingDynamicField(any());
+ }
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptorTest.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptorTest.java
new file mode 100644
index 0000000000..3e624d7952
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptorTest.java
@@ -0,0 +1,153 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
+import
org.apache.skywalking.apm.plugin.jdbc.JDBCPreparedStatementSetterInterceptor;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(TracingSegmentRunner.class)
+public class PreparedStatementExecuteMethodsInterceptorTest {
+
+ private static final String SQL = "Select * from test where id = ?";
+
+ @SegmentStoragePoint
+ private SegmentStorage segmentStorage;
+
+ @Rule
+ public AgentServiceRule serviceRule = new AgentServiceRule();
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ private PreparedStatementExecuteMethodsInterceptor
serviceMethodInterceptor;
+
+ private JDBCPreparedStatementSetterInterceptor
preparedStatementSetterInterceptor;
+
+ @Mock
+ private ConnectionInfo connectionInfo;
+ @Mock
+ private EnhancedInstance objectInstance;
+ @Mock
+ private Method method;
+ private StatementEnhanceInfos enhanceRequireCacheObject;
+
+ @Before
+ public void setUp() {
+ JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS = true;
+ preparedStatementSetterInterceptor = new
JDBCPreparedStatementSetterInterceptor();
+ serviceMethodInterceptor = new
PreparedStatementExecuteMethodsInterceptor();
+
+ enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo,
SQL, "PreparedStatement");
+
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(enhanceRequireCacheObject);
+ when(method.getName()).thenReturn("executeQuery");
+
when(connectionInfo.getComponent()).thenReturn(ComponentsDefine.MARIADB_JDBC);
+ when(connectionInfo.getDBType()).thenReturn("Mariadb");
+ when(connectionInfo.getDatabaseName()).thenReturn("test");
+ when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3306");
+ }
+
+ @After
+ public void clean() {
+ JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
+ JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS = false;
+ }
+
+ @Test
+ public void testExecutePreparedStatement() throws Throwable {
+ preparedStatementSetterInterceptor.beforeMethod(
+ objectInstance, method, new Object[] {
+ 1,
+ "abcd"
+ }, null, null);
+ preparedStatementSetterInterceptor.beforeMethod(
+ objectInstance, method, new Object[] {
+ 2,
+ "efgh"
+ }, null, null);
+
+ serviceMethodInterceptor.beforeMethod(objectInstance, method, new
Object[] {SQL}, null, null);
+ serviceMethodInterceptor.afterMethod(objectInstance, method, new
Object[] {SQL}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+ AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+ SpanAssert.assertLayer(span, SpanLayer.DB);
+ assertThat(span.getOperationName(),
is("Mariadb/JDBC/PreparedStatement/executeQuery"));
+ SpanAssert.assertTag(span, 0, "Mariadb");
+ SpanAssert.assertTag(span, 1, "test");
+ SpanAssert.assertTag(span, 2, SQL);
+ SpanAssert.assertTag(span, 3, "[abcd,efgh]");
+ }
+
+ @Test
+ public void testExecutePreparedStatementWithLimitSqlBody() throws
Throwable {
+ JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 10;
+
+ preparedStatementSetterInterceptor.beforeMethod(
+ objectInstance, method, new Object[] {
+ 1,
+ "abcd"
+ }, null, null);
+ preparedStatementSetterInterceptor.beforeMethod(
+ objectInstance, method, new Object[] {
+ 2,
+ "efgh"
+ }, null, null);
+
+ serviceMethodInterceptor.beforeMethod(objectInstance, method, new
Object[] {SQL}, null, null);
+ serviceMethodInterceptor.afterMethod(objectInstance, method, new
Object[] {SQL}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+ AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+ SpanAssert.assertLayer(span, SpanLayer.DB);
+ assertThat(span.getOperationName(),
is("Mariadb/JDBC/PreparedStatement/executeQuery"));
+ SpanAssert.assertTag(span, 0, "Mariadb");
+ SpanAssert.assertTag(span, 1, "test");
+ SpanAssert.assertTag(span, 2, "Select * f...");
+ SpanAssert.assertTag(span, 3, "[abcd,efgh]");
+ }
+
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptorTest.java
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptorTest.java
new file mode 100644
index 0000000000..ce2e83c69a
--- /dev/null
+++
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptorTest.java
@@ -0,0 +1,118 @@
+/*
+ * 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.plugin.jdbc.mariadb.v3;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(TracingSegmentRunner.class)
+public class StatementExecuteMethodsInterceptorTest {
+
+ private static final String SQL = "Select * from test";
+
+ @SegmentStoragePoint
+ private SegmentStorage segmentStorage;
+
+ @Rule
+ public AgentServiceRule serviceRule = new AgentServiceRule();
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ private StatementExecuteMethodsInterceptor serviceMethodInterceptor;
+
+ @Mock
+ private ConnectionInfo connectionInfo;
+ @Mock
+ private EnhancedInstance objectInstance;
+ @Mock
+ private Method method;
+ private StatementEnhanceInfos enhanceRequireCacheObject;
+
+ @Before
+ public void setUp() {
+ JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
+
+ serviceMethodInterceptor = new StatementExecuteMethodsInterceptor();
+
+ enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo,
SQL, "CallableStatement");
+
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(enhanceRequireCacheObject);
+ when(method.getName()).thenReturn("executeQuery");
+
when(connectionInfo.getComponent()).thenReturn(ComponentsDefine.MARIADB_JDBC);
+ when(connectionInfo.getDBType()).thenReturn("Mariadb");
+ when(connectionInfo.getDatabaseName()).thenReturn("test");
+ when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3306");
+ }
+
+ @Test
+ public void testExecuteStatement() {
+ serviceMethodInterceptor.beforeMethod(objectInstance, method, new
Object[]{SQL}, null, null);
+ serviceMethodInterceptor.afterMethod(objectInstance, method, new
Object[]{SQL}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+ AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+ SpanAssert.assertLayer(span, SpanLayer.DB);
+ assertThat(span.getOperationName(),
is("Mariadb/JDBC/CallableStatement/executeQuery"));
+ SpanAssert.assertTag(span, 0, "Mariadb");
+ SpanAssert.assertTag(span, 1, "test");
+ SpanAssert.assertTag(span, 2, SQL);
+ }
+
+ @Test
+ public void testExecuteStatementWithLimitSqlBody() {
+ JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 10;
+ serviceMethodInterceptor.beforeMethod(objectInstance, method, new
Object[]{SQL}, null, null);
+ serviceMethodInterceptor.afterMethod(objectInstance, method, new
Object[]{SQL}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+ AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+ SpanAssert.assertLayer(span, SpanLayer.DB);
+ assertThat(span.getOperationName(),
is("Mariadb/JDBC/CallableStatement/executeQuery"));
+ SpanAssert.assertTag(span, 0, "Mariadb");
+ SpanAssert.assertTag(span, 1, "test");
+ SpanAssert.assertTag(span, 2, "Select * f...");
+ }
+
+}
diff --git
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
index 1dcdb288f8..8fec2f8f4b 100644
---
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
+++
b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
@@ -35,7 +35,7 @@ public class MongoRemotePeerHelper {
*/
public static String getRemotePeer(Cluster cluster) {
StringBuilder peersBuilder = new StringBuilder();
- for (ServerDescription description :
cluster.getDescription().getServerDescriptions()) {
+ for (ServerDescription description :
cluster.getCurrentDescription().getServerDescriptions()) {
ServerAddress address = description.getAddress();
peersBuilder.append(address.getHost()).append(":").append(address.getPort()).append(";");
}
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml
b/apm-sniffer/apm-sdk-plugin/pom.xml
index 1c792ed425..fca054b6a5 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -92,6 +92,7 @@
<module>finagle-6.25.x-plugin</module>
<module>quasar-plugin</module>
<module>mariadb-2.x-plugin</module>
+ <module>mariadb-3.x-plugin</module>
<module>influxdb-2.x-plugin</module>
<module>baidu-brpc-plugin</module>
<module>baidu-brpc-3.x-plugin</module>
diff --git a/docs/en/setup/service-agent/java-agent/Plugin-list.md
b/docs/en/setup/service-agent/java-agent/Plugin-list.md
index 3764ae9716..a829e1a174 100644
--- a/docs/en/setup/service-agent/java-agent/Plugin-list.md
+++ b/docs/en/setup/service-agent/java-agent/Plugin-list.md
@@ -64,6 +64,7 @@
- lettuce-6.5.x
- light4j
- mariadb-2.x
+- mariadb-3.x
- micrometer-1.10.x
- memcache-2.x
- mongodb-2.x
diff --git a/docs/en/setup/service-agent/java-agent/Supported-list.md
b/docs/en/setup/service-agent/java-agent/Supported-list.md
index bbc7da6940..a875618a02 100644
--- a/docs/en/setup/service-agent/java-agent/Supported-list.md
+++ b/docs/en/setup/service-agent/java-agent/Supported-list.md
@@ -28,7 +28,7 @@ metrics based on the tracing data.
* [Netty HTTP](https://github.com/netty/netty) 4.1.x (Optional²)
* [Solon](https://github.com/opensolon/solon) 2.7.x -> 2.8.x
* HTTP Client
- * [Feign](https://github.com/OpenFeign/feign) 9.x -> 12.1
+ * [Feign](https://github.com/OpenFeign/feign) 9.x -> 13.5
* [Netflix Spring Cloud
Feign](https://github.com/spring-cloud/spring-cloud-openfeign) 1.1.x -> 2.x
* [Okhttp](https://github.com/square/okhttp) 2.x -> 3.x -> 4.x
* [Apache httpcomponent HttpClient](http://hc.apache.org/) 2.0 -> 3.1, 4.2,
4.3, 5.0, 5.1
@@ -50,7 +50,7 @@ metrics based on the tracing data.
* H2 Driver 1.3.x -> 1.4.x
* [ShardingSphere](https://github.com/apache/shardingsphere) 3.0.0, 4.0.0,
4.0.1, 4.1.0, 4.1.1, 5.0.0
* PostgreSQL Driver 8.x, 9.x, 42.x
- * Mariadb Driver 1.8, 2.x (2.0 -> 2.7)
+ * Mariadb Driver 1.8, 2.x (2.0 -> 2.7), 3.x (3.0 -> 3.5)
* [InfluxDB](https://github.com/influxdata/influxdb-java) 2.5 -> 2.17
* [Mssql-Jtds](https://github.com/milesibastos/jTDS) 1.x
* [Mssql-jdbc](https://github.com/microsoft/mssql-jdbc) 6.x -> 8.x
@@ -91,7 +91,7 @@ metrics based on the tracing data.
* [Jedis](https://github.com/xetorthio/jedis) 2.x-4.x
* [Redisson](https://github.com/redisson/redisson) Easy Java Redis client
3.5.0 -> 3.30.0
* [Lettuce](https://github.com/lettuce-io/lettuce-core) 5.x -> 6.7.1
- * [MongoDB Java Driver](https://github.com/mongodb/mongo-java-driver)
2.13-2.14, 3.4.0-3.12.7, 4.0.0-4.10.2
+ * [MongoDB Java Driver](https://github.com/mongodb/mongo-java-driver)
2.13-2.14, 3.4.0-3.12.7, 4.0.0-4.11.5
* Memcached Client
* [Spymemcached](https://github.com/couchbase/spymemcached) 2.x
* [Xmemcached](https://github.com/killme2008/xmemcached) 2.x
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list
b/test/plugin/scenarios/feign-scenario/support-version.list
index eb3667e110..60e6621427 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ b/test/plugin/scenarios/feign-scenario/support-version.list
@@ -23,3 +23,5 @@
10.12
11.10
12.1
+12.5
+13.5
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list
b/test/plugin/scenarios/mariadb-3.x-scenario/bin/startup.sh
similarity index 87%
copy from test/plugin/scenarios/feign-scenario/support-version.list
copy to test/plugin/scenarios/mariadb-3.x-scenario/bin/startup.sh
index eb3667e110..a7a67d27ab 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/bin/startup.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+#
# 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
@@ -14,12 +16,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-9.0.0
-9.1.0
-9.2.0
-9.3.1
-9.4.0
-9.5.1
-10.12
-11.10
-12.1
+home="$(cd "$(dirname $0)"; pwd)"
+
+java -jar ${agent_opts} ${home}/../libs/mariadb-3.x-scenario.jar &
\ No newline at end of file
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/config/expectedData.yaml
b/test/plugin/scenarios/mariadb-3.x-scenario/config/expectedData.yaml
new file mode 100644
index 0000000000..9f2a81315d
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/config/expectedData.yaml
@@ -0,0 +1,114 @@
+# 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.
+segmentItems:
+- serviceName: mariadb-3.x-scenario
+ segmentSize: ge 1
+ segments:
+ - segmentId: not null
+ spans:
+ - operationName: Mariadb/JDBC/Statement/execute
+ parentSpanId: 0
+ spanId: 1
+ spanLayer: Database
+ startTime: nq 0
+ endTime: nq 0
+ componentId: 87
+ isError: false
+ spanType: Exit
+ peer: mariadb-server:3306
+ skipAnalysis: 'false'
+ tags:
+ - {key: db.type, value: Mariadb}
+ - {key: db.instance, value: test}
+ - key: db.statement
+ value: "CREATE TABLE test_table(\nid VARCHAR(1) PRIMARY KEY, \nvalue
VARCHAR(10)\
+ \ NOT NULL)"
+ - operationName: Mariadb/JDBC/PreparedStatement/execute
+ parentSpanId: 0
+ spanId: 2
+ spanLayer: Database
+ startTime: nq 0
+ endTime: nq 0
+ componentId: 87
+ isError: false
+ spanType: Exit
+ peer: mariadb-server:3306
+ skipAnalysis: 'false'
+ tags:
+ - {key: db.type, value: Mariadb}
+ - {key: db.instance, value: test}
+ - {key: db.statement, value: "INSERT INTO test_table(id, value)
VALUES(?,?)"}
+ - operationName: Mariadb/JDBC/PreparedStatement/execute
+ parentSpanId: 0
+ spanId: 3
+ spanLayer: Database
+ startTime: nq 0
+ endTime: nq 0
+ componentId: 87
+ isError: false
+ spanType: Exit
+ peer: mariadb-server:3306
+ skipAnalysis: 'false'
+ tags:
+ - {key: db.type, value: Mariadb}
+ - {key: db.instance, value: test}
+ - {key: db.statement, value: "SELECT id, value FROM test_table WHERE id
= ?"}
+ - operationName: Mariadb/JDBC/Statement/execute
+ parentSpanId: 0
+ spanId: 4
+ spanLayer: Database
+ startTime: nq 0
+ endTime: nq 0
+ componentId: 87
+ isError: false
+ spanType: Exit
+ peer: mariadb-server:3306
+ skipAnalysis: 'false'
+ tags:
+ - {key: db.type, value: Mariadb}
+ - {key: db.instance, value: test}
+ - {key: db.statement, value: "DROP table test_table"}
+ - operationName: Mariadb/JDBC/Connection/close
+ parentSpanId: 0
+ spanId: 5
+ spanLayer: Database
+ startTime: nq 0
+ endTime: nq 0
+ componentId: 87
+ isError: false
+ spanType: Exit
+ peer: mariadb-server:3306
+ skipAnalysis: 'false'
+ tags:
+ - {key: db.type, value: Mariadb}
+ - {key: db.instance, value: test}
+ - {key: db.statement, value: ''}
+ - operationName: GET:/mariadb-3.x-scenario/case/mariadb-scenario
+ parentSpanId: -1
+ spanId: 0
+ startTime: nq 0
+ endTime: nq 0
+ spanLayer: Http
+ isError: false
+ spanType: Entry
+ peer: ''
+ componentId: 1
+ tags:
+ - {key: url, value:
'http://localhost:8080/mariadb-3.x-scenario/case/mariadb-scenario'}
+ - {key: http.method, value: GET}
+ - {key: http.status_code, value: '200'}
+ logs: []
+ skipAnalysis: 'false'
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list
b/test/plugin/scenarios/mariadb-3.x-scenario/configuration.yml
similarity index 64%
copy from test/plugin/scenarios/feign-scenario/support-version.list
copy to test/plugin/scenarios/mariadb-3.x-scenario/configuration.yml
index eb3667e110..cebb701abb 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/configuration.yml
@@ -14,12 +14,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-9.0.0
-9.1.0
-9.2.0
-9.3.1
-9.4.0
-9.5.1
-10.12
-11.10
-12.1
+type: jvm
+entryService: http://localhost:8080/mariadb-3.x-scenario/case/mariadb-scenario
+healthCheck: http://localhost:8080/mariadb-3.x-scenario/case/healthCheck
+startScript: ./bin/startup.sh
+environment:
+depends_on:
+ - mariadb-server
+dependencies:
+ mariadb-server:
+ image: mariadb:10.5.2
+ hostname: mariadb-server
+ expose:
+ - "3306"
+ environment:
+ - MYSQL_ROOT_PASSWORD=root
+ - MYSQL_DATABASE=test
diff --git a/test/plugin/scenarios/mariadb-3.x-scenario/pom.xml
b/test/plugin/scenarios/mariadb-3.x-scenario/pom.xml
new file mode 100644
index 0000000000..b8c31cd066
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/pom.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ ~
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <groupId>org.apache.skywalking.apm.testcase</groupId>
+ <artifactId>mariadb-3.x-scenario</artifactId>
+ <version>1.0.0</version>
+ <packaging>jar</packaging>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <compiler.version>1.8</compiler.version>
+ <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+
+ <test.framework.version>3.5.1</test.framework.version>
+ <docker.image.version>${test.framework.version}</docker.image.version>
+
+ <spring.boot.version>2.1.6.RELEASE</spring.boot.version>
+ </properties>
+
+ <name>skywalking-mariadb-3.x-scenario</name>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-dependencies</artifactId>
+ <version>${spring.boot.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-log4j2</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mariadb.jdbc</groupId>
+ <artifactId>mariadb-java-client</artifactId>
+ <version>${test.framework.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>mariadb-3.x-scenario</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
+ <version>${spring.boot.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>repackage</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${maven-compiler-plugin.version}</version>
+ <configuration>
+ <source>${compiler.version}</source>
+ <target>${compiler.version}</target>
+ <encoding>${project.build.sourceEncoding}</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>assemble</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+
<descriptor>src/main/assembly/assembly.xml</descriptor>
+ </descriptors>
+ <outputDirectory>./target/</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/assembly/assembly.xml
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/assembly/assembly.xml
new file mode 100644
index 0000000000..80cf6eba69
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/assembly/assembly.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ ~
+ -->
+<assembly
+
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <fileSets>
+ <fileSet>
+ <directory>./bin</directory>
+ <fileMode>0775</fileMode>
+ </fileSet>
+ </fileSets>
+
+ <files>
+ <file>
+
<source>${project.build.directory}/mariadb-3.x-scenario.jar</source>
+ <outputDirectory>./libs</outputDirectory>
+ <fileMode>0775</fileMode>
+ </file>
+ </files>
+</assembly>
diff --git
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/Application.java
similarity index 50%
copy from
apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
copy to
test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/Application.java
index 1dcdb288f8..ad8ed130c2 100644
---
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
+++
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/Application.java
@@ -16,29 +16,24 @@
*
*/
-package org.apache.skywalking.apm.plugin.mongodb.v4.support;
+package org.apache.skywalking.apm.testcase.mariadb;
-import com.mongodb.ServerAddress;
-import com.mongodb.connection.ServerDescription;
-import com.mongodb.internal.connection.Cluster;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
-@SuppressWarnings("deprecation")
-public class MongoRemotePeerHelper {
+@SpringBootApplication
+public class Application {
- private MongoRemotePeerHelper() {
- }
+ private static final Logger LOGGER =
LogManager.getLogger(Application.class);
- /**
- *
- * @param cluster cluster
- * @return result
- */
- public static String getRemotePeer(Cluster cluster) {
- StringBuilder peersBuilder = new StringBuilder();
- for (ServerDescription description :
cluster.getDescription().getServerDescriptions()) {
- ServerAddress address = description.getAddress();
-
peersBuilder.append(address.getHost()).append(":").append(address.getPort()).append(";");
+ public static void main(String[] args) {
+ try {
+ SpringApplication.run(Application.class, args);
+ } catch (Exception ex) {
+ LOGGER.error("Application start error", ex);
+ throw ex;
}
- return peersBuilder.substring(0, peersBuilder.length() - 1);
}
}
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/MariadbConfig.java
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/MariadbConfig.java
new file mode 100644
index 0000000000..7eb8a6b1cb
--- /dev/null
+++
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/MariadbConfig.java
@@ -0,0 +1,58 @@
+/*
+ * 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.testcase.mariadb;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class MariadbConfig {
+ private static final Logger LOGGER =
LogManager.getLogger(MariadbConfig.class);
+ private static String URL;
+ private static String USER_NAME;
+ private static String PASSWORD;
+
+ static {
+ InputStream inputStream =
MariadbConfig.class.getClassLoader().getResourceAsStream("/jdbc.properties");
+ Properties properties = new Properties();
+ try {
+ properties.load(inputStream);
+ } catch (IOException e) {
+ LOGGER.error("Failed to load config", e);
+ }
+
+ URL = properties.getProperty("mariadb.url");
+ USER_NAME = properties.getProperty("mariadb.username");
+ PASSWORD = properties.getProperty("mariadb.password");
+ }
+
+ public static String getUrl() {
+ return URL;
+ }
+
+ public static String getUserName() {
+ return USER_NAME;
+ }
+
+ public static String getPassword() {
+ return PASSWORD;
+ }
+}
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/SQLExecutor.java
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/SQLExecutor.java
new file mode 100644
index 0000000000..74b7ffbad4
--- /dev/null
+++
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/SQLExecutor.java
@@ -0,0 +1,70 @@
+/*
+ * 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.testcase.mariadb;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class SQLExecutor implements AutoCloseable {
+ private static final Logger LOGGER =
LogManager.getLogger(SQLExecutor.class);
+ private Connection connection;
+
+ public SQLExecutor() throws SQLException {
+ try {
+ Class.forName("org.mariadb.jdbc.Driver");
+ } catch (ClassNotFoundException ex) {
+ LOGGER.error(ex);
+ }
+ connection = DriverManager.getConnection(MariadbConfig.getUrl(),
MariadbConfig.getUserName(), MariadbConfig.getPassword());
+ }
+
+ public void execute(String sql) throws SQLException {
+ Statement statement = connection.createStatement();
+ statement.execute(sql);
+ }
+
+ public void insertData(String sql, String id, String value) throws
SQLException {
+ PreparedStatement preparedStatement = connection.prepareStatement(sql);
+ preparedStatement.setString(1, id);
+ preparedStatement.setString(2, value);
+ preparedStatement.execute();
+ }
+
+ public void queryData(String sql, String id) throws SQLException {
+ PreparedStatement preparedStatement = connection.prepareStatement(sql);
+ preparedStatement.setString(1, id);
+ preparedStatement.execute();
+ }
+
+ public void closeConnection() throws SQLException {
+ if (this.connection != null) {
+ this.connection.close();
+ }
+ }
+
+ @Override
+ public void close() throws Exception {
+ closeConnection();
+ }
+}
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/controller/CaseController.java
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/controller/CaseController.java
new file mode 100644
index 0000000000..7f6638bd7d
--- /dev/null
+++
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/controller/CaseController.java
@@ -0,0 +1,63 @@
+/*
+ * 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.testcase.mariadb.controller;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.skywalking.apm.testcase.mariadb.SQLExecutor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/case")
+public class CaseController {
+
+ private static final Logger LOGGER =
LogManager.getLogger(CaseController.class);
+
+ private static final String SUCCESS = "Success";
+
+ private static final String CREATE_TABLE_SQL = "CREATE TABLE
test_table(\n" + "id VARCHAR(1) PRIMARY KEY, \n" + "value VARCHAR(10) NOT
NULL)";
+ private static final String INSERT_DATA_SQL = "INSERT INTO test_table(id,
value) VALUES(?,?)";
+ private static final String QUERY_DATA_SQL = "SELECT id, value FROM
test_table WHERE id = ?";
+ private static final String DELETE_DATA_SQL = "DELETE FROM test_table
WHERE id=?";
+ private static final String DROP_TABLE_SQL = "DROP table test_table";
+
+ @RequestMapping("/mariadb-scenario")
+ @ResponseBody
+ public String testcase() throws Exception {
+ try (SQLExecutor sqlExecute = new SQLExecutor()) {
+ sqlExecute.execute(CREATE_TABLE_SQL);
+ sqlExecute.insertData(INSERT_DATA_SQL, "1", "value");
+ sqlExecute.queryData(QUERY_DATA_SQL, "1");
+ sqlExecute.execute(DROP_TABLE_SQL);
+ } catch (Exception ex) {
+ LOGGER.error("Failed to execute sql.", ex);
+ throw ex;
+ }
+ return SUCCESS;
+ }
+
+ @RequestMapping("/healthCheck")
+ @ResponseBody
+ public String healthCheck() throws Exception {
+ return SUCCESS;
+ }
+
+}
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/application.yaml
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/application.yaml
new file mode 100644
index 0000000000..5045bd899a
--- /dev/null
+++
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/application.yaml
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+#
+server:
+ port: 8080
+ servlet:
+ context-path: /mariadb-3.x-scenario
+logging:
+ config: classpath:log4j2.xml
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/jdbc.properties
similarity index 89%
copy from test/plugin/scenarios/feign-scenario/support-version.list
copy to
test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/jdbc.properties
index eb3667e110..4b7d7ad333 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/jdbc.properties
@@ -13,13 +13,6 @@
# 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.
-
-9.0.0
-9.1.0
-9.2.0
-9.3.1
-9.4.0
-9.5.1
-10.12
-11.10
-12.1
+mariadb.url=jdbc:mariadb://mariadb-server:3306/test
+mariadb.username=root
+mariadb.password=root
diff --git
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/log4j2.xml
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..b5cda5ae8a
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/log4j2.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ ~
+ -->
+<Configuration status="WARN">
+ <Appenders>
+ <Console name="Console" target="SYSTEM_ERR">
+ <PatternLayout charset="UTF-8" pattern="[%d{yyyy-MM-dd
HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Root level="WARN">
+ <AppenderRef ref="Console"/>
+ </Root>
+ </Loggers>
+</Configuration>
diff --git
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
b/test/plugin/scenarios/mariadb-3.x-scenario/support-version.list
similarity index 95%
copy from
test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
copy to test/plugin/scenarios/mariadb-3.x-scenario/support-version.list
index 99dbebec49..de41a47025 100644
---
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/support-version.list
@@ -14,7 +14,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-9.4.1212
-42.0.0
-42.1.4
-42.2.8
+3.0.11
+3.1.4
+3.2.0
+3.3.4
+3.4.1
+3.5.1
+
diff --git a/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
b/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
index d48bca9d2d..42c7e89fb5 100644
--- a/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
+++ b/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
@@ -24,4 +24,5 @@
4.7.2
4.8.2
4.9.1
-4.10.2
\ No newline at end of file
+4.10.2
+4.11.5
\ No newline at end of file
diff --git
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
b/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
index 99dbebec49..3aa745581d 100644
---
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
+++
b/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
@@ -14,7 +14,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-9.4.1212
42.0.0
42.1.4
42.2.8