This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new 4325cced4c6 branch-3.1: [refactor](plugin) unify the plugin dir #45936
(#52921)
4325cced4c6 is described below
commit 4325cced4c688082555bec9f2f7a7369ebde52d3
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Tue Jul 8 17:45:03 2025 +0800
branch-3.1: [refactor](plugin) unify the plugin dir #45936 (#52921)
bp #45936
---
be/src/common/config.cpp | 4 +--
be/src/runtime/user_function_cache.h | 2 ++
bin/start_be.sh | 8 ++++++
bin/start_fe.sh | 8 ++++++
build.sh | 12 +++++++--
.../trinoconnector/TrinoConnectorPluginLoader.java | 30 +++++++++++++++++++---
.../main/java/org/apache/doris/common/Config.java | 24 ++++++++---------
.../apache/doris/analysis/CreateFunctionStmt.java | 3 ---
.../org/apache/doris/catalog/JdbcResource.java | 25 +++++++++++++++++-
.../trinoconnector/TrinoConnectorPluginLoader.java | 29 ++++++++++++++++++---
.../org/apache/doris/catalog/JdbcResourceTest.java | 6 +++--
11 files changed, 123 insertions(+), 28 deletions(-)
diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp
index 3da07eb9c72..612ae7fa4e4 100644
--- a/be/src/common/config.cpp
+++ b/be/src/common/config.cpp
@@ -52,7 +52,7 @@ namespace doris::config {
DEFINE_String(custom_config_dir, "${DORIS_HOME}/conf");
// Dir of jdbc drivers
-DEFINE_String(jdbc_drivers_dir, "${DORIS_HOME}/jdbc_drivers");
+DEFINE_String(jdbc_drivers_dir, "${DORIS_HOME}/plugins/jdbc_drivers");
// cluster id
DEFINE_Int32(cluster_id, "-1");
@@ -1394,7 +1394,7 @@ DEFINE_Validator(s3_put_token_per_second, [](int64_t
config) -> bool { return co
DEFINE_mInt64(s3_put_token_limit, "0");
-DEFINE_String(trino_connector_plugin_dir, "${DORIS_HOME}/connectors");
+DEFINE_String(trino_connector_plugin_dir, "${DORIS_HOME}/plugins/connectors");
// ca_cert_file is in this path by default, Normally no modification is
required
// ca cert default path is different from different OS
diff --git a/be/src/runtime/user_function_cache.h
b/be/src/runtime/user_function_cache.h
index 93759c261e2..2537d9376ec 100644
--- a/be/src/runtime/user_function_cache.h
+++ b/be/src/runtime/user_function_cache.h
@@ -75,6 +75,8 @@ private:
std::string _get_file_name_from_url(const std::string& url) const;
std::vector<std::string> _split_string_by_checksum(const std::string&
file);
+ std::string _check_and_return_default_driver_url(const std::string& url);
+
private:
std::string _lib_dir;
void* _current_process_handle = nullptr;
diff --git a/bin/start_be.sh b/bin/start_be.sh
index 3cb25ff735f..d59c6445be6 100755
--- a/bin/start_be.sh
+++ b/bin/start_be.sh
@@ -245,12 +245,20 @@ if [[ -d "${DORIS_HOME}/lib/java_extensions/jindofs" ]];
then
fi
# add custom_libs to CLASSPATH
+# ATTN, custom_libs is deprecated, use plugins/java_extensions
if [[ -d "${DORIS_HOME}/custom_lib" ]]; then
for f in "${DORIS_HOME}/custom_lib"/*.jar; do
DORIS_CLASSPATH="${DORIS_CLASSPATH}:${f}"
done
fi
+# add plugins/java_extensions to CLASSPATH
+if [[ -d "${DORIS_HOME}/plugins/java_extensions" ]]; then
+ for f in "${DORIS_HOME}/plugins/java_extensions"/*.jar; do
+ CLASSPATH="${CLASSPATH}:${f}"
+ done
+fi
+
# make sure the preload-extensions-project.jar is at first order, so that some
classed
# with same qualified name can be loaded priority from
preload-extensions-project.jar.
DORIS_CLASSPATH="${DORIS_PRELOAD_JAR}:${DORIS_CLASSPATH}"
diff --git a/bin/start_fe.sh b/bin/start_fe.sh
index 56cf5523c3e..2fd0920df63 100755
--- a/bin/start_fe.sh
+++ b/bin/start_fe.sh
@@ -217,6 +217,7 @@ for f in "${DORIS_HOME}/lib"/*.jar; do
done
# add custom_libs to CLASSPATH
+# ATTN, custom_libs is deprecated, use plugins/java_extensions
if [[ -d "${DORIS_HOME}/custom_lib" ]]; then
for f in "${DORIS_HOME}/custom_lib"/*.jar; do
CLASSPATH="${CLASSPATH}:${f}"
@@ -231,6 +232,13 @@ if [[ -d "${DORIS_HOME}/lib/jindofs" ]]; then
done
fi
+# add plugins/java_extensions to CLASSPATH
+if [[ -d "${DORIS_HOME}/plugins/java_extensions" ]]; then
+ for f in "${DORIS_HOME}/plugins/java_extensions"/*.jar; do
+ CLASSPATH="${CLASSPATH}:${f}"
+ done
+fi
+
# make sure the doris-fe.jar is at first order, so that some classed
# with same qualified name can be loaded priority from doris-fe.jar
CLASSPATH="${DORIS_FE_JAR}:${CLASSPATH}"
diff --git a/build.sh b/build.sh
index 3104fa51655..329aa7ff3ce 100755
--- a/build.sh
+++ b/build.sh
@@ -776,7 +776,11 @@ if [[ "${BUILD_FE}" -eq 1 ]]; then
mkdir -p "${DORIS_OUTPUT}/fe/log"
mkdir -p "${DORIS_OUTPUT}/fe/doris-meta"
mkdir -p "${DORIS_OUTPUT}/fe/conf/ssl"
- mkdir -p "${DORIS_OUTPUT}/fe/connectors"
+ mkdir -p "${DORIS_OUTPUT}/fe/plugins/jdbc_drivers/"
+ mkdir -p "${DORIS_OUTPUT}/fe/plugins/java_udf/"
+ mkdir -p "${DORIS_OUTPUT}/fe/plugins/connectors/"
+ mkdir -p "${DORIS_OUTPUT}/fe/plugins/hadoop_conf/"
+ mkdir -p "${DORIS_OUTPUT}/fe/plugins/java_extensions/"
fi
if [[ "${BUILD_SPARK_DPP}" -eq 1 ]]; then
@@ -914,7 +918,11 @@ EOF
mkdir -p "${DORIS_OUTPUT}/be/log"
mkdir -p "${DORIS_OUTPUT}/be/log/pipe_tracing"
mkdir -p "${DORIS_OUTPUT}/be/storage"
- mkdir -p "${DORIS_OUTPUT}/be/connectors"
+ mkdir -p "${DORIS_OUTPUT}/be/plugins/jdbc_drivers/"
+ mkdir -p "${DORIS_OUTPUT}/be/plugins/java_udf/"
+ mkdir -p "${DORIS_OUTPUT}/be/plugins/connectors/"
+ mkdir -p "${DORIS_OUTPUT}/be/plugins/hadoop_conf/"
+ mkdir -p "${DORIS_OUTPUT}/be/plugins/java_extensions/"
fi
if [[ "${BUILD_BROKER}" -eq 1 ]]; then
diff --git
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorPluginLoader.java
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorPluginLoader.java
index 6e74929df70..842c4c744ca 100644
---
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorPluginLoader.java
+++
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorPluginLoader.java
@@ -40,7 +40,7 @@ import java.util.logging.SimpleFormatter;
public class TrinoConnectorPluginLoader {
private static final Logger LOG =
LogManager.getLogger(TrinoConnectorPluginLoader.class);
- private static String pluginsDir = EnvUtils.getDorisHome() + "/connectors";
+ private static String pluginsDir = EnvUtils.getDorisHome() +
"/plugins/connectors";
// Suppress default constructor for noninstantiability
private TrinoConnectorPluginLoader() {
@@ -80,7 +80,7 @@ public class TrinoConnectorPluginLoader {
TypeRegistry typeRegistry = new TypeRegistry(typeOperators,
featuresConfig);
ServerPluginsProviderConfig serverPluginsProviderConfig = new
ServerPluginsProviderConfig()
- .setInstalledPluginsDir(new File(pluginsDir));
+ .setInstalledPluginsDir(new
File(checkAndReturnPluginDir()));
ServerPluginsProvider serverPluginsProvider = new
ServerPluginsProvider(serverPluginsProviderConfig,
MoreExecutors.directExecutor());
HandleResolver handleResolver = new HandleResolver();
@@ -88,7 +88,8 @@ public class TrinoConnectorPluginLoader {
typeRegistry, handleResolver);
trinoConnectorPluginManager.loadPlugins();
} catch (Exception e) {
- LOG.warn("Failed load trino-connector plugins from " +
pluginsDir + ", Exception:" + e.getMessage());
+ LOG.warn("Failed load trino-connector plugins from " +
checkAndReturnPluginDir()
+ + ", Exception:" + e.getMessage(), e);
}
}
}
@@ -98,6 +99,29 @@ public class TrinoConnectorPluginLoader {
TrinoConnectorPluginLoader.pluginsDir = pluginsDir;
}
+ private static String checkAndReturnPluginDir() {
+ final String defaultDir = System.getenv("DORIS_HOME") +
"/plugins/connectors";
+ final String defaultOldDir = System.getenv("DORIS_HOME") +
"/connectors";
+ if (TrinoConnectorPluginLoader.pluginsDir.equals(defaultDir)) {
+ // If true, which means user does not set
`trino_connector_plugin_dir` and use the default one.
+ // Because in 2.1.8, we change the default value of
`trino_connector_plugin_dir`
+ // from `DORIS_HOME/connectors` to `DORIS_HOME/plugins/connectors`,
+ // so we need to check the old default dir for compatibility.
+ File oldDir = new File(defaultOldDir);
+ if (oldDir.exists() && oldDir.isDirectory()) {
+ String[] contents = oldDir.list();
+ if (contents != null && contents.length > 0) {
+ // there are contents in old dir, use old one
+ return defaultOldDir;
+ }
+ }
+ return defaultDir;
+ } else {
+ // Return user specified dir directly.
+ return TrinoConnectorPluginLoader.pluginsDir;
+ }
+ }
+
public static TrinoConnectorPluginManager getTrinoConnectorPluginManager()
{
return TrinoConnectorPluginLoad.trinoConnectorPluginManager;
}
diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 5fcb5165d38..e97b9030f05 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -149,7 +149,7 @@ public class Config extends ConfigBase {
public static long prepared_stmt_start_id = -1;
@ConfField(description = {"插件的安装目录", "The installation directory of the
plugin"})
- public static String plugin_dir = System.getenv("DORIS_HOME") + "/plugins";
+ public static String plugin_dir = EnvUtils.getDorisHome() + "/plugins";
@ConfField(mutable = true, masterOnly = true, description = {"是否启用插件",
"Whether to enable the plugin"})
public static boolean plugin_enable = true;
@@ -158,7 +158,7 @@ public class Config extends ConfigBase {
"JDBC 驱动的存放路径。在创建 JDBC Catalog 时,如果指定的驱动文件路径不是绝对路径,则会在这个目录下寻找",
"The path to save jdbc drivers. When creating JDBC Catalog,"
+ "if the specified driver file path is not an absolute
path, Doris will find jars from this path"})
- public static String jdbc_drivers_dir = System.getenv("DORIS_HOME") +
"/jdbc_drivers";
+ public static String jdbc_drivers_dir = EnvUtils.getDorisHome() +
"/plugins/jdbc_drivers";
@ConfField(description = {"JDBC 驱动的安全路径。在创建 JDBC Catalog
时,允许使用的文件或者网络路径,可配置多个,使用分号分隔"
+ "默认为 * 表示全部允许,如果设置为空也表示全部允许",
@@ -215,10 +215,10 @@ public class Config extends ConfigBase {
public static int label_clean_interval_second = 1 * 3600; // 1 hours
@ConfField(description = {"元数据的存储目录", "The directory to save Doris meta
data"})
- public static String meta_dir = System.getenv("DORIS_HOME") +
"/doris-meta";
+ public static String meta_dir = EnvUtils.getDorisHome() + "/doris-meta";
@ConfField(description = {"临时文件的存储目录", "The directory to save Doris temp
data"})
- public static String tmp_dir = System.getenv("DORIS_HOME") + "/temp_dir";
+ public static String tmp_dir = EnvUtils.getDorisHome() + "/temp_dir";
@ConfField(description = {"元数据日志的存储类型。BDB: 日志存储在 BDBJE
中。LOCAL:日志存储在本地文件中(仅用于测试)",
"The storage type of the metadata log. BDB: Logs are stored in
BDBJE. "
@@ -373,7 +373,7 @@ public class Config extends ConfigBase {
@ConfField(description = {"FE https 服务的 key store 路径",
"The key store path of FE https service"})
- public static String key_store_path = System.getenv("DORIS_HOME")
+ public static String key_store_path = EnvUtils.getDorisHome()
+ "/conf/ssl/doris_ssl_certificate.keystore";
@ConfField(description = {"FE https 服务的 key store 密码",
@@ -637,7 +637,7 @@ public class Config extends ConfigBase {
@ConfField(mutable = true, masterOnly = true, description = {"Spark Load
所使用的 Spark 程序目录",
"Spark dir for Spark Load"})
- public static String spark_home_default_dir = System.getenv("DORIS_HOME")
+ "/lib/spark2x";
+ public static String spark_home_default_dir = EnvUtils.getDorisHome() +
"/lib/spark2x";
@ConfField(description = {"Spark load 所使用的依赖项目录", "Spark dependencies dir
for Spark Load"})
public static String spark_resource_path = "";
@@ -646,10 +646,10 @@ public class Config extends ConfigBase {
public static String spark_launcher_log_dir = System.getenv("LOG_DIR") +
"/spark_launcher_log";
@ConfField(description = {"Yarn client 的路径", "Yarn client path"})
- public static String yarn_client_path = System.getenv("DORIS_HOME") +
"/lib/yarn-client/hadoop/bin/yarn";
+ public static String yarn_client_path = EnvUtils.getDorisHome() +
"/lib/yarn-client/hadoop/bin/yarn";
@ConfField(description = {"Yarn 配置文件的路径", "Yarn config path"})
- public static String yarn_config_dir = System.getenv("DORIS_HOME") +
"/lib/yarn-config";
+ public static String yarn_config_dir = EnvUtils.getDorisHome() +
"/lib/yarn-config";
@ConfField(mutable = true, masterOnly = true, description = {"Broker Load
的最大等待 job 数量。"
+ "这个值是一个期望值。在某些情况下,比如切换 master,当前等待的 job 数量可能会超过这个值。",
@@ -1279,7 +1279,7 @@ public class Config extends ConfigBase {
* Save small files
*/
@ConfField
- public static String small_file_dir = System.getenv("DORIS_HOME") +
"/small_files";
+ public static String small_file_dir = EnvUtils.getDorisHome() +
"/small_files";
/**
* This will limit the max recursion depth of hash distribution pruner.
@@ -2353,14 +2353,14 @@ public class Config extends ConfigBase {
* Default CA certificate file location for mysql ssl connection.
*/
@ConfField(mutable = false, masterOnly = false)
- public static String mysql_ssl_default_ca_certificate =
System.getenv("DORIS_HOME")
+ public static String mysql_ssl_default_ca_certificate =
EnvUtils.getDorisHome()
+ "/mysql_ssl_default_certificate/ca_certificate.p12";
/**
* Default server certificate file location for mysql ssl connection.
*/
@ConfField(mutable = false, masterOnly = false)
- public static String mysql_ssl_default_server_certificate =
System.getenv("DORIS_HOME")
+ public static String mysql_ssl_default_server_certificate =
EnvUtils.getDorisHome()
+ "/mysql_ssl_default_certificate/server_certificate.p12";
/**
@@ -2907,7 +2907,7 @@ public class Config extends ConfigBase {
@ConfField(mutable = true, masterOnly = false, description = {"指定
trino-connector catalog 的插件默认加载路径",
"Specify the default plugins loading path for the trino-connector
catalog"})
- public static String trino_connector_plugin_dir = EnvUtils.getDorisHome()
+ "/connectors";
+ public static String trino_connector_plugin_dir = EnvUtils.getDorisHome()
+ "/plugins/connectors";
@ConfField(description = {
"存放 hadoop conf 配置文件的默认目录。",
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
index 4a38d06ffe2..06cab70d7d9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
@@ -268,9 +268,6 @@ public class CreateFunctionStmt extends DdlStmt implements
NotFallbackInParser {
}
userFile = properties.getOrDefault(FILE_KEY,
properties.get(OBJECT_FILE_KEY));
- // if (Strings.isNullOrEmpty(userFile)) {
- // throw new AnalysisException("No 'file' or 'object_file'
in properties");
- // }
if (!Strings.isNullOrEmpty(userFile) && binaryType !=
TFunctionBinaryType.RPC) {
try {
computeObjectChecksum();
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
index c3c8b4d49a6..2989e8859bf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
@@ -21,6 +21,7 @@ package org.apache.doris.catalog;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.Config;
import org.apache.doris.common.DdlException;
+import org.apache.doris.common.EnvUtils;
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.proc.BaseProcResult;
import org.apache.doris.common.util.Util;
@@ -36,6 +37,7 @@ import org.apache.commons.codec.binary.Hex;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
@@ -301,7 +303,7 @@ public class JdbcResource extends Resource {
String schema = uri.getScheme();
checkCloudWhiteList(driverUrl);
if (schema == null && !driverUrl.startsWith("/")) {
- return "file://" + Config.jdbc_drivers_dir + "/" + driverUrl;
+ return checkAndReturnDefaultDriverUrl(driverUrl);
}
if ("*".equals(Config.jdbc_driver_secure_path)) {
@@ -320,6 +322,27 @@ public class JdbcResource extends Resource {
}
}
+ private static String checkAndReturnDefaultDriverUrl(String driverUrl) {
+ final String defaultDriverUrl = EnvUtils.getDorisHome() +
"/plugins/jdbc_drivers";
+ final String defaultOldDriverUrl = EnvUtils.getDorisHome() +
"/jdbc_drivers";
+ if (Config.jdbc_drivers_dir.equals(defaultDriverUrl)) {
+ // If true, which means user does not set `jdbc_drivers_dir` and
use the default one.
+ // Because in new version, we change the default value of
`jdbc_drivers_dir`
+ // from `DORIS_HOME/jdbc_drivers` to
`DORIS_HOME/plugins/jdbc_drivers`,
+ // so we need to check the old default dir for compatibility.
+ File file = new File(defaultDriverUrl + "/" + driverUrl);
+ if (file.exists()) {
+ return "file://" + defaultDriverUrl + "/" + driverUrl;
+ } else {
+ // use old one
+ return "file://" + defaultOldDriverUrl + "/" + driverUrl;
+ }
+ } else {
+ // Return user specified driver url directly.
+ return "file://" + Config.jdbc_drivers_dir + "/" + driverUrl;
+ }
+ }
+
public static String parseDbType(String url) throws DdlException {
if (url.startsWith(JDBC_MYSQL) || url.startsWith(JDBC_MARIADB)) {
return MYSQL;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/trinoconnector/TrinoConnectorPluginLoader.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/trinoconnector/TrinoConnectorPluginLoader.java
index a6f42d0ae15..bc925785c57 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/trinoconnector/TrinoConnectorPluginLoader.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/trinoconnector/TrinoConnectorPluginLoader.java
@@ -76,15 +76,38 @@ public class TrinoConnectorPluginLoader {
typeRegistry = new TypeRegistry(typeOperators, featuresConfig);
ServerPluginsProviderConfig serverPluginsProviderConfig = new
ServerPluginsProviderConfig()
- .setInstalledPluginsDir(new
File(Config.trino_connector_plugin_dir));
+ .setInstalledPluginsDir(new
File(checkAndReturnPluginDir()));
ServerPluginsProvider serverPluginsProvider = new
ServerPluginsProvider(serverPluginsProviderConfig,
MoreExecutors.directExecutor());
trinoConnectorPluginManager = new
TrinoConnectorPluginManager(serverPluginsProvider,
typeRegistry, handleResolver);
trinoConnectorPluginManager.loadPlugins();
} catch (Exception e) {
- LOG.warn("Failed load trino-connector plugins from " +
Config.trino_connector_plugin_dir
- + ", Exception:" + e.getMessage());
+ LOG.warn("Failed load trino-connector plugins from " +
checkAndReturnPluginDir()
+ + ", Exception:" + e.getMessage(), e);
+ }
+ }
+
+ private static String checkAndReturnPluginDir() {
+ final String defaultDir = System.getenv("DORIS_HOME") +
"/plugins/connectors";
+ final String defaultOldDir = System.getenv("DORIS_HOME") +
"/connectors";
+ if (Config.trino_connector_plugin_dir.equals(defaultDir)) {
+ // If true, which means user does not set
`trino_connector_plugin_dir` and use the default one.
+ // Because in 2.1.8, we change the default value of
`trino_connector_plugin_dir`
+ // from `DORIS_HOME/connectors` to
`DORIS_HOME/plugins/connectors`,
+ // so we need to check the old default dir for compatibility.
+ File oldDir = new File(defaultOldDir);
+ if (oldDir.exists() && oldDir.isDirectory()) {
+ String[] contents = oldDir.list();
+ if (contents != null && contents.length > 0) {
+ // there are contents in old dir, use old one
+ return defaultOldDir;
+ }
+ }
+ return defaultDir;
+ } else {
+ // Return user specified dir directly.
+ return Config.trino_connector_plugin_dir;
}
}
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/JdbcResourceTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/JdbcResourceTest.java
index 3cd8f872ce9..1417d75b2e8 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/JdbcResourceTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/JdbcResourceTest.java
@@ -22,6 +22,7 @@ import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.CreateResourceStmt;
import org.apache.doris.common.Config;
import org.apache.doris.common.DdlException;
+import org.apache.doris.common.EnvUtils;
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.UserException;
import org.apache.doris.mysql.privilege.AccessControllerManager;
@@ -205,11 +206,12 @@ public class JdbcResourceTest {
}
@Test
- public void testJdbcDriverPtah() {
+ public void testJdbcDriverPath() {
String driverPath = "postgresql-42.5.0.jar";
Config.jdbc_driver_secure_path = "";
+ Config.jdbc_drivers_dir = EnvUtils.getDorisHome() +
"/plugins/jdbc_drivers";
String fullPath = JdbcResource.getFullDriverUrl(driverPath);
- Assert.assertEquals(fullPath, "file://" + Config.jdbc_drivers_dir +
"/" + driverPath);
+ Assert.assertEquals("file://" + EnvUtils.getDorisHome() +
"/jdbc_drivers/" + driverPath, fullPath);
Config.jdbc_driver_secure_path = "file:///jdbc/;http://jdbc";
String driverPath2 = "file:///postgresql-42.5.0.jar";
Exception exception =
Assert.assertThrows(IllegalArgumentException.class, () -> {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]