You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by yi...@apache.org on 2023/02/14 06:59:15 UTC
[skywalking-java] 01/01: Fix oracle url parser missed case
This is an automated email from the ASF dual-hosted git repository.
yihaochen pushed a commit to branch fix-oracle-url-parser
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git
commit 15eb9419567f16ea351428bfae62381308f045eb
Author: Superskyyy <su...@outlook.com>
AuthorDate: Tue Feb 14 01:57:45 2023 -0500
Fix oracle url parser missed case
---
.../plugin/jdbc/connectionurl/parser/OracleURLParser.java | 13 ++++++++++---
.../apm/plugin/jdbc/connectionurl/parser/URLParserTest.java | 4 ++--
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
index 470cf6e5bc..9c14d40ce5 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
@@ -27,8 +27,8 @@ import org.apache.skywalking.apm.util.StringUtil;
/**
* {@link OracleURLParser} presents that how to parse oracle connection url.
* <p>
- * Note: {@link OracleURLParser} can parse the commons connection url. the commons connection url is of the form:
- * <code>jdbc:oracle:(drivertype):@(database)</code>,the other the form of connection url cannot be parsed success.
+ * Note: {@link OracleURLParser} can parse the commons/TNS connection url. the commons connection url is of the form:
+ * <code>jdbc:oracle:(drivertype):@(database)</code>, the other the form of connection url cannot be parsed successfully.
*/
public class OracleURLParser extends AbstractURLParser {
@@ -49,7 +49,14 @@ public class OracleURLParser extends AbstractURLParser {
} else {
hostLabelStartIndex = url.indexOf("@") + 1;
}
- int hostLabelEndIndex = url.lastIndexOf(":");
+
+ String urlTrimmed = url.substring(hostLabelStartIndex);
+
+ // When /service/<property> exists, check the first slash in trimmed url
+ // otherwise use the last colon to locate the port number
+ int hostLabelEndIndex = urlTrimmed.contains("/") ?
+ hostLabelStartIndex + urlTrimmed.indexOf("/") : url.lastIndexOf(":");
+
return new URLLocation(hostLabelStartIndex, hostLabelEndIndex);
}
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
index b9120aeb74..0e066fd9d0 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
@@ -99,10 +99,10 @@ public class URLParserTest {
@Test
public void testParseOracleServiceName() {
- ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@//localhost:1521/orcl");
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@//localhost:1531/orcl");
assertThat(connectionInfo.getDBType(), is("Oracle"));
assertThat(connectionInfo.getDatabaseName(), is("orcl"));
- assertThat(connectionInfo.getDatabasePeer(), is("localhost:1521"));
+ assertThat(connectionInfo.getDatabasePeer(), is("localhost:1531"));
}
@Test